spring MVC設置不攔截靜態資源


問題產生:

因為我們在web.xml中寫了 攔截所有請求,當然包括了靜態資源,所以頁面需要引用css或js的話,該請求也會被攔截,例如:

在style.css中寫一個簡單樣式,加個背景顏色

 

  1.   body{
  2.   background-color: antiquewhite;
  3.  }

然后在index.jsp頁面引用該樣式:<link rel="stylesheet" href="/css/style.css">

再一次運行項目,會看到並沒有樣式,F12可以看到在調用style.css的時候報了404錯誤,這是因為被DispatcherServlet攔截了

 

解決辦法:

方案一:攔截器中增加針對靜態資源不進行過濾(涉及spring-mvc.xml)
注意:需引入mvc命名空間
  1.  <!-- 添加注解驅動 -->
  2.  <mvc:annotation-driven/>
  3.  <!--
  4.  通過mvc:resources設置靜態資源,這樣servlet就會處理這些靜態資源,而不通過控制器
  5.  設置不過濾內容,比如:css,js,img 等資源文件
  6.  location指的是本地的真是路徑,mapping指的是映射到的虛擬路徑。
  7.  -->
  8.  <mvc:resources mapping= "/css/**" location="/css/"/>

方案二:使用默認的servlet處理靜態資源(涉及spring-mvc.xml,web.xml)

在spring-mvc.xml中添加:
  1.  <!--啟用默認Servlet-->
  2.  <mvc: default-servlet-handler/>
     
     

    <mvc:default-servlet-handler/> 這個,點擊打開這個可以看到如下信息:

    這里面有兩個信息非常重要:第一是default Servlet,這個值得是容器默認的Servlet,其實就是tomcat默認的Servlet;第二:路徑的轉換,我們可以看出是轉換到/的路徑;

    /的路徑指的是webapp的路徑(此處一定注意不是WEB-INF,WEB-INF路徑的訪問是受權限控制的,tomcat維護權限)。這樣配置的意思就是說所有的按照規則訪問靜態資源的請求都會匹配到對應的webapp下的路徑:

 
在web.xml中添加:
  1.  <!--增加對靜態資源的處理,當前的設置必須在Spring的Dispatcher的前面-->
  2.  <servlet-mapping>
  3.  <servlet-name> default</servlet-name>
  4.  <url-pattern>*.css</url-pattern>
  5.  <url-pattern>/css /*</url-pattern>
  6.   </servlet-mapping>

而這個標簽起作用的前提就是需要我們把靜態資源放在webapp下,而非WEB-INF下,否則還是會無效

方案三:修改spring的全局攔截設置為*.do的攔截(涉及web.xml)

  1.  <!-- 攔截所有請求 -->
  2.  <servlet-mapping>
  3.  <servlet-name>dispatcher</servlet-name>
  4.  <!--<url-pattern>/</url-pattern>-->
  5.  <url-pattern>*. do</url-pattern>
  6.  </servlet-mapping>

這時,我們瀏覽器的所有訪問路徑就要變成:http://localhost:8080/xxx/xxx.do

 
 

比較總結:                                                                                                              

第一種方案配置比較臃腫,多個攔截器時增加文件行數,不推薦使用
第二種方案使用默認的Servlet進行資源文件的訪問,Spring攔截所有請求,然后再將資源文件交由默認的Sevlet進行處理,性能上少有損耗
第三種方案Spring只是處理以'.do'結尾的訪問,性能上更加高效,但是再訪問路徑上必須都以'.do'結尾,URL不太文雅
 
綜上所述,推薦使用第二和第三中方案
 

--------------------- 本文來自 van久 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/qq_40594137/article/details/79112700?utm_source=copy 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM