Spring MVC 对静态资源的处理

我们在使用Spring MVC的时候,会碰到很多需要访问的静态资源,例如:html,js,css,png,等文件。

如果不对这些文件进行特殊处理,那么当我们访问这些静态资源的时候,Spring MVC会把这些静态资源当作普通的http请求,然后去寻找对应的Controller方法,当它找不到的时候,会直接返回错误404。

下面有三个方案解决这个问题

方案一:激活 Tomcat 的 defaultServlet 来处理静态资源

<servlet-mapping>  
      <servlet-name>default</servlet-name>  
      <url-pattern>*.jpg</url-pattern>  
</servlet-mapping>  

<servlet-mapping>  
      <servlet-name>default</servlet-name>  
      <url-pattern>*.js</url-pattern>  
</servlet-mapping>  

<servlet-mapping>  
      <servlet-name>default</servlet-name>  
      <url-pattern>*.css</url-pattern>  
</servlet-mapping>  

方案二: <mvc:resources />

<mvc:annotation-driven />  
<mvc:resources location="/" mapping="*.html"/>
<mvc:resources location="/" mapping="*.js"/>

注意:使用方案二的时候 <mvc:annotation-driven />必不可少,否则普通请求会受到影响

方案三:使用 <mvc:default-servlet-handler />

<mvc:default-servlet-handler />会让Spring MVC自己去处理静态文件, Spring MVC会把 "/**" url 注册到 SimpleUrlHandlerMapping 的 urlMap 中,把对静态资源的访问由 HandlerMapping 转到 org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler 处理并返回。DefaultServletHttpRequestHandler 使用就是各个 Servlet 容器自己的默认 Servlet。

posted @ 2017-07-10 21:09  湮汐  阅读(198)  评论(0编辑  收藏  举报