理解JavaWeb項目中的路徑問題——相對路徑與絕對路徑

在剛開始學習javaweb,使用servlet和jsp開發web項目的過程中,一直有一個問題困擾着我:servlet 和 jsp 之間相互跳轉,跳轉的路徑應該如何書寫,才能正確的訪問到相應的servlet或jsp文件?後來,在課堂上,經過老師的講解,再加上自己的一些思考和實驗,終於對web項目中文件中路徑的訪問有了一些瞭解。

案例準備:

爲了更好的解釋web項目中的路徑問題,我準備了一個簡單的web項目,項目的結構如下圖:
在這裏插入圖片描述
上圖結構只需要關注紅框圈起來的部分,第一個紅色框圈起來的是servlet文件;而我們知道,在eclipse的動態web項目中,html 和 jsp等文件都是在WebContent這個文件夾下的,我在WebContent文件夾下創建了一個叫做VIEW文件夾,裏面放了兩個前端頁面,這就是上圖的第二個紅框;在WebContent文件夾下也直接放置兩個前端頁面,這就是上圖的第三個紅框。

訪問路徑的分類

1、相對路徑

相對路徑的概念這裏就不解釋了,直接來談一談在web項目中的相對路徑是什麼樣以及如何使用的吧。
在web項目中,若我們在訪問路徑的最前端不加上“/”,那就是使用相對路徑,如下圖所示:
在這裏插入圖片描述
上圖中是一個html頁面,它就是項目中WebContent下的login2.html。這個html中寫了一個form表單,表單的提交路徑action叫UserController,他就是項目中第一個紅框裏的UserControllerServlet,點擊提交後,表單數據將會提交到這個servlet當中。UserController前沒有加“/”,所以使用的就是相對路徑。那這個相對路徑是相對於誰呢?就是相對於當前的這個html所在的文件夾。

首先我們明確一點,在eclipse的web項目中,前端頁面(html,jsp…)的默認起始路徑就是WebContent,而java文件的起始路徑就是src。假設我們要訪問我這個項目中的login2.html,那路徑如下圖:
在這裏插入圖片描述
可以看到,訪問路徑是不需要加上WebContent的。同理,若是想要訪問servlet這種src下的Java文件,也是直接“IP地址/項目名/servlet”,不需要寫上包名。

而相對路徑相對的就是當前文件所在的路徑的前綴,也就是上圖中的http://localhost:8080/Jsp_Lab2/,也就是說,上面的form表單提交數據到UserController這個servlet,那提交路徑實際上就是將UserController這個字符串與當前路徑的前綴拼接起來,也就是成了http://localhost:8080/Jsp_Lab2/UserController,而這正是我項目中的UserControllerServlet這個servlet的路徑。通過瀏覽器頂端的url顯示可以得到驗證:
在這裏插入圖片描述
再比如,在WebContent下有一個VIEW文件夾,裏面也有一個login.html文件,它的代碼以及路徑如下所示:
在這裏插入圖片描述
在這裏插入圖片描述
因爲WebContent是初始地址,所以要訪問WebContent裏面的子文件夾裏面的文件,就需要加上子文件夾的名稱,就如上面的VIEW文件夾。而這時,若在此login.html頁面使用相對路徑,那相對的就是http://localhost:8080/Jsp_Lab2/VIEW。

可以看到,上圖的表單中,action依然爲UserController,所以表單被提交後,提交的路徑就是將UserController與相對路徑拼接,也就是http://localhost:8080/Jsp_Lab2/VIEW/UserController,數據將被髮送到這個地址。如下圖:
在這裏插入圖片描述
可以看到,瀏覽器中的路徑確實如此,並且產生了404錯誤。這是因爲在這個路徑是錯誤的,在這個路徑下並沒有這個文件的存在。因爲上圖的login.html在WebContent中的VIEW文件夾下,所以使用相對路徑,那最後的路徑中也一定有VIEW的存在。

而UserController的路徑實際上是http://localhost:8080/Jsp_Lab2/UserController。這時,我們想要訪問的servlet是在/VIEW/login.html的上一級,使用相對路徑就難以實現了,因爲路徑的前綴已經定死了。這時,我們只能使用絕對路徑來訪問。


2、絕對路徑

絕對路徑的使用方式就是在路徑的開始加上“/”,若在路徑開始處加上了一個“/”,那相對路徑前綴就會被“清零”,路徑從最初位置開始。

那麼,絕對路徑的最初位置路徑是什麼呢?就是服務器的IP地址+端口號,比如在本機訪問,那就是http://localhost:8080。也就是說使用絕對地址,那訪問所寫的路徑將會被拼接到http://localhost:8080之後。

使用之前報404的例子來演示,在UserController前加一個‘/’表示表單提交使用絕對路徑。如下圖所示:
  在這裏插入圖片描述
運行之後的路徑如圖所示:
在這裏插入圖片描述

提交表單後,跳轉到的頁面如下所示:
在這裏插入圖片描述
 可以看到,UserController確實被直接拼接到了服務器IP地址之後,也就證明了絕對路徑的起點就是服務器的IP地址。

那現在我們來解決一下相對路徑的最後一個案例:VIEW當中的頁面使用相對來講無法跳轉到位於src下的servlet中去。

因爲我們知道,src下的UserController這個servlet的訪問路徑是http://localhost:8080/Jsp_Lab2/UserController,在IP地址後還有一個項目名Jsp_Lab2,所以我們可以將form表單的action改成下圖中的樣子:
  在這裏插入圖片描述
首先以“/”開頭,表示相對路徑,再加上項目名,再加上servlet的 url 映射,最後就拼接成了完整的url。運行結果如下:
在這裏插入圖片描述

總結:

1、絕對路徑就是在路徑開頭加“/”,那路徑的起始就是服務器IP地址;

2、而相對路徑就是開頭不加“/”,而起始就是發起跳轉的文件的所在路徑;

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