解決springmvc使用@PathVariable路徑匹配問題
一、問題
今天作畢設(shè)的時候,在搭建ssm框架的使用使用springmvc的@PathVariable時出現(xiàn)了一個路徑匹配的問題,最后花了點時間解決了。
代碼結(jié)構(gòu):

問題內(nèi)容:

訪問url為:

按照道理說,我應(yīng)該到j(luò)sp的index頁面去。最后的結(jié)果確實到了index頁面,可是由于該頁面引用了幾個css和js,報異常找不到。有使用過spring經(jīng)驗的童鞋應(yīng)該知道使用如下代碼解決靜態(tài)資源的訪問。
// 方法一 <mvc:default-servlet-handler/> // 方法二 <mvc:resources location="/easyui/js/" mapping="/themes/**"/> <mvc:resources location="/easyui/themes/" mapping="/js/**"/>
可是最后還是訪問不到靜態(tài)資源。
于是我就想是因為@PathVariable的原因嗎?于是在下面做了一個實驗
@RequestMapping("/index")
public String index() {
System.out.println("index execute ");
return "index";
}
實驗的結(jié)果就是可以正確訪問??礃幼雍孟翊_實是這樣。于是我又再一次訪問上面的地址(http://localhost:8080/ksxt_v1/user/index),并且打開控制臺來查看,如下:

從上面標識的地方可以看出問題的原因了,當請求的URL為http://localhost:8080/ksxt_v1/user/index時,它在請求靜態(tài)資源的時候也會把user帶上,我們的靜態(tài)資源肯定不是放在這個文件夾里面的了。最后的結(jié)局當然是找不到了。
二、解決方法
上面的問題產(chǎn)生是因為我在引用靜態(tài)文件使用的是相對路徑。

解決方法就是將其全部修改為絕對路徑。
<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>
最后完美解決。當然應(yīng)該也有其它方式解決,暫時未想到。
補充:SpringMVC 請求路徑結(jié)尾存在.使用@PathVariable訪問路徑內(nèi)容,路徑參數(shù)獲取不準確的問題
SpringMVC采用Get方式請求資源時,如果請求路徑的結(jié)尾中帶有小數(shù)點(.)時,同時使用@PathVariable訪問路徑內(nèi)容時,請求路徑中最后一個小數(shù)點及其后面的內(nèi)容會被Spring截斷丟棄
比如針對版本的訪問
對于請求路徑:
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
}
又比如針對文件的訪問
對于請求路徑:
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ù)點的路徑進行請求的話可以選擇如下兩種解決方案:
1、在路徑后加任意小數(shù)點結(jié)尾的字符串
http://host:port/program/module/download/apk/3.20.10.html
http://host:port/program/viewFile/module/201612201231445.pdf.jsp
2、使用Spring正則表達式(SpEL)
@RequestMapping(value="module/download/apk/{version:.+}",method=RequestMethod.GET)
@RequestMapping(value="viewFile/{module}/{filename:.+}",method=RequestMethod.GET)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
Java代碼如何判斷l(xiāng)inux系統(tǒng)windows系統(tǒng)
這篇文章主要介紹了Java代碼如何判斷l(xiāng)inux系統(tǒng)windows系統(tǒng)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01
spring boot tomcat jdbc pool的屬性綁定
這篇文章主要介紹了spring boot tomcat jdbc pool的屬性綁定的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友參考下2018-01-01
Java最簡潔數(shù)據(jù)結(jié)構(gòu)之冒泡排序快速理解
冒泡排序是編程中數(shù)據(jù)結(jié)構(gòu)繞不過的一個基礎(chǔ)點,有關(guān)于冒泡排序的文章也有很多,但可能會比較繚亂未能理解,本章將一子u為簡潔明了的例圖帶你通關(guān)冒泡排序2021-11-11

