谈谈javaweb中的重定向

来源:互联网 发布:youtube什么软件 编辑:程序博客网 时间:2024/06/18 18:54

1.关于重定向,首先我们得先知道什么是重定向

当你访问http://www.sun.com时,你会发现浏览器地址栏中的URL会变成http://www.oracle.com/us/sun/index.htm,这就是重定向了。

重定向是服务器通知浏览器去访问另一个地址,即再发出另一个请求。

下面用一张图来简单描述下:

2.那么我们如何去完成重定向呢?

响应码为200表示响应成功,而响应码为302表示重定向。所以完成重定向的第一步就是设置响应码为302。

因为重定向是通知浏览器再第二个请求,所以浏览器需要知道第二个请求的URL,所以完成重定向的第二步是设置Location头,指定第二个请求的URL地址

public class AServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setStatus(302); response.setHeader("Location", "http://www.baidu.com"); }}

上面代码的作用是:当访问AServlet后,会通知浏览器重定向到百度主页。客户端浏览器解析到响应码为302后,就知道服务器让它重定向,所以它会马上获取响应头Location,然发出第二个请求。

3.另外一种便捷的方法

public class AServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.sendRedirect("http://www.baidu.com");}}

response.sendRedirect()方法会设置响应头为302,以设置Location响应头。

如果要重定向的URL是在同一个服务器内,那么可以使用相对路径,例如:

public class AServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.sendRedirect("/hello/BServlet");}}

重定向的URL地址为:http://localhost:8080/hello/BServlet。

4.最后的小结

 ·重定向是两次请求;

· 重定向的URL可以是其他应用,不局限于当前应用;

· 重定向的响应头为302,并且必须要有Location响应头;

· 重定向就不要再使用response.getWriter()或response.getOutputStream()输出数据,不然可能会出现异常;





0 0
原创粉丝点击