1.什么是重定向
所谓的重定向是将请求重新定个方向转到其他位置。例如,客户端访问AServlet,然后立刻自动访问BServlet。这个过程其实就是重定向。下面通过一张图来了解重定向,如图1-1所示:
由图1-1可知,重定向共有两次请求,两次响应。当客户端接收到AServlet的响应之后立刻去请求BServlet,这个过程很迅速。可以发现,地址栏发生变化,由AServlet变成BServlet。
2.重定向案例练习
了解了重定向的原理,现在使用302状态码和Location响应头来完成重定向案例,具体步骤如下所示:
(1)创建web应用,Example02。在该应用下新建一个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响应头的值为”/Example02/TargetServlet”。其中,Example02是应用名称,以后客户端路径都需要加上应用名称,例如超链接和表单中的url都包含应用名。“/TargetServlet“是TargetServlet类的访问路径。
(2)在Example02应用下,再次新建一个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文件中配置的访问路径是“/LocationServlet“,TargetServlet在web.xml文件中配置的访问路径为”/TargetServlet“。
(4)将Example02应用发布到Tomcat服务器,然后启动Tomcat服务器,在浏览器地址栏上输入:http://localhost:8080/Example02/TargetServlet,浏览器显示结果,如图1-2所示:
(5)控制台的打印结果如图1-3所示:
3.快捷的重定向方法
上面实现重定向的方法是通过302状态码和Location响应头实现的,现在我们学习一种更加简单的方法实现重定向:调用response对象的sendRedirect(String location)方法。下面通过一个案例来学习如何使用该方法,如下所示:
(1)在Example02应用下新建一个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应用的index.jsp页面。
(2)RedirectServlet在web.xml文件中其访问路径配置为:“/RedirectServlet“。
(3)重新启动服务器,在浏览器端访问:http://localhost:8080/RedirectServlet,浏览器显示结果如图1-4所示:
response的sendRedirect(String location )方法底层也是向浏览器端发送302状态码,然后再将参数的值传递Location响应头从而实现重定向。使用这个方法比原始的要简单方便,以后的开发中我们使用就是该方法。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/253164.html