SpringMVC_放行靜態資源

 

靜態資源處處都是坑!明白原理才能繞過這些坑!css

 

web.xml配置servlet中四種路徑的區別

在web.xml文件的配置中,四種路徑編寫方式優先級以下圖:html

 

 

其中b和d都能接收全部請求,僅僅是在優先級上有區別。web

d是優先級最低的,因此若是一個路徑有」人」要就不會執行到d,tomcat服務器(不管什麼服務器)有一個默認的請求處理方案:在tomcat服務器的配置文件: tomcat8\conf\web.xml中有一個默認的web配置文件,其中配置了jsp和default。spring

都配置了<load-on-startup>,因此這兩個默認請求處理會在tomcat啓動時進行加載。瀏覽器

 

 

 

 

 

從圖中能夠看出,jsp配置的url-pattern爲*.jsp和*.jspx,優先級高於/的優先級,因此當請求jsp頁面時,會由類JspServlet進行處理。tomcat

default配置爲在請求路徑匹配完其餘全部Servlet仍是沒有匹配到的狀況下,請求會被髮到default,由DefaultServlet進行處理,通常請求的靜態資源,無效路徑等等都會經過DefaultServlet進行處理。服務器

 

而在配置springmvc框架時,通常在web.xml中將DispatcherServlet映射路徑配置成/mvc

 

 

這樣配置會覆蓋掉tomcat配置的默認的default,而,DispatcherServlet沒有處理靜態資源的能力,因此會報錯或者須要在springmvc中進行關於靜態資源的配置。app

 

 

什麼是靜態資源?

css、js、圖片、html等都是靜態資源框架

放行靜態資源

不使用springmvc框架分析

不使用springmvc框架,這些靜態資源請求都會由tomcat的默認的default進行處理。

使用了springmvc框架分析

若是配置的DispatcherServlet的映射路徑不爲/時,對靜態資源的請求最終會由tomcat的默認配置來處理,因此不影響靜態資源的正常訪問。

 

若是配置的DispatcherServlet的映射路徑爲/時,會覆蓋掉tomcat的默認的default配置,因此須要在springmvc文件中進行配置,對靜態資源進行放行。

放行靜態資源的三種方式:

方式一:最簡單(推薦)

spring mvc配置文件中加入如下內容:

 

 

在springmvc文件中配置上<mvc:default-servlet-handler/>,發出靜態資源請求後,請求傳到DispatcherServlet,DispatcherServlet調用RequestMappingHandlerMapping進行映射匹配,匹配不成功,DispatcherServlet最終會將請求轉交給tomcat默認default進行處理。

方式二:更加靈活

 

 

在springmvc配置文件中配置

<mvc:resources mapping=」/css/**」 location=」/css/」/>

其中,*表明一級目錄,**表明多級目錄。

方式三:修改DispatcherServlet的映射規則

 

 

*.do的優先級高於/,不影響tomcat默認配置的default,因此DispatcherServlet處理不了的會交給tomcat默認default進行處理。

明確:在jsp或html頁面中若是有<link> <script><img>,瀏覽器都會自動發送請求。

 

其餘請求不到靜態資源的可能緣由

一.jsp或者html界面引用js文件錯誤

 

 

這是一個隱藏很深的坑,編寫script時沒有寫完整,使用360瀏覽器(谷歌內核)測試還不報錯!!

 

正確編寫方式:

 

 

 

二.在WEB-INF目錄下的靜態資源只有服務器能訪問,客戶端沒法直接訪問

衆所周知,WEB-INF是被保護的目錄,不容許客戶端進行訪問,這裏就涉及兩個概念:

請求轉發重定向

 

 

請求轉發會間接的由服務器去訪問WEB-INF,因此能夠訪問,

 

重定向請求靜態資源屬於客戶端進行請求,因此不能訪問靜態資源.

相關文章
相關標籤/搜索