全国咨询热线:400-618-4000

Java培训之重定向

更新时间:2019年03月21日18时01分 来源:传智播客Java培训学院

1.什么是重定向

所谓的重定向是将请求重新定个方向转到其他位置。例如,客户端访问AServlet,然后立刻自动访问BServlet。这个过程其实就是重定向。下面通过一张图来了解重定向,如图1-1所示:
图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所示:
图1-2 浏览器显示结果
(5)控制台的打印结果如图1-3所示:
图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所示:
图1-4 浏览器显示结果
response的sendRedirect(String location )方法底层也是向浏览器端发送302状态码,然后再将参数的值传递Location响应头从而实现重定向。使用这个方法比原始的要简单方便,以后的开发中我们使用就是该方法。

本文版权归传智播客Java培训学院所有,欢迎转载,转载请注明作者出处。谢谢!
作者:传智播客Java培训学院
首发:http://www.itcast.cn/javaee