1. 語法:
(1). 請求的轉(zhuǎn)發(fā):
先初始化對象RequsetDispatcher,調(diào)用request的getRequestDispatcher(String path);
path為要轉(zhuǎn)發(fā)的地址奋救。
再調(diào)用RequestDispatcher對象的forward(request,response);
path要以/開頭
也可以一次性的寫為:
request.getRequestDispatcher(URL地址).forward(request, response)
例如(要將請求轉(zhuǎn)發(fā)到testServlet):
String path = "testServlet";
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/"+path);
requestDispatcher.forward(request, response);
(2). 請求的重定向
直接調(diào)用response對象的sendRedirect(String path)方法岭参,path為要請求重定向的地址
例如(要將請求重定向到testServlet):
String path = "testServlet";
response.sendRedirect(path);
2. 本質(zhì)區(qū)別:請求的轉(zhuǎn)發(fā)只發(fā)出了一次請求,而重定向則發(fā)出了兩次請求尝艘。
3. 具體:
(1). 請求的轉(zhuǎn)發(fā):地址欄是初次發(fā)出請求的地址
請求的重定向:地址欄不再是初次發(fā)出的請求地址演侯,地址欄為最后響應(yīng)的那個(gè)地址
(2). 請求的轉(zhuǎn)發(fā):在最終的Servlet中,request對象和中轉(zhuǎn)的那個(gè)request是同一個(gè)對象
請求的重定向:在最終的Servlet中背亥,request對象和中轉(zhuǎn)的那個(gè)request不是同一個(gè)對象
(3). 請求的轉(zhuǎn)發(fā):只能轉(zhuǎn)發(fā)給當(dāng)前WEB應(yīng)用的資源
請求的重定向:可以重定向到任何資源秒际。例如response.sendRedirect("http://www.baidu.com");
(4). 請求的轉(zhuǎn)發(fā):/ 代表的是當(dāng)前WEB應(yīng)用的根目錄
請求的重定向:/ 代表的是當(dāng)前WEB站點(diǎn)的根目錄(指Tomcat)
注意:
當(dāng)前WEB應(yīng)用的根目錄:例如http://localhost:8989/day_30/
站點(diǎn)的根目錄:http://localhost:8989/
4. 請求轉(zhuǎn)發(fā)的流程:
(1).客戶端發(fā)送請求,Servlet做出業(yè)務(wù)邏輯處理狡汉。
(2).Servlet調(diào)用forword()方法娄徊,服務(wù)器Servlet把目標(biāo)資源返回給客戶端瀏覽器。
5. 請求重定向的流程
(1).客戶端發(fā)送請求盾戴,Servlet做出業(yè)務(wù)邏輯處理寄锐。
(2).Servlet調(diào)用response.sendReadirect()方法,把要訪問的目標(biāo)資源作為response響應(yīng)頭信息發(fā)給客戶端瀏覽器尖啡。
(3).客戶端瀏覽器重新訪問服務(wù)器資源xxx.jsp橄仆,服務(wù)器再次對客戶端瀏覽器做出響應(yīng)。