要根据web.xml中前端控制器DispatcherServlet的来判断
一.当DispatcherServlet的<url-pattern>*.action</url-pattern>
时,此时前端控制器只拦截后缀为.action的请求,其余的请求会由TomCat的DefaultServlet来处理,此时静态资源必须在WEB-INF文件夹外.
二.当DispatcherServlet的<url-pattern>/</url-pattern>
时,此时,DispatcherServlet(前端控制器)拦截所有的请求,TomCat的DefaultServlet不起作用,此时前端控制器会去处理器映射器中找符合请求的controller,无法找到,就会报错,解决方法:根据静态资源是否在WEB-INF文件夹中分两种情况:
1. 不在WEB-INF中:
方法一:在springMVC配置文件中设置
<!--
静态资源分流
mapping:资源请求的映射
location:本地工程的文件夹路径
-->
<mvc:resources mapping="/static/**" location="/static/"></mvc:resources>
<!-- 加载注解驱动:Spring框架接管动态资源(使用处理器映射器和处理器适配器)-->
<mvc:annotation-driven/>
方法二:在springMVC配置文件中设置
<!-- 将无法处理的请求交给TomCat-->
<mvc:default-servlet-handler/>
<!-- 加载注解驱动:Spring框架接管动态资源(使用处理器映射器和处理器适配器)-->
<mvc:annotation-driven/>
2.在WEB-INF文件夹下:
在SpringMVC的配置文件中设置:
<!--
静态资源分流
mapping:资源请求的映射
location:本地工程的文件夹路径
-->
<mvc:resources mapping="/static/**" location="/WEB-INF/static/"></mvc:resources>
<!-- 加载注解驱动:Spring框架接管动态资源(使用处理器映射器和处理器适配器)-->
<mvc:annotation-driven/>