Springmvc項(xiàng)目web.xml中servlet-mapping路徑映射配置注意說(shuō)明
今天準(zhǔn)備在IDEA編輯器下創(chuàng)建個(gè)通過(guò)maven管理的springMVC工程來(lái)測(cè)試一些功能,按照記憶中的方式以及配合百度完成了工程的創(chuàng)建,但在訪問(wèn)web.xml中配置的首頁(yè)時(shí),無(wú)論如何都無(wú)法訪問(wèn),試了很多方式,但都不是很理想,無(wú)意間仔細(xì)看了下下的映射規(guī)則,再結(jié)合自己的嘗試,算是解決了心中的疑惑,也總結(jié)下自己的心得:
其他的配置暫且略去,主要關(guān)注屬性的配置;
最初的配置
<servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping>
可以正常訪問(wèn)controller層的映射處理函數(shù),但是無(wú)法訪問(wèn)web.xml中設(shè)置的首頁(yè);
嘗試的方法
(1)因?yàn)闊o(wú)法找到首頁(yè)index.jsp
首先懷疑是路徑不對(duì),改了各種位置,甚至重建了一遍工程還是不行,最后仔細(xì)分析報(bào)錯(cuò)
如下:
org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/spring] in
DispatcherServlet with name 'dispatcher'
無(wú)法通過(guò)DispatcherServlet 找到合適的映射,因此懷疑把首頁(yè)的請(qǐng)求也當(dāng)成映射來(lái)處理了,于是改成如下的匹配模式
精確匹配路徑:
<servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/test/*</url-pattern> </servlet-mapping>
雖然首頁(yè)能正常顯示了,但是controller層的映射卻匹配不到了,訪問(wèn)路徑為:http://localhost:8080/spring/test/first
controller層的映射匹配模式如下:
@RequestMapping("/test/first")
報(bào)錯(cuò)仍是找不到映射處理函數(shù),然后嘗試了很多次,發(fā)現(xiàn)采用精確匹配模式后,在dispatcher查找映射處理函數(shù)時(shí),會(huì)把路徑中"test/“之前的部分去除,只匹配之后的路徑部分,改為如下模式即可匹配:
@RequestMapping(”/first")
(2)然后再次改變精確匹配模式
改為如下配置:
<servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
controller層的映射改為 @RequestMapping("/test/first.do"),這樣首頁(yè)和controller層都可以正常訪問(wèn)了,當(dāng)然原理與上一個(gè)方法一樣,改變DispatcherServlet匹配規(guī)則,讓首頁(yè)訪問(wèn)不再經(jīng)過(guò)DispatcherServlet匹配,那么就能訪問(wèn)到了;
(3)無(wú)意間參考了之前的一個(gè)工程配置
發(fā)現(xiàn)采用如下映射模式:
<servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
發(fā)現(xiàn)也解決了首頁(yè)和congtroller層的訪問(wèn)問(wèn)題,因此就搜了下"/“和”/*"區(qū)別:(具體原因可參照tomcat解析中的Catalina請(qǐng)求處理這一節(jié)所述)
1、<url-pattern>/ </ url-pattern > 不會(huì)匹配到*.jsp,由JspServlet(tomcat中默認(rèn)的web.xml中配置的)攔截處理,即*.jsp不會(huì)進(jìn)入spring的 DispatcherServlet類 。
2、在配置了< url-pattern > /* </ url-pattern >的情況下自然會(huì)攔截所有請(qǐng)求(包括/login,*.jsp,*.js和*.html等)
同時(shí),對(duì)于首頁(yè)的匹配邏輯如下所述,完美解釋了上述報(bào)錯(cuò)的原因:
- 如果配置了servlet的url-pattern是/*,那么訪問(wèn)localhost:8080/會(huì)匹配到該servlet上,而不會(huì)匹配welcome-file-list;
- 如果url-pattern是/(該servlet即為默認(rèn)servlet),訪問(wèn)localhost:8080/時(shí),如果其他匹配模式都沒(méi)有匹配到,則會(huì)匹配welcome-file-list(只針對(duì)這個(gè)啟動(dòng)時(shí)默認(rèn)訪問(wèn)請(qǐng)求有效)。
另外,“/”其實(shí)能攔截“.js”,“.css”,".png"等靜態(tài)資源的訪問(wèn),因此如果采用“/”的配置時(shí),需要在主配置文件中配置放行靜態(tài)資源(即DispatcherServlet對(duì)應(yīng)的配置文件),這樣才不會(huì)出現(xiàn)意想不到的匹配錯(cuò)誤404.
<mvc:resources location="/WEB-INF/js/" mapping="/js/**"/> <mvc:resources location="/WEB-INF/css/" mapping="/css/**"/> <mvc:resources location="/WEB-INF/images/" mapping="/images/**"/>
總結(jié)
如上就是我針對(duì)此次創(chuàng)建工程的問(wèn)題的總結(jié),有不妥的地方還望指出。
這些僅為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java中構(gòu)造方法和普通方法的區(qū)別說(shuō)明
這篇文章主要介紹了java中構(gòu)造方法和普通方法的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08java多線程編程之向線程傳遞數(shù)據(jù)的三種方法
在多線程的異步開(kāi)發(fā)模式下,數(shù)據(jù)的傳遞和返回和同步開(kāi)發(fā)模式有很大的區(qū)別。由于線程的運(yùn)行和結(jié)束是不可預(yù)料的,因此,在傳遞和返回?cái)?shù)據(jù)時(shí)就無(wú)法象函數(shù)一樣通過(guò)函數(shù)參數(shù)和return語(yǔ)句來(lái)返回?cái)?shù)據(jù)2014-01-01Java框架搭建之Maven、Mybatis、Spring MVC整合搭建(圖文)
這篇文章主要介紹了Java框架搭建之Maven、Mybatis、Spring MVC整合搭建(圖文),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12Spring項(xiàng)目接入DeepSeek的兩種超簡(jiǎn)單的方式分享
DeepSeek?作為一款卓越的國(guó)產(chǎn)?AI?模型,越來(lái)越多的公司考慮在自己的應(yīng)用中集成,本文為大家?分享了Spring項(xiàng)目接入DeepSeek的兩種超簡(jiǎn)單的方式,希望對(duì)大家有所幫助2025-02-02Spring?Boot?項(xiàng)目中?JPA?語(yǔ)法的基本使用方法
這篇文章主要介紹了?Spring?Boot?項(xiàng)目中?JPA?語(yǔ)法的基本使用方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-10-10IDEA運(yùn)行Java項(xiàng)目報(bào)錯(cuò)java: 錯(cuò)誤: 不支持發(fā)行版本 xx的解決方法
這篇文章主要介紹了IDEA運(yùn)行Java項(xiàng)目報(bào)錯(cuò)java: 錯(cuò)誤: 不支持發(fā)行版本 xx的解決方法,文中有詳細(xì)的解決方案供大家參考,對(duì)大家解決問(wèn)題有一定的幫助,需要的朋友可以參考下2025-04-04Java String類詳解_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Java String類詳解,本文經(jīng)多方資料的收集整理和歸納,最終撰寫成文,非常不錯(cuò),值得收藏,需要的的朋友參考下2017-04-04mybatis實(shí)現(xiàn)增刪改查_(kāi)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
本文通過(guò)實(shí)例代碼給大家介紹了mybatis實(shí)現(xiàn)增刪改查功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-09-09