1. 程式人生 > >Servlet中路徑跳轉(伺服器端跳轉)JSP

Servlet中路徑跳轉(伺服器端跳轉)JSP

Servlet中路徑跳轉(伺服器端跳轉)JSP

1.相對路徑

 注意這裡的相對含義,相對於誰而言

經過多次試驗總結,servlet相對路徑跳轉相對於servlet配置的xml路徑(或servlet3.0註解路徑)

如下:

//XML檔案
<servlet-mapping>
<servlet-name>RegServlet</servlet-name>
<url-pattern>/servlet/RegServlet</url-pattern>
</servlet-mapping>

專案目錄:

                     

Servlet中相對路徑

request.getRequestDispatcher("../userinfo.jsp").forward(request,response);

這裡的servlet路徑配置在/servlet/RegServlet下(即根目錄下的setvlet/目錄下),則 ../ 目錄則倒回到根目錄下,而userInfo.jsp同樣位於根目錄下

    

第二種情況servlet3.0中的註解情況

@WebServlet("/RegServlet")    //新特性 訪問地址直接配置好了

如下:

同樣的專案目錄,則在servlet中訪問則需要如下修改:

request.getRequestDispatcher("userinfo.jsp").forward(request, response); //相對路徑方式

解釋:因為系統註解的servlet配置在根目錄(‘/’意味著根目錄)下,則意味userInfo.jsp與servlet檔案位於同一目錄下,可以直接訪問


2. 絕對路徑

        絕對路徑則相對而言簡單很多,

        這裡注意一點,對照著上面的目錄圖,我們要理解到,伺服器在解析路徑時,'src','WebRoot',這些資料夾其實都忽略了,這樣說或許不準確,但便於理解,也解釋說,則兩個目錄下的檔案,都是在同一個根目錄下,

        如果訪問同一個Jsp頁面,這絕對路徑的表示方式如下:

request.getRequestDispatcher("/userinfo.jsp").forward(request, response);// ‘/’表示根目錄 絕地路徑

Servlet中路徑跳轉(請求重定向跳轉)JSP

請求重定向( response.sendRedirect () )跳轉多用下面的方式:

response.sendRedirect(request.getContextPath()+"/userinfo.jsp"); //這裡使用的是加上了上下文的絕對路徑

解釋:伺服器在解析絕對路徑時,比瀏覽器解析絕對路徑時,,多了一部分,這部分就是專案名,也就是,上下文環境

或者使用相對路徑,這裡的相對於與上面的相對是同一樣含義(servlet配置的訪問路徑,這裡配置的是/RegSevlet),則相對路徑的表示方式為:

response.sendRedirect("userinfo.jsp"); //這裡使用的是相對路徑

 

 

Servlet的路徑跳轉

一、JSP跳轉到Servlet

1、相對路徑,如href="servlet/TestServlet" 如果寫成"/servlet/TestServlet"會報錯,因為第一個“/”表示的是【伺服器根目錄】

2、絕對路徑,通過內建成員變數path實現,如href="<%=path%>/servlet/TestServlet" ,path得到的是專案根目錄,如【http://localhost:8080/ServletDemo】

其中path指的就是:

例子:

    <!--使用相對路徑訪問HelloServlet -->
    <!-- /servlet/HelloServlet 第一個/表示伺服器的根目錄 -->
    <a href="servlet/HelloServlet">訪問HelloServlet!</a><br>
    <!-- 使用絕對路徑 訪問HelloServlet,可以使用path變數:path變量表示專案的根目錄-->
    <a href="<%=path%>/servlet/HelloServlet">訪問HelloServlet!</a><br>

二、Servlet跳轉JSP

1、請求重定向:response.sendRedirect(request.getContextPath()+"/xxx.jsp");

request.getContextPath()獲得專案根目錄,或者通過"../xxx.jsp"取得上層路徑得到

2、伺服器內部轉發: request.getRequestDispatcher("../xxx.jsp").forward(req,resp);

request.getRequestDispatcher("/test.jsp").forward(request, response);  /斜線表示專案的根目錄

小結:Servlet都可以通過../xxx.jsp獲取路徑

 

三、web.xml的路徑

web.xml的<url-pattern>必須以“/”開頭,“/”表示專案的根目錄

 

JSP頁面上使用相對路徑和絕對路徑呼叫servlet web.xml的<url-pattern>必須以“/”開頭,“/”表示專案的根目錄

如果在Servlet中使用請求重定向方式跳轉到其他jsp頁面,則需要:

response.sendRedirect(request.getContextPath()+"/test.jsp");

伺服器內部跳轉路徑: 

request.getRequestDispatcher("/test.jsp").forward(request,response);//這裡的斜線表示專案的根目錄

或者

request.getRequestDispatcher("../test.jsp").forward(request,response);//“..”表示回到上層目錄也就是根目錄;

PS:如果<url-pattern>帶一層路徑 如:<url-pattern>/servlet/loginServlet</url-pattern>,則內部轉發的時會從WebRoot/servlet/路徑下找jsp頁面。

如果要轉發的頁面不在WebRoot/servlet/路徑下,則需要“..”回到上層或根目錄再定位到jsp頁面,如下:

request.getRequestDispatcher("../test.jsp").forward(request,response);

如果要轉發的頁面在WebRoot/servlet/路徑下,則如下:

request.getRequestDispatcher("/test.jsp").forward(request,response);