1. 程式人生 > >spring mvc 中對靜態資源的訪問配置

spring mvc 中對靜態資源的訪問配置

在web.xml中配置spring mc servlet

對url-pattern設定時,排除在spring的servlet之外。

<servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation<
/param-name> <param-value>/WEB-INF/mvc-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern
> </servlet-mapping>

上面的路徑配置’/’中,把所有的url處理全部交給spring mvc來處理了。這樣靜態資源也會被其攔截處理。

改進:
修改spring mvc的servlet處理的url-pattern,指定其具體處理路徑。

在web.xml中使用容器對應的default servlet優先處理靜態資源

每個java web容器都有其default servlet。在spring mvc servlet直接,先配置default servlet處理靜態資源

- Tomcat, Jetty, JBoss, and GlassFish  預設 Servlet的名字 -- "default"
- Resin 預設 Servlet的名字 -- "resin-file"
- WebLogic 預設 Servlet的名字  -- "FileServlet"
<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>  
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.html</url-pattern>
</servlet-mapping>  

在spring mvc的配置中設定方法有2種

選擇其中任意一種
<!-- 方式1 靜態資源訪問處理 這種方法就是利用容器的default servlet來處理先 -->    
<mvc:default-servlet-handler/>

<!-- 方式2 靜態資源訪問處理  org.springframework.web.servlet-3.1.4版本及以後使用 --> 
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<mvc:resources mapping="/static/**" location="/static/" />
<mvc:resources mapping="/resources/**" location="/resources/" />
<mvc:resources mapping="/images/**" location="/images/" />
<mvc:resources mapping="/js/**" location="/js/" />

在伺服器的load balance中配置

其實,靜態的資源不需要進入到spring mvc等java web容器內處理,為效能考慮,可以在前面過濾處理了。
尤其在分散式的環境中,更應如此。