servlet中的相對路徑和絕對路徑 及/, ./, ../的區別

./ 當前目錄
../ 父級目錄
/ 根目錄
資源尋找都是依靠路徑,資源存儲方式是按照哈希表運算的,因此路徑的計算其實就是哈希值的計算。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. 頁面中「/」表示站點路徑(在客戶端展示出來,只知道它的站點路徑,全部須要「/」後追加應用名來區分屬於站點下的哪一個應用),其餘地方的「/」表示應用路徑(在服務端的應用程序內調用,確定是相對於應用的路徑啦)

相關文章
相關標籤/搜索