SpringMVC學習筆記9-靜態資源對映
九、 靜態資源對映
當在 DispatcherServlet 的中配置攔截 “/” 時,除了*.jsp 不會攔截以外,其 他所有的請求都會經過前端控制器進行匹配,此時靜態資源,例如 .css、.js、*.jpg…… 就 會被前端控制器攔截,導致不能訪問,出現 404 問題。
訪問web目錄下untitled.png失敗。因為使用DispatcherServlet,配置urlParterrn為/只會過濾jsp,那其他的會攔截,然後找Controller去呼叫請求處理。因為沒有寫,所以報錯404.
1 通過 DefaultServlet 處理靜態資源
tomcat軟體自己帶有一個web.xml,裡面有一個DefaultServlet,如果配置了對映.css,.jpg,.png等,那麼當請求這些資源的時候會由DefaultServlet處理,直接放行!
tomcat自有的web.xml
修改專案的web.xml
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.png</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
重新啟動tomcat,訪問web目錄下的untitled.png圖片,訪問成功!
這樣做可以訪問到web直接子節點,這些靜態檔案。嘗試訪問web子目錄的WEB-INF/下的靜態檔案,會經過預設的Servlet放行,但是因為WEB-INF目錄訪問受限,仍會報錯404
2 通過 SpringMVC 的靜態資源對映器處理靜態資源
在 spring3.0.4 以後的 SpringMVC 模組提供了靜態資源對映器元件。通過 mvc:resources 標籤配置靜態資源對映器 。請求會先到DispatcherServlet,發現url是靜態資源配置了的路徑,會直接去位置中找訪問的資源。
修改 SpringMVC 配置檔案
<mvc:resources mapping="/image/**" location="/WEB-INF/image/"/>
訪問結果
可以訪問到任意目錄下的靜態檔案。使用的是springmvc不是tomcat的。
3 通過<mvc:default-servlet-handler />處理靜態資源
在 SpringMVC 的配置檔案中配置<mvc:default-servlet-handler />後,會在 Spring MVC 上 下文中定義一個 org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler, 它會像一個檢查員,對進入 DispatcherServlet 的 URL 進行篩查,如果發現是靜態資源的請求,就將該請求轉由 Web 應用伺服器預設的 Servlet 處理,如果不是靜態資源的請求,才由 DispatcherServlet 繼續處理。
修改 SpringMVC 配置檔案
<mvc:default-servlet-handler/>
傳送3個請求,1,2是走的預設的DefaultServlet,放行靜態資源,如果是WEB-INF目錄,則訪問受限。
3走的是springmvc的Servlet,根據url選擇控制器。返回ok頁面。
總結:
對於靜態資源的訪問有三種方式。第一種換用tomcat的DefaultServlet處理靜態資源,直接放行。所有放在web目錄下的直接靜態資源可被訪問。WEB-INF目錄下的不能訪問,會報404.
第二種配置springmvc的靜態資源對映器,mappint是配置請求的url,location是配置對映路徑。可以訪問任意目錄下的靜態資源!
第三種配置DefaultServleHtttpRequestHandler,如果是靜態資源走DeafultServlet,不是,走DispatcherServlet。那麼仍然不能訪問WEB-INF目錄下靜態資源。
所以,使用時我會選擇使用在springmvc配置檔案中配置靜態資源對映器,去訪問靜態資源。
相關文章
- 模組化開發靜態資源對映
- Nginx配置靜態代理/靜態資源對映時root與alias的區別,帶字首對映用aliasNginx
- WPF筆記4——靜態資源(StaticResource)筆記
- SpringMVC學習筆記SpringMVC筆記
- SpringMVC下關於靜態資源訪問SpringMVC
- springmvc學習筆記(全)SpringMVC筆記
- SpringMVC學習筆記(一)SpringMVC筆記
- Solidity語言學習筆記————16、對映MappingSolid筆記APP
- Pytest學習筆記9-失敗重跑筆記
- Tomcat學習筆記—-本地部署servlet動態資源Tomcat筆記Servlet
- Solidity語言學習筆記————17、原始檔對映Solid筆記
- 八、SpringMVC--SpringMVC 表單標籤 和處理靜態資源SpringMVC
- JavaEE MyBatis關聯對映之多對多(教材學習筆記)JavaMyBatis筆記
- JavaWeb專案目錄+SpringMVC靜態資源+Tomcat測試htmlJavaWebSpringMVCTomcatHTML
- 共享記憶體對映(linux程式與執行緒學習筆記)記憶體Linux執行緒筆記
- SpringMVC複習筆記SpringMVC筆記
- Nginx學習之從零搭建靜態資源網站Nginx網站
- SpringMVC學習筆記之---簡單入門SpringMVC筆記
- SSM學習筆記3——整合 SpringMVC、整合SSMSSM筆記SpringMVC
- 靜態資源管理
- 南京大學 靜態軟體分析(static program analyzes)-- introduction 學習筆記筆記
- service worker 對靜態資源進行快取快取
- SpringMVC學習筆記10-異常處理SpringMVC筆記
- Django2學習筆記--引用本地靜態檔案css,js等Django筆記CSSJS
- 十五章 CI框架學習筆記(二)載入靜態內容框架筆記
- webpack 靜態資源管理Web
- 靜態資源公共庫
- Web靜態資源加速Web
- WPF:靜態、動態資源以及資源詞典
- PHP 手冊 (類與物件) 學習筆記九:Static(靜態)關鍵字PHP物件筆記
- 動態規劃學習筆記動態規劃筆記
- React學習筆記-State(狀態)React筆記
- C# 反射/對映學習C#反射
- 複習webpack4之靜態資源打包(上)Web
- 複習webpack4之靜態資源打包(下)Web
- 胖哥學SpringMVC:RequestMapping註解之對映路徑 上卷SpringMVCAPP
- WordPress引用靜態資源方法
- 008.Nginx靜態資源Nginx