Spring MVC 過濾靜態資源訪問

Markdown

過濾的必要性

通常來講,HTTP 請求都會被映射到 DispatcherServlet,進而由具體的類來承接處理,但對於相似 js 或者 css 這樣的靜態資源則不必這樣,由於對資源的獲取只需返回資源自己便可,無需作其餘處理,那麼這時就須要對一系列的資源文件作過濾處理。javascript

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

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

配置策略

過濾配置要在 springmvc-config.xml 中進行,爲了讓資源文件不通過 DispatcherServlet,參見以下配置:html

<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 分別作了配置,且看以下四點說明:java

  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. 只要有任何一項針對資源的映射配置( ),就必需要帶上 annotation-driven,反之,則不須要它。
<mvc:annotation-driven />
相關文章
相關標籤/搜索