SpringMVC,3種不同的URL路由配置方法(這根本不是一個小問題)


轉載自:http://blog.csdn.net/fansunion/article/details/41149287?utm_source=tuicool&utm_medium=referral

SpringMVC中配置URL攔截,非常簡單。網上找個示例,就能通過。但是,在我做了好幾個Web項目,又參與了別人主導的Web項目時,發現URL配置也非常有學問。

1. 先說說一種比較常見的:

<servlet>
    <servlet-name>theDispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring/spring-mvc-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>theDispatcher</servlet-name>
    <url-pattern>*.html</url-pattern>
  </servlet-mapping>

 讓SpringMVC指攔截 動態請求,js、css、img等靜態資源不經過Spring,直接讓Web容器處理。

   如果配置了攔截器,也只會攔截.html動態請求。

   靜態資源不走Spring,也不走攔截器,性能當然是比較好的。

   如果使用了Nginx,配置靜態資源攔截,讓Nginx處理靜態資源的訪問。因為Nginx在處理靜態資源方面,比Tomcat等Web容器要強。

   缺點:這種攔截動態請求的方法,比較死板。

2.  我自己經常有一種需求,http://FansUnion.cn/news 這種不指定.html后綴的其實也是 動態請求,所以我在配置url-pattern喜歡用“/”,即攔截所有的請求。URL是可以靈活配置了,問題又來了,靜態資源不再由Tomcat處理,所以必須在SpringMVC中再次配置,
<mvc:resources mapping="/static/**" location="/static/" />
  讓SpringMVC把static靜態資源也處理了。顯然,讓SpringMVC處理靜態資源的性能沒有Tomcat直接處理比較高。
理論上,請求中轉的次數越多, 性能越差。
  
  本以為萬事大吉,雖然靜態資源的性能較低,至少程序可以正常運行了,“反正是混過去了”。

   進一步的需求,如果在Spring中配置了登錄等攔截器,這個時候也會把 靜態資源給攔截進來。

<mvc:resources mapping="/static/**" location="/static/" /> 

這種URL映射,也無法逃脫攔截器的魔爪。

3.終極解決方案: 
  以我習慣用的第2種方法為基礎,進一步改進:

去掉<mvc:resources mapping="/static/**" location="/static/" />,不做靜態資源請求的映射。

在web.xml里增加如下配置:

<servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/static/*</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>

上述配置,激活Tomcat的defaultServlet來處理靜態文件。

千萬要注意,上述配置,要在 SpringMVC的攔截器DispatchServlet之前。   
參考了:http://blog.chinaunix.net/uid-20586655-id-3000946.html 第七部分
網友提問:http://www.iteye.com/problems/66915http://www.iteye.com/problems/69983

這樣 SpringMVC不再響應靜態資源,登錄攔截器也沒有問題了。

------------------------------------------------------------------------
詳細討論了上訴3種情況,我的結論是:URL配置根本不是一個簡單的問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM