1. 程式人生 > >完美解決SpringMVC中靜態資源無法找到(No mapping found for HTTP request with URI)問題

完美解決SpringMVC中靜態資源無法找到(No mapping found for HTTP request with URI)問題

今天遇到一個比較新奇的問題,但是也應該是使用spring MVC框架時由於疏忽經常會遇到的一個,解決後寫出來和大家分享分享。

問題描述:專案正常啟動,可以訪問頁面,但是無法找到靜態資原始檔,如css,js等檔案資源。

瀏覽器控制檯報錯資訊:


idea後臺報錯資訊:


二月 07, 2017 11:27:35 上午 org.springframework.web.servlet.PageNotFound noHandlerFound
警告: No mapping found for HTTP request with URI [/myboss-web/js/jquery-1.8.3.js] in DispatcherServlet with name 'mvc-dispatcher'
二月 07, 2017 11:27:35 上午 org.springframework.web.servlet.PageNotFound noHandlerFound
警告: No mapping found for HTTP request with URI [/myboss-web/js/fun.base.js] in DispatcherServlet with name 'mvc-dispatcher'

因為專案使用了spring security,之前我一度懷疑是不是沒有給靜態檔案設定訪問許可權,後來確認了已經設定了訪問靜態資源無需許可權認證,也檢查了mvc攔截器的配置資訊,沒發現什麼明顯異常,之後就納悶了。去網上查閱了一些資料後發現,確實是mvc攔截器在作祟。

我之前的攔截器配置資訊:

  <!--配置攔截器-->
  <servlet>
    <servlet-name>mvc-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath*:/spring/applicationContext-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

從配置上分析,如此配置會把所有的請求都會進行攔截,交給spring去處理。而spring所有請求的URL都是在controller中使用註解@RequestMapping標明,所以這樣的情況下訪問靜態資源是訪問不到的。

以下給出三種解決方案,自行選擇使用

方法1:簡單粗暴地告訴伺服器,這些資源不需要攔截!

直接在web.xml檔案中進行配置,如下:

 <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.css</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.xml</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.swf</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.zip</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.gif</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.jpg</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>

如果你嫌這樣太麻煩,太low的話,請移步下面兩種方法!

方法2:直接告訴spring,這個你就得這麼做!

在MVC配置檔案中新增資原始檔對映。

  <resources mapping="/resources/**" location="/resources/" />
  <resources mapping="/images/**" location="/images/" />
  <resources mapping="/js/**" location="/js/" />

註解:
mapping:對映    
location:本地資源路徑,注意必須是webapp根目錄下的路徑。          
兩個*,它表示對映resources/下所有的URL,包括子路徑(即接多個/)
可能有筒子看完這個後會回來說:“博主寫的啥玩意,照著寫了還是沒用,我絕對沒敲錯字!我還是複製過去的!!!”
如果真的有這樣的哥們,別告訴我,否則我怕我會忍不住會拿出我的30米大刀!
請自行更換路徑!!!
當然這個還有一個需要注意的地方:
配置的location一定要是web-app根目錄下才行,如果你將資源目錄,放置到web-app/WEB-INF下面的話,恭喜你,訪問失敗!404 NOT FOUND

方法3:全部使用預設的,也別操啥心了

<mvc:default-servlet-handler/>

比較懶得童鞋可以直接在MVC配置檔案加上這麼一句,這個確實方便,但是弊端就是他會把你發出的請求全部按照預設的處理了!
如果直接貼出這一句,我怕又有筒子會說怎麼報錯了,mvc標籤報錯了!
哥們,你要是這種錯誤都解決不了,你也先別看這博文了,先去看看什麼叫namespace吧!還來得及治療!

相關推薦

完美解決SpringMVC靜態資源無法找到No mapping found for HTTP request with URI問題

今天遇到一個比較新奇的問題,但是也應該是使用spring MVC框架時由於疏忽經常會遇到的一個,解決後寫出來和大家分享分享。 問題描述:專案正常啟動,可以訪問頁面,但是無法找到靜態資原始檔,如cs

Spring3js/css/jpg/gif等靜態資源無法找到No mapping found for HTTP request with URI問題解決

最近專案中使用到Spring3,在感嘆Spring3註解配置清爽的同時竟然出現了這個不和諧的事情,實在無法忍受 問題:部署專案後程序載入或用瀏覽器訪問時出現類似的警告,2011-01-19 10:52:51,646 WARN [org.springframework.w

Spring MVC靜態資源攔截No mapping found for HTTP request with URI in DispatcherServlet with name ' '問題

程式載入或用瀏覽器訪問靜態資源時出現以下的警告: No mapping found for HTTP request with URI [/] in DispatcherServlet with name ” 問題原因:預設的訪問的URL都會被Dis

springmvc搭建環境時報No mapping found for HTTP request with URI [/exam3/welcome] in DispatcherServlet with name 'spring2'

url att comm con icon ffi handler b- ati 項目是使用spring MVC (1)在瀏覽器中訪問,後臺總報錯: Java代碼 No mapping found for HTTP request with URI [/exam

springmvc報404錯誤No mapping found for HTTP request with URI [/mavenSpringmvc/requesttest] in DispatcherServlet with name 'spring'

for 404錯誤 com web and uri pat con 題解 問題404錯誤的原因有很多種 有這種,後邊不帶url的 這種一般就是沒有進入到controller中 可以在toncat中看到信息 十一月 12, 2018 12:21:25 下午 org.

No mapping found for HTTP request with URI [....] in DispatcherServlet with name 'springMVC'

這個錯誤,為在頁面報404錯誤。 web.xml 配置如下: <servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframe

解決警告:spring mvc No mapping found for HTTP request with URI錯誤的方法

今天學習spring MVC的時候,引入了jquery。死活訪問不到,控制檯裡有個警告,然後再谷歌瀏覽器裡面發現錯誤  Failed to load resource: the server responded with a status of 404 (). Uncaught R

關於[No mapping found for HTTP request with URI]的問題解決方法

在我們將Web專案部署到伺服器時,有時會出現靜態資源找不到的問題,如在我釋出一個Spring MVC的專案時會報出這樣的錯誤“No mapping found for HTTP request with URI [/HelloWorld/login] in

No mapping found for HTTP request with URI [/webapp/] in DispatcherServlet with name 'SpringMVC'

可能有如下幾個原因: 1、是否設定了web目錄,在IDEA中,web目錄是這樣的 如果沒有設定,按照下面的方法設定: 選中要設定的模組,點選file、project structure,設定web.xml檔案和web目錄的位置 2、DispatcherServlet的url-pattern

Spring MVC 遇到No mapping found for HTTP request with URI解決方法

第一次學習SpringMVC4.0 時遇到了一個小問題“No mapping found for HTTP request with URI”困擾了一天,最後試了好多方法終於得到解決和大家分享練習環境:Eclipse Mars +MVC4+Tomcat8.0 一、遇到的問題:

SpringMVC靜態資源無法訪問

對於添加了springMVC攔截器後無法訪問靜態檔案的情況,有三種解決辦法,可參考:http://www.cnblogs.com/banning/p/6195072.html我專案中用的第一種方案,且靜態檔案全在/WEB-INF/public/,故配置如下:springmvc

完美解決K8s的Pod無法解析外網域名問題

127.0.0.1 coredns rep 保留 內容 support 拷貝 -- dns 系統:Ubuntu 18.04.02K8s版本:1.13.4 故障現象:Pod內無法ping通外網域名,訪問外網IP、K8s內部域名或者IP均正常 原因分析:K8s在創建Pod時

Spring MVC靜態資源的引用適用於spring3.04以上版本

採用<mvc:resources/>標籤即可解決靜態資源的訪問問題,為了方便配置管理,我將專案中所有的靜態資源(js、css、images、)統一放置在一個目錄下:  在你的Spring MVC配置檔案中去增加配置:     

27.Spring-Boot攔截器靜態資源的處理踩過坑以及Spring mvc configuring拓展介紹

一.springboot中對靜態資源的處理  預設情況下,springboot提供存放放置靜態資源的資料夾:  /static  /public   /resources  /META-INF/resources 對於maven專案即就是存在src/main/re

解決:com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class

今天在使用Spring Data JPA的時候,碰到了這樣一個問題: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.hibernate.

解決使用SpringMVC時,css、js、image等靜態資源無法載入的問題

問題:在使用SpringMVC框架時,配置web.xml檔案時,springDispatcherServlet的配置如下 <servlet> <servlet-name>springDispatcherServl

springmvc靜態資源無法載入

springmvc攔截所有請求,用/: <servlet>     <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servle

Spring MVC:解決靜態資源無法訪問的問題

解決靜態資源不能訪問的問題,解決方式有三種: 使用defaultServlet開啟tomcat中conf/web.xml,在這個檔案中有一個叫做DefaultServlet的配置,當系統找不到處理某次url請求該交由誰處理的時候,就會交給這個servlet處理。我們可以通過使用這個DefaultSer

記一次解決cmd執行java提示"不到或無法載入主類"的問題

今天遇到一個問題:在cmd命令列中,用javac編譯java檔案可以成功,但是用java執行卻提示“找不到或無法載入主類”。現將該問題的原因以及解決辦法記錄一下。 先理解一下系統變數path和classpath的作用。 path:可執行命令的搜尋路徑,在該路徑下搜尋可以執行的程式或批處理檔案。   命令

J2EE for SpringMVC 對映靜態資源獨Js不成功的問題解決

剛才博主遇到一個很頭大的問題,靜態資源映射了,路徑語法啥的都沒問題而css和img又能夠對映成功,能夠正常讀取,經過反覆檢查,博主發現是版本跟不上了。 看看博主的配置先: <beans xmlns="http://www.springframe