spring mvc與html中處理引用js等靜態文件的問題

最近開發頁面遇到一些問題,在這裏記錄一下。

通常,我們的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";
    
     
}
從上面的controller得出,我們訪問xx.html的路徑可寫爲:http://127.0.0.1:8080/(項目名)/download/develop/......

那麼這個時候相對路徑../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的一些方法了,
其實解決方法也比較簡單大笑,可以直接寫絕對路徑爲:/(項目名)/js/xx.js。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章