SpringMVC 中设置访问静态资源有两种思路:
将 DispatchServlet 的 url-pattern 配置为 *.do
(或其他类似情况),以此作为 Servlet 请求的标志,将所有的 Servlet 请求都交给 DispatcherServlet 。
<servlet>
<servlet-name>HelloWeb</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
...
</servlet>
<servlet-mapping>
<servlet-name>HelloWeb</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
那么除了 Servlet 请求、JSP 请求之外的请求,都会被当作是静态资源请求,由 Tomcat 的 DefaultServlet 处理。
通过 spring-web.xml 中添加 mvc:default-servlet-handler
元素表示使用容器默认的 DefaultServlet 进行处理静态资源:
<mvc:default-servlet-handler default-servlet-name=“所使用的Web服务器默认使用的Servlet名称” />
并非所有的容器的默认的 DefaultSevlet 的 name 并非是 default,所以在非 Tomcat 容器中,需要手动指定其 name 。
将 DispatchServlet 的 url-pattern
配置为 /
,此时,DispatcherServlet 它会处理除了 JSP 请求之外的所有请求( Servlet 请求和静态资源请求)。
web.xml
<servlet>
<servlet-name>HelloWeb</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
...
</servlet>
<servlet-mapping>
<servlet-name>HelloWeb</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
然后,再通过 mvc:resources ‘告诉‘ DispatcherServlet,哪些请求是静态资源请求(而不是 Servlet 请求):
spring-web.xml
<mvc:resources location="/xxx/" mapping="/xxx/**" />
例如:
<mvc:resources location="/img/" mapping="/img/**" />
<mvc:resources location="/js/" mapping="/js/**" />
<mvc:resources location="/css/" mapping="/css/**" />
location
元素表示 webapp
目录下的 xxx 目录;mapping 元素表示以 /xxx
开头的所有请求路径。
两个属性共同表明了:但凡以 /xxx
开始的请求,都是针对 /xxx/
目录下的静态资源的访问。
原文:https://www.cnblogs.com/whitespaces/p/12454901.html