*.form:代表以*.form结尾的后缀请求都会进入springmvc管/:代表除了JSP以外拦截所有,html、css、js等静态web资源也会拦截/*:拦截所有请求Tomcat提供的默认servlet(DefaultServlet),处理静态资源的(html/css/js),此Servlet在tomcat/conf/web.xml中有配置


配置DefaultServlet需要引入依赖:
<dependency>
<groupId>org.apache.tomcatgroupId>
<artifactId>tomcat-catalinaartifactId>
<version>8.5.41version>
<scope>providedscope>
dependency>
回顾Maven依赖范围:
在web.xml中配置:
<servlet>
<servlet-name>springmvcservlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
<init-param>
<param-name>contextConfigLocationparam-name>
<param-value>classpath:dispatcher-servlet.xmlparam-value>
init-param>
servlet>
<servlet-mapping>
<servlet-name>springmvcservlet-name>
<url-pattern>/url-pattern>
servlet-mapping>
<servlet>
<servlet-name>defaultservlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServletservlet-class>
servlet>
<servlet-mapping>
<servlet-name>defaultservlet-name>
<url-pattern>*.htmlurl-pattern>
servlet-mapping>
<servlet-mapping>
<servlet-name>defaultservlet-name>
<url-pattern>*.pngurl-pattern>
servlet-mapping>
缺省servlet放行原理是:如果是配置的后缀请求直接进入缺省servlet,而不是进入SpringMVC进行处理(不会经过SpringVMC);
Tips:配置缺省servlet放行时,SpringMVC的拦截规则不能为
/*,因为缺省Servlet不能放行JSP请求,如果SpringMVC拦截规则为/*,然后缺省Servlet又不能放行,那么访问JSP时,会出现404;
web.xml:
<servlet>
<servlet-name>springmvcservlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
<init-param>
<param-name>contextConfigLocationparam-name>
<param-value>classpath:dispatcher-servlet.xmlparam-value>
init-param>
servlet>
<servlet-mapping>
<servlet-name>springmvcservlet-name>
<url-pattern>/url-pattern>
servlet-mapping>
在SpringMVC配置文件中配置:
<mvc:resources mapping="/js/**" location="/js/" />
<mvc:resources mapping="/css/**" location="/css/" />
<mvc:resources mapping="/imgs/**" location="/imgs/" />
由Spring MVC框架自己按配置的规则处理静态资源,并添加一些有用的附加值功能。
<url-pattern>/*url-pattern>
<mvc:resources mapping="/jsp/**" location="/jsp/" />
访问:http://localhost:8080/jsp/demo01.jsp

在SpringMVC配置文件中添加:
<mvc:default-servlet-handler />
SpringMVC会在Spring MVC上下文中定义一个DefaultServletHttpRequestHandler;它会像一个检查员,对进入DispatcherServlet的URL进行筛查,如果发现是静态资源的请求,就将该请求转由Web应用服务器默认的Servlet处理,如果不是静态资源的请求,才由DispatcherServlet继续处理。
这种方式同样只能放行静态资源,JSP不属于静态资源;我们将web.xml中的拦截规则改为如下:
<url-pattern>/*url-pattern>
访问:http://localhost:8080/jsp/demo01.jsp

一般Web应用服务器默认的Servlet名称是"default",因此DefaultServletHttpRequestHandler可以找到它。如果你所有的Web应用服务器的默认Servlet名称不是"default",则需要通过default-servlet-name属性显示指定:
<mvc:default-servlet-handler default-servlet-name="所使用的Web服务器默认使用的Servlet名称" />
default-servlet-handler放行:请求进入springmvc然后对其进行筛选,发现是个"静态"资源就交给缺省servlet去处理,但是缺省servlet只会处理静态资源,如果是jsp会特殊处理(下载、无法解析等)!