<servlet> <servlet-name>springServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:/spring-mvc*.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
这是SpringMVC项目的web.xml文件中的配置,由于url-pattern=/,所以不论任何请求都会被dispatcherServlet拦截处理,这包括一些静态资源,比如html,css ,js,jpg等,比如
<a href="../staticResource/front2.html">front2.html</a>
dispatcherServlet就会拦截这个路径,然后寻找是否有匹配的requestMapping,如果发现没有就会报错
No mapping found for HTTP request with URI [/Spring-test/staticResource/front2.html] in DispatcherServlet with name 'springServlet'
这样强行加载的结果就是404.
当然有两个方法可以解决这个问题
1.使用DefaultServlet来拦截加载静态资源的请求
<servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.html</url-pattern> <--注意此处*前不能有/--> </servlet-mapping>
它可以抢在dispatcherServlet之前抢先把静态资源的请求拦截。只要不会被dispatcherServlet拦截,并在可以读取的范围内,静态文件就能成功加载。
2.使用mvc:resources标签引用静态资源
只需要在配置文件中添加如下代码即可。
<mvc:annotation-driven></mvc:annotation-driven> <mvc:resources location="/staticResource/" mapping="/staticResource/**"/>
location:静态文件们在哪个包下面
mapping : 需要被拦截的请求路径,格式一般为“/xx/**",注意最好以*号来结尾,否则会报错,原因我也不知道,谁知道请告诉我为啥吧!