Servlet路徑跳轉問題


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);

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM