zoukankan      html  css  js  c++  java
  • 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/ 目录下的静态资源的访问。

  • 相关阅读:
    Eclipse慢慢学会的快捷键
    换行和flush()
    接口Interface
    对象的转型
    抽象类和抽象函数
    BufferedReader
    FileInputStream和FileReader
    Unable to instantiate receiver XXXXXX
    声明对象和定义数组
    Eclipse中文乱码问题
  • 原文地址:https://www.cnblogs.com/whitespaces/p/12454901.html
Copyright © 2011-2022 走看看