Javaweb 開發相對與絕對路徑的區別

最初學習 Javaweb 的時候,常常被路徑問題所難倒,因爲自己嫌麻煩(程序猿共性)不想寫絕對路徑,所以時常將鏈接寫爲相對路徑。問題來了,當沒有涉及到請求轉發時,一切都好好的,很舒服,然而當使用到請求轉發後,我的相對路徑的鏈接似乎都失去了效果,就連 css 都失去了效果 ...... 

這另當時的我百思不得其解,於是我決定換爲重定向試試,發現一切都很正常,然而爲什麼轉發就出現了問題呢???

重新寫了很多測試代碼後,發現都出現同樣的問題,萬份苦惱之時,突然想起我似乎忽略了地址這個東西,再重新反覆測試過後終於得到了解答。

首先我們來了解一下什麼是相對路徑和絕對路徑:

在我們的鏈接中,以"/"開頭的,爲絕對路徑;沒有以"/"開頭的則爲相對路徑

對於絕對路徑的轉發和重定向這裏就不多解釋了,在我的博客(點擊打開鏈接)裏有寫到。這裏要說的是相對路徑的問題。

假定我的 Test 項目裏有這麼幾個文件 ----------- 

WebContent/a.jsp , WebContent/test/b.jsp , src/TobServlet.java (url-pattern:/ToB)

a.jsp

<a href="ToB" >ToB</a>

b.jsp

<a href="../a.jsp" >ToA</a>


TobServlet.java

protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.getRequestDispatcher("test/b.jsp").forward(request, response);
	}
1、打開 a.jsp,地址欄:http://localhost:8080/Test/a.jsp ;
2、點擊 ToB 後跳轉至 b.jsp,地址欄:http://localhost:8080/Test/ToB ; (相信這一點大家都能理解)
3、點擊 ToA 後 報錯 ,地址欄:http://localhost:8080/a.jsp ;
報錯代碼 404 ,則爲未找到頁面報錯。
看到這裏相信大家也多少明白了些,我們在 1 、2 步時並沒有發現異常,但在第三步時報錯,切地址欄並非我們預想的那樣跳轉到 
http://localhost:8080/Test/a.jsp 。直到這裏,我們很容易發現,相對路徑其實是相對於地址欄而言,而並非相對於文件所在位置。
因此,在這裏我們必須將 b.jsp 中的鏈接改爲: /Test/a.jsp (使用絕對路徑)。
總結:
當我們在使用相對路徑時,一定要考慮到是否有請求轉發到此頁面,那時的路徑是什麼,整個項目路徑是否一致。考慮到這些,是否覺得使用相對路徑居然比絕對路徑還難用呢?故建議大家在開發時,儘量使用絕對路徑,少用相對路徑。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章