Spring MVC 過濾靜態資源訪問


Markdown

過濾的必要性

一般來說,HTTP 請求都會被映射到 DispatcherServlet,進而由具體的類來承接處理,但對於類似 js 或者 css 這樣的靜態資源則沒必要這樣,因為對資源的獲取只需返回資源本身即可,無需做其他處理,那么這時就需要對一系列的資源文件做過濾處理。

首先來看 web.xml 中針對 Spring MVC 的一個必要配置,即讓 HTTP 請求映射到 DispatcherServlet:

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

配置策略

過濾配置要在 springmvc-config.xml 中進行,為了讓資源文件不經過 DispatcherServlet,參見如下配置:

<mvc:annotation-driven />
<mvc:resources mapping="/resources/css/**" location="/resources/css/project1/" />
<mvc:resources mapping="/resources/js/**"  location="/resources/js/project1/" />
<mvc:resources mapping="/*.html" location="/" />

以上代碼針對 css 和 js 分別做了配置,且看如下四點說明:

  1. 靜態資源文件實際所在物理路徑為:“/resources/css/project1/”。
  2. 在 jsp 頁面中的超鏈接路徑(href、src)對應着配置節里的 mapping。實際的路徑定義在配置節的 location 中,它可能很長,也許由於歷史原因其命名也不優雅,這時通過 mapping 就可以很優雅的重新表達,讓 jsp 頁面的代碼更簡潔明快。
<link href="<c:url value="/resources/css/input.css" />" rel="stylesheet" />
<script src="<c:url value="/resources/js/input.js" />" ></script>
  1. location 屬性的末尾必須帶上“/”,否則報錯。
  2. 只要有任何一項針對資源的映射配置(<mvc:resources />),就必須要帶上 annotation-driven,反之,則不需要它。
<mvc:annotation-driven />


免責聲明!

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



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