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
- Mybatis學習筆記(5)-高階對映之多對多對映MyBatis筆記
- Ext學習筆記9-表單筆記
- SpringMVC配置靜態資源訪問SpringMVC
- Mybatis學習筆記(4)-高階對映之一對多對映MyBatis筆記
- Mybatis學習筆記(3)—高階對映之一對一對映MyBatis筆記
- Erlang學習筆記(五)記錄與對映組筆記
- SpringMVC學習筆記SpringMVC筆記
- MyBatis學習筆記(2)—對映關係篇MyBatis筆記
- Object C學習筆記9-字串NSMutableStringObject筆記字串
- Object C學習筆記10-靜態方法和靜態屬性Object筆記
- 偽靜態和重定向(apache)學習筆記Apache筆記
- PHP學習筆記——延遲靜態繫結PHP筆記
- SpringMVC下關於靜態資源訪問SpringMVC
- springmvc學習筆記(全)SpringMVC筆記
- SpringMVC學習筆記(一)SpringMVC筆記
- SpringMVC學習筆記(未完)SpringMVC筆記
- JavaEE MyBatis關聯對映之多對多(教材學習筆記)JavaMyBatis筆記
- springMVC學習筆記(一)-----springMVC原理SpringMVC筆記
- Pytest學習筆記9-失敗重跑筆記
- Tomcat學習筆記—-本地部署servlet動態資源Tomcat筆記Servlet
- php頁面靜態化技術;學習筆記PHP筆記
- SpringMVC訪問靜態資源的三種方式SpringMVC
- Solidity語言學習筆記————17、原始檔對映Solid筆記
- 八、SpringMVC--SpringMVC 表單標籤 和處理靜態資源SpringMVC
- SpringMVC 學習筆記(四) 處理模型資料SpringMVC筆記模型
- Solidity語言學習筆記————16、對映MappingSolid筆記APP
- 《從零開始學Swift》學習筆記(Day 36)——靜態方法Swift筆記
- Nginx學習之從零搭建靜態資源網站Nginx網站
- SpringMVC 學習筆記(一) Hello WorldSpringMVC筆記
- SpringMVC--請求資料對映SpringMVC
- java學習筆記(二)springMVC +mybatis 取資料流程Java筆記SpringMVCMyBatis
- 共享記憶體對映(linux程式與執行緒學習筆記)記憶體Linux執行緒筆記
- SpringMVC學習(三)對映請求引數&請求引數SpringMVC
- JavaWeb專案目錄+SpringMVC靜態資源+Tomcat測試htmlJavaWebSpringMVCTomcatHTML
- SpringMVC複習筆記SpringMVC筆記
- service worker 對靜態資源進行快取快取