理解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、而相對路徑就是開頭不加“/”,而起始就是發起跳轉的文件的所在路徑;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM