過濾靜態資源


回顧一下web.xml中配置DiepatcherServlet

<!-- 配置DispatcherServlet -->                                                        
<servlet>                                                                           
    <servlet-name>mvc</servlet-name>                                                
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>                                            
</servlet>                                                                          
<servlet-mapping>                                                                   
    <servlet-name>mvc</servlet-name>                                                
    <!-- 所有資源都要經Dispatcher處理 -->                                                    
    <url-pattern>/</url-pattern>                                                    
</servlet-mapping>                                                                  

配置好后,新建mvc-servlet.xml,在該xml文件中啟動mvc注解,啟動包的掃描,配置視圖解析器等操作,即可實現SpringMVC注解方式的使用。

但這里會出現一個問題,注意配置DispatcherServlet時url-pattern中的路徑為/,表示所有的請求都要經DispatcherServlet截獲,並且經處理器處理后在Controller中執行路徑對應的方法;但是諸如媒體資源、JS文件、CSS文件等也帶有路徑的資源也會被當做請求路徑處理,然而我們並沒有在Controller中設置路徑。

比如我們在JSP中想顯示一幅圖片:

<img alt="加載失敗" src="images/1.jpg">

如果配置了上面的DispatcherServlet,這時就會報警告信息:

警告: No mapping found for HTTP request with URI [/web02/images/1.jpg] in DispatcherServlet with name 'mvc'

 因此我們需要將媒體資源、js文件、css文件等靜態資源過濾掉。下面介紹幾種方法:

(一)在mvc-servlet.xml文件中添加

<!-- 過濾靜態資源 -->                                              
<mvc:default-servlet-handler/>

即可過濾掉靜態資源,該標簽有個默認參數default-servlet-name="default",該參數指定了一個名為default的servlet,該servlet在tomcat發布位置的conf目錄的web.xml(該xml文件作用於所有的web項目,類似於Java中的全局變量。所以在單個項目的xml文件中也可以引用該default servlet)文件中找到,這里引述該servlet的注釋:

  <!-- The default servlet for all web applications, that serves static     -->
  <!-- resources.  It processes all requests that are not mapped to other   -->
  <!-- servlets with servlet mappings (defined either here or in your own   -->
  <!-- web.xml file).                                                       -->

可見default servlet就是用來過濾靜態資源的。

(二)在web.xml中添加

<!-- 過濾靜態資源 -->                         
<servlet-mapping>                       
    <servlet-name>default</servlet-name>
    <url-pattern>*.jpg</url-pattern>    
</servlet-mapping>                      

這里的uer-pattern可設置多個,每個對應一個格式的靜態資源。

(三)在mvc-servlet.xml文件中添加:

<!-- 過濾靜態資源 -->                                                       

<mvc:resources location="/WEB-INF/images/" mapping="/images/**"/>     
<mvc:resources location="/WEB-INF/js/" mapping="/js/**"/>             

當發現標簽中有/images/為前綴的路徑,解析器就將/images/替換為/WEB-INF/images/尋找資源。但瀏覽器中的資源路徑還是mapping中的路徑。


免責聲明!

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



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