问题
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<!--会拦截所有的请求-->
<url-pattern>/</url-pattern>
</servlet-mapping>
- .这样配置的dispatch-servlet会拦截所有请求(除了jsp会由容器默认的Servlet拦截,下面提到的),但是控制器的@RequestMapper(“url”),并没有所有都满足。
- 比如./xxpath/xxx.html, xxx.css等,是没有对应的控制器可以映射的。就会丢掉,对应就成了响应码就成了404。
解决方法
- 可以修改Spring MVC的拦截范围
- Servlet容器有个默认拦截可以配置,其优先于Spring MVC的拦截
基于方法1
①修改web.xml配置文件中dispatch的的范围
比如改为REST风格的"/*.do",但是所有请求都要后缀加".do",有点麻烦,不能完全REST。以下两种<mvc:…>
就是Spring MVC提出的很好解决方法。
②保持Spring MVC在 web.xml文件中的拦截所有的配置, 将拦截到的静态资源请求交回给default Servlet管理 【推荐】
<mvc:default-servlet-handler />
③保持Spring MVC在 web.xml文件中的拦截所有的配置,二级映射Spring MVC容器部分url
在Spring MVC配置文件中加入以下需要过滤的目录文件资源即可(可以添加多条)
<mvc:resources location="" mapping=""/>
基于方法2
可以在web.xml文件中配置Servlet的默认拦截
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/js/*.js</url-pattern>
<url-pattern>/css/*.css</url-pattern>
<url-pattern>/testPage/*.html</url-pattern>
<url-pattern>/image/*</url-pattern>
</servlet-mapping>
这个可以不配置对应的
<servlet>
…</servlet>
但是必须配在dispatch之前,即如下Spring MVC的dispatch分发请求的Servlet之前
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapper>
<servlet-name>dispatcher</servlet-name>
...
</servlet-mapper>
————————————————
版权声明:本文为CSDN博主「Chgl16」的原创文章,遵循CC 4.0 BY-SA版权协议。
原文链接:https://blog.csdn.net/chenbetter1996/article/details/83862873