1. 程式人生 > >Servlet 路徑 客戶端路徑 伺服器端路徑 ServletContext獲得資源路徑 Class獲得資源路徑 ClassLoader獲得資源路徑

Servlet 路徑 客戶端路徑 伺服器端路徑 ServletContext獲得資源路徑 Class獲得資源路徑 ClassLoader獲得資源路徑

(1)路徑分為三種

1.絕對路徑

2.相對路徑(分兩種)

帶“/”的相對路徑

不帶“/”的相對路徑

(2)客戶端路徑

1.超連結

絕對路徑:<a href="http://Localhost:8080/javaEE-05/servlet/AServlet">點選</a>

相對路徑(帶“/”的相對路徑):<a href="/javaEE-05/servlet/AServlet">點選</a> //相對於主機

相對路徑(不帶“/”的相對路徑):<a href="AServlet"></a>    //相對於當前檔案的位置

2.表單

絕對路徑:<form action="http://Localhost:8080/javaEE-05/servlet/AServlet

">

                           <input type="submit" value="">

                 </form>

相對路徑(帶“/”的相對路徑):<form action="/javaEE-05/servlet/AServlet"> //相對於主機

                                                                <input type="submit" value="">

                                                    </form>

相對路徑(不帶“/”的相對路徑):<form action="AServlet">    //相對於當前檔案的位置

                                                                    <input type="submit" value="">

                                                        </form>

3.重定向

相對路徑(帶“/”的相對路徑):response.sendRedirect("/javaEE-05/servlet/AServlet");  //相對於主機 路徑帶專案名稱

相對路徑(不帶“/”的相對路徑):response.sendRedirect("AServlet"); //相對於當前路徑

總結:客戶端路徑 

客戶端路徑 帶“/”的相對路徑:相對於主機

客戶端路徑 不帶“/”的相對路徑:相對於當前路徑(當前檔案位置)

(2.1)建議使用“/”

在Servlet中的重定向建議使用“/”開頭,路徑相對以主機 要給出應用名稱

例如:response.sendRedirect("/javaEE-05/servlet/AServlet");

其中/javaEE-05是當前應用名,如果將來修改了應用名稱,那麼也要修改所有重定向的路徑,這一問題的處理方案是使用request.getContextPath()來獲取應用名稱。

response.sendRedirect(request.getContextPath+"/servlet/AServlet");

 (3)服務端路徑

服務端路徑必須是相對路徑,不能是絕對路徑

帶“/”的相對路徑

不帶“/”的相對路徑

1.請求轉發

轉發相對路徑(帶"/"的相對路徑):

request.getRequestDispatcher("/servlet/AServlet").forward(request.response); //相對於web應用

轉發相對路徑(不帶"/"的相對路徑):

request.getRequestDispatcher("servlet/AServlet").forward(request.response); //相對於web應用

2.請求包含

包含相對路徑(帶"/"的相對路徑):

request.getRequestDispatcher("/servlet/AServlet").include(request.response); //相對於web應用

包含相對路徑(不帶"/"的相對路徑):

request.getRequestDispatcher("/servlet/AServlet").include(request.response); //相對於web應用

3.<url-pattern> 對映路徑

<url-pattern>必須使用“/”開頭,並且相對的是當前web應用

總結:請求轉發包含對映路徑帶不帶“/”都是相對於當前web應用

(4)ServletContext上下文物件獲取資源路徑

必須是相對路徑 

ServletContext獲取資源相對路徑(帶“/”的相對路徑):

this.getServletContext.getRealPath("/servlet/AServlet");  //相對於當前web應用

ServletContext獲取資源相對路徑(不帶“/”的相對路徑):

this.getServletContext.getRealPath("servlet/AServlet");  //相對於當前web應用

(5)Class獲取資源

必須是相對路徑

帶“/”的相對路徑:類名.class.getResourceAsStream("/a.txt"); //相對於當前類classes路徑

不帶“/”的相對路徑:類名.class.getResourceAsStream("a.txt"); //相對於classes所在路徑

(6)ClassLoader獲取資源

必須是相對路徑

帶“/”的相對路徑:類名.class.getClassLoader().getResourceAsStream("/a.txt"); //相對於當前類路徑

不帶“/”的相對路徑:類名.class.getClassLoader().getResourceAsStream("a.txt"); //相對於當前類路徑