首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Spring MVC 靜態資源(JS/CSS/圖片)無法訪問?配置 <mvc:resources> 釋放靜態請求

     編輯:Java 綜合教學

Spring MVC 靜態資源(JS/CSS/圖片)無法訪問?配置 <mvc:resources> 釋放靜態請求

Spring MVC DispatcherServlet 默認映射 / 會攔截所有請求,導致靜態資源(JS、CSS、圖片、HTML)進入控制器層報 404。Spring 3.0+ 提供 <mvc:resources> 標籤將靜態目錄映射到默認靜態資源處理器,繞過控制器。

解決方案:在 Spring MVC 配置文件添加

<mvc:resources location="/html/" mapping="/html/**"/>
<mvc:resources location="/back_css/" mapping="/back_css/**"/>
<mvc:resources location="/back_js/" mapping="/back_js/**"/>
<mvc:resources location="/back_img/" mapping="/back_img/**"/>
<mvc:resources location="/back_other/" mapping="/back_other/**"/>
<mvc:resources location="/layer/" mapping="/layer/**"/>
<mvc:resources location="/laypage/" mapping="/laypage/**"/>
  • location:靜態資源在 WAR 包中的物理路徑(相對 Web 根目錄),必須以 / 結尾。
  • mapping:對外暴露的 URL 模式,** 表示遞歸所有子路徑。

進階配置技巧

1. 多目錄合併映射

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

2. 添加緩存控制(生產環境推薦)

<mvc:resources mapping="/static/**" location="/static/" cache-period="31536000"/>
<!-- 一年緩存,配合版本號或文件指紋實現長期緩存 -->

3. ResourceResolver 鏈(Spring 4.1+)

<mvc:resources mapping="/static/**" location="/static/">
  <mvc:resource-chain resource-cache="true">
    <mvc:resolvers>
      <mvc:version-resolver>
        <mvc:content-version-strategy /> <!-- 基於內容 MD5 生成版本號 -->
      </mvc:version-resolver>
    </mvc:resolvers>
  </mvc:resource-chain>
</mvc:resources>

原理說明

<mvc:resources> 註冊 ResourceHttpRequestHandler,Spring 在 DispatcherServlet 的 HandlerMapping 鏈中優先匹配靜態資源路徑,命中則直接輸出文件流,不進入 Controller。若未配置,請求落入 DefaultAnnotationHandlerMapping 尋找 @RequestMapping,找不到拋 404。

常見誤區

  1. location 路徑寫錯(如漏掉前導 / 或結尾 /)。
  2. mapping 與 location 不對應(如 mapping /css/** 但 location /static/css/)。
  3. 靜態資源放在 WEB-INF 下(外部不可直接訪問),需放在 Web 根目錄或 src/main/webapp。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved