解決springmvc使用@PathVariable路徑匹配問題
一、問題
今天作畢設(shè)的時(shí)候,在搭建ssm框架的使用使用springmvc的@PathVariable時(shí)出現(xiàn)了一個(gè)路徑匹配的問題,最后花了點(diǎn)時(shí)間解決了。
代碼結(jié)構(gòu):
問題內(nèi)容:
訪問url為:
按照道理說,我應(yīng)該到j(luò)sp的index頁(yè)面去。最后的結(jié)果確實(shí)到了index頁(yè)面,可是由于該頁(yè)面引用了幾個(gè)css和js,報(bào)異常找不到。有使用過spring經(jīng)驗(yàn)的童鞋應(yīng)該知道使用如下代碼解決靜態(tài)資源的訪問。
// 方法一 <mvc:default-servlet-handler/> // 方法二 <mvc:resources location="/easyui/js/" mapping="/themes/**"/> <mvc:resources location="/easyui/themes/" mapping="/js/**"/>
可是最后還是訪問不到靜態(tài)資源。
于是我就想是因?yàn)锧PathVariable的原因嗎?于是在下面做了一個(gè)實(shí)驗(yàn)
@RequestMapping("/index") public String index() { System.out.println("index execute "); return "index"; }
實(shí)驗(yàn)的結(jié)果就是可以正確訪問。看樣子好像確實(shí)是這樣。于是我又再一次訪問上面的地址(http://localhost:8080/ksxt_v1/user/index),并且打開控制臺(tái)來查看,如下:
從上面標(biāo)識(shí)的地方可以看出問題的原因了,當(dāng)請(qǐng)求的URL為http://localhost:8080/ksxt_v1/user/index時(shí),它在請(qǐng)求靜態(tài)資源的時(shí)候也會(huì)把user帶上,我們的靜態(tài)資源肯定不是放在這個(gè)文件夾里面的了。最后的結(jié)局當(dāng)然是找不到了。
二、解決方法
上面的問題產(chǎn)生是因?yàn)槲以谝渺o態(tài)文件使用的是相對(duì)路徑。
解決方法就是將其全部修改為絕對(duì)路徑。
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/easyui/themes/default/easyui.css" rel="external nofollow" > <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/easyui/themes/icon.css" rel="external nofollow" > <script type="text/javascript" src="${pageContext.request.contextPath}/easyui/js/jquery.min.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/easyui/js/jquery.easyui.min.js"></script>
最后完美解決。當(dāng)然應(yīng)該也有其它方式解決,暫時(shí)未想到。
補(bǔ)充:SpringMVC 請(qǐng)求路徑結(jié)尾存在.使用@PathVariable訪問路徑內(nèi)容,路徑參數(shù)獲取不準(zhǔn)確的問題
SpringMVC采用Get方式請(qǐng)求資源時(shí),如果請(qǐng)求路徑的結(jié)尾中帶有小數(shù)點(diǎn)(.)時(shí),同時(shí)使用@PathVariable訪問路徑內(nèi)容時(shí),請(qǐng)求路徑中最后一個(gè)小數(shù)點(diǎn)及其后面的內(nèi)容會(huì)被Spring截?cái)鄟G棄
比如針對(duì)版本的訪問
對(duì)于請(qǐng)求路徑:
http://host:port/program/module/download/apk/3.20.10
后端RequestMapping為
@RequestMapping(value="module/download/apk/{version}",method=RequestMethod.GET) public void download(HttpSession session,HttpServletResponse response,@PathVariable("version")String version){ //解析后獲得到的版本值為:3.20 }
又比如針對(duì)文件的訪問
對(duì)于請(qǐng)求路徑:
http://host:port/program/viewFile/module/201612201231445.pdf
后端RequestMapping為
@RequestMapping(value="viewFile/{module}/{filename}",method=RequestMethod.GET) public void viewFile(HttpSession session,HttpServletResponse response,@PathVariable String module, @PathVariable String filename){ //解析后獲得到的文件名稱為201612201231445并沒有或追文件后綴 }
在確實(shí)需要使用以小數(shù)點(diǎn)的路徑進(jìn)行請(qǐng)求的話可以選擇如下兩種解決方案:
1、在路徑后加任意小數(shù)點(diǎn)結(jié)尾的字符串
http://host:port/program/module/download/apk/3.20.10.html
http://host:port/program/viewFile/module/201612201231445.pdf.jsp
2、使用Spring正則表達(dá)式(SpEL)
@RequestMapping(value="module/download/apk/{version:.+}",method=RequestMethod.GET) @RequestMapping(value="viewFile/{module}/{filename:.+}",method=RequestMethod.GET)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
Java代碼如何判斷l(xiāng)inux系統(tǒng)windows系統(tǒng)
這篇文章主要介紹了Java代碼如何判斷l(xiāng)inux系統(tǒng)windows系統(tǒng)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01spring boot tomcat jdbc pool的屬性綁定
這篇文章主要介紹了spring boot tomcat jdbc pool的屬性綁定的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下2018-01-01Java最簡(jiǎn)潔數(shù)據(jù)結(jié)構(gòu)之冒泡排序快速理解
冒泡排序是編程中數(shù)據(jù)結(jié)構(gòu)繞不過的一個(gè)基礎(chǔ)點(diǎn),有關(guān)于冒泡排序的文章也有很多,但可能會(huì)比較繚亂未能理解,本章將一子u為簡(jiǎn)潔明了的例圖帶你通關(guān)冒泡排序2021-11-11