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。