SpringMVC:静态资源访问

SpringMVC:静态资源访问

SpringMVC 中设置访问静态资源有两种思路:

  • 类似普通的 Java Web 项目的『分工』:JSP 请求由 JspServlet 处理,Servlet 请求由 DispacherServlet 处理,对静态资源的请求交由 DefaultServlet 。
  • 将 Servlet 请求和静态资源请求 都交给 DispacherServlet,然后告诉它其中 哪种/哪部分 请求是静态资源请求,让它对其特殊处理。

1. 思路一的相关配置:

将 DispatchServlet 的 url-pattern 配置为 *.do(或其他类似情况),以此作为 Servlet 请求的标志,将所有的 Servlet 请求都交给 DispatcherServlet 。

1.1. 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>*.do</url-pattern>
</servlet-mapping>

那么除了 Servlet 请求、JSP 请求之外的请求,都会被当作是静态资源请求,由 Tomcat 的 DefaultServlet 处理。

通过 spring-web.xml 中添加 mvc:default-servlet-handler 元素表示使用容器默认的 DefaultServlet 进行处理静态资源:

1.2. spring-web.xml:

<mvc:default-servlet-handler default-servlet-name=“所使用的Web服务器默认使用的Servlet名称” />

并非所有的容器的默认的 DefaultSevlet 的 name 并非是 default,所以在非 Tomcat 容器中,需要手动指定其 name 。

  • Tomcat, Jetty, JBoss, and GlassFish:"default"
  • Google App Engine:"_ah_default"
  • WebLogic:"FileServlet"
  • WebSphere:"SimpleFileServlet"

2. 思路二的相关配置:

将 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/ 目录下的静态资源的访问。

猜你喜欢

转载自www.cnblogs.com/whitespaces/p/12454901.html