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