方案一:
一、原理:让DefaultServlet提前拦截静态请求资源:
二、在web.xml中加以配置:
因为web.xml的配置,优先于代码方式启动的DispatcherServlet,所以对静态资源会提前拦截
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- 打开静态的资源的方法1 -->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
<url-pattern>*.html</url-pattern>
<url-pattern>*.css</url-pattern>
<url-pattern>*.img</url-pattern>
</servlet-mapping>
</web-app>
方案二:
一、原理:让DispatcherServlet开发DefaultServlet:
DispatcherServlet将不能确认资源类型转发给DefaultServlet,然后DefaultServlet将静态请求进行处理。
二、在代码中:
@Configuration
@EnableWebMvc
public class MyWebConfigure implements WebMvcConfigurer {
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
//tomcat提供的默认Servlet的名字(可以省略)
configurer.enable("default");
}
}
方案三:
一、原理:为DispatcherServlet添加ResourceHandler:
相当于为DispatcherSerlvet,添了针对于静态资源的处理器。
二、方法:
以下代码相当于为DispathcerServlet开放了:所有未知的url资源,这些资源都将首先在/static文件夹下进行映射。
@Configuration
@EnableWebMvc
public class WebConf implements WebMvcConfigurer {
//打开静态资源的方法3
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//这种配置方法:相当于所有找不到url pattern,都会从webapp/static/中寻找, 有一定的风险
registry.addResourceHandler("/**")
.addResourceLocations("/static/")
.setCacheControl(CacheControl.maxAge(1,TimeUnit.SECONDS));
}