./ 當前目錄
../ 父級目錄
/ 根目錄
資源尋找都是依靠路徑,資源存儲方式是按照哈希表運算的,因此路徑的計算其實就是哈希值的計算。javascript
servlet中,全部路徑的配置都要用絕對路徑。html
什麼是絕對路徑,就是以「/」開頭的路徑(開發中就這樣理解)。前端
實際開發中,「/」所表明的含義不一樣,但主要分如下兩種狀況:java
1.servlet內部配置路徑web
servlet內部的含義就是:在客戶端看不到,全是在(應用)後臺處理的部分(簡單說,就是除了JSP之外的全部地方)。包含如下2點:瀏覽器
a. web.xml中servlet 配置的路徑tomcat
<servlet> <servlet-name>helloWorld</servlet-name> <servlet-class>com.bill99.li.servlet.HelloWorldServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>helloWorld</servlet-name> <url-pattern>/test1/helloWorld</url-pattern> </servlet-mapping>
咱們配置的這個「 /test1/helloWorld」,前面必須加「/」 ---- 該「/」表明咱們應用的名稱。好比咱們的應用名是「test」,那訪問咱們應有的地址就是: http:// 192.168.XX.XX:8080/test ,說白了就是表明項目的名稱。服務器
「 /test1/helloWorld」表明的路徑就是http:// 192.168.XX.XX:8080/test/test1/helloWorldapp
b.forward轉發的路徑(注意:不包含redirect重定向)jsp
作完後臺業務邏輯處理後,須要作頁面的跳轉,好比:
req.getRequestDispatcher("/pages/succ.jsp").forward(req, resp);
這時候跳轉的頁面"/pages/succ.jsp"也必須添加「/」,它表明的含義也同樣,是咱們應用的名稱。
總結:
在應用內部,「/」表明的就是應用的名稱!!!
2.頁面配置的路徑
頁面是指什麼 ------ 確定是指咱們的JSP頁面,而JSP頁面是服務端解析的,對咱們而言是下載到客戶端,讓瀏覽器解析爲HTML展現出來的頁面。
好比,咱們的應用url是:http:// 192.168.XX.XX:8080/test
那站點的路徑就是:http:// 192.168.XX.XX:8080/ --- 很明顯 test 是應用名
對客戶端的瀏覽器而言,它認識的只有站點,也就是說,咱們的jsp頁面,「/」表明的是站點名。
因此在「/」後須要添加上咱們應用的名稱才能正確的訪問到。(也容易理解,一個tomcat下能夠部署多個應用,就至關於一個站點多個應用,怎麼區別不一樣的應用呢,固然是不一樣應用名啦-----這個須要和上面的servlet內部配置路徑區分理解一下啊,由於servlet自己就部署在服務端,在站點內部了,內部處理確定知道它是站點下的哪一個應用內,但對於外部而言,只知道一個站點IP。)
頁面主要表現有如下3個地方:
a. form的action路徑配置
頁面舉例:
<form action=" /test /test1/helloWorld" method="post">
解析:
應用名是test,/ 表明站點的url http:// 192.168.XX.XX:8080/,因此/test表明 http:// 192.168.XX.XX:8080/test
而/test1/helloWorld表明servlet在web.xml中配置的訪問路徑,全部上面的action能夠正確的訪問。
可是在真正的應用中,咱們常常這樣寫:
<form action="${pageContext.request.contextPath}/test1/helloWorld" method="post">
${pageContext.request.contextPath} 的效果就是"/應用名" ,這裏等於 /test
同樣的效果,不解釋啦。
b. 頁面資源引用
一樣,只要是頁面中引入的東西(經常須要引入CSS,JS,圖片等),都要如此寫,好比
<script type="text/javascript" src="${pageContext.request.contextPath}/pages/event/js/addevent.js"></script>
c. jsp/servlet的重定向 redirect
首先必須理解重定向的概念:重定向其實向服務器發送了2次請求,第一次把請求url告訴給服務器,服務器看到這個請求的狀態碼,立刻明白該url是須要瀏覽器來從新去請求的url,因而呢把該url顯示在瀏覽器的地址欄內,再次向服務器請求(第二次了吧),服務器響應,而後返回。
很明顯,只要和頁面打交道的,「/」都表明站點名,須要在後面添加應用名以區分是哪一個應用的請求。全部。。。。不解釋也明白了吧!
總結:
全部涉及前端頁面的地方,「/」表明的是站點名,須要咱們在「/」加上應用名以明確應用服務!!
=========================================================
基本上能夠總結爲兩點:
a. servlet中全部訪問路徑都要用絕對路徑「/」開頭
b. 頁面中「/」表示站點路徑(在客戶端展示出來,只知道它的站點路徑,全部須要「/」後追加應用名來區分屬於站點下的哪一個應用),其餘地方的「/」表示應用路徑(在服務端的應用程序內調用,確定是相對於應用的路徑啦)