1. 程式人生 > >JavaWeb路徑相關的總結

JavaWeb路徑相關的總結

1.目錄相關名詞介紹

  • /MyWeb 這一部分我們稱它為專案的根目錄

  • /HelloServlet 這一部分是我們Servlet的對映地址

絕對路徑和相對路徑

  • 絕對路徑:使用“/ ”開頭的路徑稱為絕對路徑,絕對路徑表示從根目錄開始尋找資源。
  • 相對路徑:不使用“ / ”開頭的路徑稱為相對路徑,相對路徑表示從當前資源所在目錄開始尋找資源

2.伺服器端路徑

伺服器端路徑,主要指在Servlet中使用轉發時的路徑。
伺服器端的根目錄指的是專案的根目錄,也就是我們的專案名。
例如,我們現在訪問如下地址的Servlet:
http://localhost:8080/MyWeb/hello/HelloServlet

  • 在HelloServlet中呼叫轉發方法
    request.getRequestDispatcher(“/index.html”).forward(request,
    response); 在路徑地址處如果加了“ / ”相當於由專案根目錄開始尋找資源 也就相當於將請求轉發到如下地址:
    http://localhost:8080/MyWeb/index.html

  • request.getRequestDispatcher(“index.html”).forward(request,
    response);
    在路徑地址處如果不加“/ ”相當於由當前專案所在目錄開始尋找資源 也就相當於將請求轉發到如下地址:

    http://localhost:8080/MyWeb/hello/index.html

在實際應用中,由於我們的資源(Servlet和JSP)所在的位置有可能會發生變動,所以通常我們會使用絕對路徑。

3.客戶端路徑

客戶端路徑,主要是值在頁面中引用外部資源,以及在Servlet中做重定向操作時的路徑。
客戶端路徑的根目錄指的是我們tomcat的伺服器的根目錄,也就是專案名前面那段路徑。
**我們現在訪問如下地址的Servlet:
http://localhost:8080/MyWeb/hello/HelloServlet**

  • 在HelloServlet中呼叫重定向方法 response.sendRedirect(“/index.html”);
    在路徑地址處如果加了“ / ”相當於由專案根目錄開始尋找資源 也就相當於將請求重定向到如下地址:

    http://localhost:8080/ index.html
    但是這個地址明顯不是我們想要的,所以在重定向使用絕對路徑時必須要加入專案的名字,如下:
    response.sendRedirect(“/MyWeb/index.html”);
    如此請求將會重定向到http://localhost:8080/MyWeb/ index.html
    response.sendRedirect(“index.html”);

**例2:在MyWeb專案中有form.html頁面,目錄結構如下:
webapps/MyWeb/hello/form.html**
現在我在form.html中建立超連結訪問/hello/HelloServlet
連線格式如下:

<a href=/HelloServlet”>HelloServlet<a>

使用絕對路徑,網頁和重定向的根目錄相同,都是伺服器的根目錄
因此點選超連結後會訪問如下地址
http://localhost:8080/HelloServlet
這個地址明顯不對,所以應該從專案名開始寫起
正確如下:

<a href=/MyWeb/hello/HelloServlet”>HelloServlet</a>
<a href=”HelloServlet”>HelloServlet</a>

同樣的,在實際開發中客戶端的路徑我們也會使用絕對路徑,而不使用相對路徑。
但是,這塊有一個問題,在實際開發中我們專案名有可能會改變,比如:開發中的名字可能為DMS,而實際部署時就變成了Baidu_DMS。但是這是我們在專案中的路徑是以/DMS開頭的,那就意味著,我們要把專案中所有的頁面中、Servlet中的/DMS修改成/Baidu_DMS,如此一來工作量是十分大的,那要如何解決呢?實際上我們可以通過request物件動態的獲取專案名來解決這個問題,在JSP頁面中,request.getContextPath()可以解決這個問題。