web開發中正確使用絕對路徑與相對路徑

在web開發中,經常會涉及到路徑問題。如何正確使用絕對路徑與相對路徑,是每一位web開發者必須掌握的事情。

1.相對路徑

相對路徑就是站在我自己的角度來找資源,寫法如下:

"./a.jsp"	//找同級目錄
"../a.jsp"	//找上級目錄
"./images/pic.jpg"	//找同級文件夾內的資源

2.絕對路徑

絕對路徑就是以” / “開頭 的路徑,即從根目錄出發,當然這裏的根目錄也是有坑的,詳見第4點

3.原則:儘量使用絕對路徑,不寫相對路徑

由於web開發的時候多使用頁面的轉發與跳轉,同一個資源的相對路徑也會隨着頁面的uml地址而發生變化。大約就是,如果有一個頁面,他的路徑是 /a.jsp 它引用了其同級目錄 b.jsp 的資源,此時相對路徑寫爲 ./b.jsp 。正常訪問 a.jsp 的時候,資源的確能被加載出來,但是,如果是通過其他方式(如 a.jsp 上層目錄中有一個 c.jsp ,通過轉發跳轉到 a.jsp )來訪問 a.jsp,那麼 ./b.jsp 資源就無法被加載(404 not found),原因就是瀏覽器會在 c.jsp 所在的同級目錄去找 b.jsp ,當然是找不到啦~~

4.正確使用絕對路徑

第二點提到,絕對路徑是以” / “爲開頭的,但是” / “表示的意義也不盡相同

"/" == "http://localhost:8080/"		//瀏覽器眼裏

"/" == "http://localhost:8080/myProject/"		//web應用眼裏

4.1 正所謂情人眼裏出西施,辣麼,誰是瀏覽器眼裏的”情人“呢?即,什麼時候” / “代表” http://localhost:8080/ “呢?

1.jsp裏面都是(包括但不侷限於以下兩種)
	a.超鏈接:<a href = "/a.jsp">點我點我</a>
	
	b.form表單:<form action = "/a.jsp">

2.servlet裏
	a.重定向的時候:response.sendRedirect("/a.jsp")

爲了不出錯,以上情況在路徑前面要加上:request.getContextPath(),變成如下樣子:

	a.超鏈接:<a href = "request.getContextPath()/a.jsp">點我點我</a>
	
	b.form表單:<form action = "request.getContextPath()/a.jsp">

	c.重定向的時候:response.sendRedirect("request.getContextPath()/a.jsp")

4.2 作爲web應用的”西施“,就獨得恩寵,可以直接使用。包括但不僅限於下列三種情況:

1.servlet裏的轉發:request.getRequestDispatcher("/a.jsp")

2.web.xml裏<servlet-mapping>中url映射
	<servlet-mapping>
		<servley-name>MyJSP</servley-name>
		<url-pattern>/a.jsp</url-pattern>
	</servlet-mapping>

3.自定義標籤中

5.總結

在web應用中,不要嘗試使用相對路徑,當使用絕對路徑的時候,看清使用的情況,遇到資源加載不出來的問題時,添加request.getContextPath()試試,沒準你的使用情況恰好是瀏覽器眼中的”西施“。

發佈了27 篇原創文章 · 獲贊 49 · 訪問量 2262
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章