1.什么是重定向
所謂的重定向是將請(qǐng)求重新定個(gè)方向轉(zhuǎn)到其他位置。例如,客戶端訪問(wèn)AServlet,然后立刻自動(dòng)訪問(wèn)BServlet。這個(gè)過(guò)程其實(shí)就是重定向。下面通過(guò)一張圖來(lái)了解重定向,如圖1-1所示:
圖1-1 重定向
由圖1-1可知,重定向共有兩次請(qǐng)求,兩次響應(yīng)。當(dāng)客戶端接收到AServlet的響應(yīng)之后立刻去請(qǐng)求BServlet,這個(gè)過(guò)程很迅速。可以發(fā)現(xiàn),地址欄發(fā)生變化,由AServlet變成BServlet。
2.重定向案例練習(xí)
了解了重定向的原理,現(xiàn)在使用302狀態(tài)碼和Location響應(yīng)頭來(lái)完成重定向案例,具體步驟如下所示:
(1)創(chuàng)建web應(yīng)用,Example02。在該應(yīng)用下新建一個(gè)Servlet類,LocationServlet,代碼如例1-1所示:
例1-1 LocationServlet.java
public class LocationServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("LoactionServlet......");
response.setHeader("Location", "/Example02/TargetServlet");
response.setStatus(302);
}
}
例1-1中,Location響應(yīng)頭的值為”/Example02/TargetServlet”。其中,Example02是應(yīng)用名稱,以后客戶端路徑都需要加上應(yīng)用名稱,例如超鏈接和表單中的url都包含應(yīng)用名。“/TargetServlet“是TargetServlet類的訪問(wèn)路徑。
(2)在Example02應(yīng)用下,再次新建一個(gè)Servlet類,TartServlet,主要代碼如例1-2所示:
例1-2 TargetServlet.java
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//瀏覽器重定向到TargetServlet
System.out.println("TargetServlet...");
}
}
(3)LocationServlet在web.xml文件中配置的訪問(wèn)路徑是“/LocationServlet“,TargetServlet在web.xml文件中配置的訪問(wèn)路徑為”/TargetServlet“。
(4)將Example02應(yīng)用發(fā)布到Tomcat服務(wù)器,然后啟動(dòng)Tomcat服務(wù)器,在瀏覽器地址欄上輸入:http://localhost:8080/Example02/TargetServlet,瀏覽器顯示結(jié)果,如圖1-2所示:
圖1-2 瀏覽器顯示結(jié)果
(5)控制臺(tái)的打印結(jié)果如圖1-3所示:
圖1-3 控制臺(tái)打印結(jié)果
3.快捷的重定向方法
上面實(shí)現(xiàn)重定向的方法是通過(guò)302狀態(tài)碼和Location響應(yīng)頭實(shí)現(xiàn)的,現(xiàn)在我們學(xué)習(xí)一種更加簡(jiǎn)單的方法實(shí)現(xiàn)重定向:調(diào)用response對(duì)象的sendRedirect(String location)方法。下面通過(guò)一個(gè)案例來(lái)學(xué)習(xí)如何使用該方法,如下所示:
(1)在Example02應(yīng)用下新建一個(gè)Servlet類,RedirectServlet,主要代碼如例1-3所示:
例1-3 RedirectServlet.java
public class RedirectServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.sendRedirect("/Example02/index.jsp");
}
}
例1-3中,由RedirectServlet重定向到Example02應(yīng)用的index.jsp頁(yè)面。
(2)RedirectServlet在web.xml文件中其訪問(wèn)路徑配置為:“/RedirectServlet“。
(3)重新啟動(dòng)服務(wù)器,在瀏覽器端訪問(wèn):http://localhost:8080/RedirectServlet,瀏覽器顯示結(jié)果如圖1-4所示:
圖1-4 瀏覽器顯示結(jié)果
response的sendRedirect(String location )方法底層也是向?yàn)g覽器端發(fā)送302狀態(tài)碼,然后再將參數(shù)的值傳遞Location響應(yīng)頭從而實(shí)現(xiàn)重定向。使用這個(gè)方法比原始的要簡(jiǎn)單方便,以后的開(kāi)發(fā)中我們使用就是該方法。
本文版權(quán)歸傳智播客Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!
作者:傳智播客Java培訓(xùn)學(xué)院
首發(fā):http://m.metathetuscanyresort.com/javaee