最近開發頁面遇到一些問題,在這裏記錄一下。
通常,我們的html頁面或jsp頁面難免需要引入一些圖片、js、css等文件,於是需要填寫對應的文件路徑,有相對路徑和絕對路徑兩種寫法,寫相對路徑時,如果通過controller後再返回對應的html或jsp頁面時,相對路徑可能會不是我們想要的,例如,在服務器端,如果某js文件路徑爲:/js/xx.js,html文件爲/html/xx.html,並在在html中寫入一下相對路徑引用代碼<script src="../js/jquery.min.js"></script>,會有兩種結果發生,這裏假設filter不攔截訪問,並且配置了,如果我們直接訪問路徑爲:http://127.0.0.1:8080/(項目名)/html/xx.html,結果很一切正常,但是當我們通過controller映射返回對應的html頁面時,可能就會出錯了。
例如我們的controller映射如下:
1
2
3
4
5
6
7
8
9
10
|
@Controller @RequestMapping ( "/download" ) public
class
DownloadController { @RequestMapping (value= "/develop/*" ,method=RequestMethod.GET,produces={ "text/html" }) public
String developPage() { return
"xx" ;
}
} |
那麼這個時候相對路徑../js/xx.js在瀏覽器端解析後將爲:http://127.0.0.1:8080/(項目名)/download/js/xx.js,於是悲催的事情就發生了,對應的js文件將得不到正常的引用,原因很簡單,路徑不對了,自然找不到,網上查找到的資料解釋爲:導入的js是相對當前請求的路徑的,而不是相對於你在服務器文件的放置目錄的。因此,正好印證了網上的解釋,../js/xx.js被瀏覽器端解析後地址就是http://127.0.0.1:8080/(項目名)/download/js/xx.js。
那麼怎麼解決這個由controller引起的相對路徑問題呢?
如果不經過controller映射,那麼這個問題無需擔心,大膽的寫相對路徑就是了,因爲你的請求地址的目錄結構和服務器的一致,如果要經過controller映射,方法如下:
假設是jsp頁面,可以使用如下代碼獲取絕對路徑地址:
1
2
3
4
5
|
<% <span><span>
String path = request.getContextPath();</span></span><span> String basePath = request.getScheme() + <span
class = "string" > "://" </span><span> + request.getServerName() + </span><span
class = "string" > ":" </span><span>
</span></span><span>+ request.getServerPort() + path + <span class = "string" > "/" </span><span>;
</span></span> %> <script
type= "text/javascript"
src= "<%=basepath%>/js/xx.js" ></script> |
1
|
如果是html代碼,這也是我遇到的問題,由於接觸web開發時間不太長,就悲催在這裏了,因爲我所有的頁面都使用html+ajax的方式,因此就沒有機會使用jsp的一些方法了, |