關於使用"/"來 dispatcherServlet 的url-pattern帶來的問題


之前一直使用*.do來做的,但是絕的*.do很丑,於是就改用“/”來配置:

   <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

但是帶來的問題是如何訪問到靜態的文件,如jpg,js,css?

如果你的DispatcherServlet攔截"*.do"這樣的有后綴的URL,就不存在訪問不到靜態資源的問題。

如果你的DispatcherServlet攔截"/",為了實現REST風格,攔截了所有的請求,那么同時對*.js,*.jpg等靜態文件的訪問也就被攔截了。

我們要解決這個問題。

 

目的:可以正常訪問靜態文件,不可以找不到靜態文件報404。

方案一:激活Tomcat的defaultServlet來處理靜態文件

<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> 

  

要寫在DispatcherServlet的前面, 讓 defaultServlet先攔截請求,這樣請求就不會進入Spring了,我想性能是最好的吧。

 

Tomcat, Jetty, JBoss, and GlassFish 自帶的默認Servlet的名字 -- "default"
Google App Engine 
自帶的 默認Servlet的名字 -- "_ah_default"
Resin 
自帶的 默認Servlet的名字 -- "resin-file"
WebLogic
 自帶的 默認Servlet的名字  -- "FileServlet"
WebSphere  
自帶的 默認Servlet的名字 -- "SimpleFileServlet" 

 另外還有其余兩種解決方法,大家可以參看:http://blog.csdn.net/this_super/article/details/7884383


免責聲明!

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



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