HttpServletResponse中sendRedirect()和forward()方法的区别

HttpServletResponse接口的sendRedirect()方法和RequestDispatcher接口的forward()方法都可以利用另外的资源(Servlet、JSP页面或HTML文件)来为客户端进行服务,但是这两种方法有着本质上的区别。

下面分别给出sendRedirect()方法和forward()方法的工作原理图:

交互过程如下:

1) 浏览器访问Servlet1;

2) Servlet1想让Servlet2为客户端服务;

3) Servlet1调用sendRedirect()方法,将客户端的请求重定向到Servlet2;

4) 浏览器访问Servlet2;

5) Servlet2对客户端的请求做出响应。

我们可以看出,调用sendRedirect()方法,实际上是告诉浏览器Servlet2所在的位置,让浏览器重新访问Servlet2。调用sendRedirect()方法,会在响应中设置Location响应报头。要注意的是,这个过程对于用户来说是透明的,浏览器会自动完成新的访问。而浏览器地址栏显示的URL是重定向之后的URL。

而forward()方法的交互过程如下:

1) 浏览器访问Servlet1;

2) Servlet1想让Servlet2对客户端的请求进行响应,于是调用forward()方法,将请求转发给Servlet2进行处理。

3) Servlet2对请求请出响应。

从上图的交互过程可以看出,调用forward()方法,对浏览器来说是透明的,浏览器并不知道为其服务的Servlet已经换成Servlet2了,它只知道发出了一个请求,获得了一个响应。而地址栏显示的URL始终会是原始请求的URL。

此外,sendRedirect()方法和forward()方法还有一个区别,那就是sendRedirect()方法不但可以在位于同一主机上的不同Web应用程序之间进行重定向,而且可以将客户端重定向到其他服务器上的Web应用程序资源。

转载:sendRedirect和forward方法的区别 - 郑州peak - 博客园 (cnblogs.com)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Web开发,RequestDispatcher和sendRedirect都是用于请求转发的方法,但它们有着不同的功能和使用场景。 - getRequestDispatcher方法:该方法HttpServletRequest接口方法,用于获取RequestDispatcher对象,该对象可以将请求转发给另一个资源(Servlet、JSP等)。具体来说,getRequestDispatcher方法可以接收一个参数,即要转发的资源的路径,该路径可以是相对路径或绝对路径。调用forward方法可以将请求转发给指定的资源,转发后的请求和响应对象与原始请求和响应对象相同,因此可以在转发的资源访问原始请求的参数和属性。需要注意的是,转发后地址栏不变,仍然是转发前的地址。 - sendRedirect方法:该方法HttpServletResponse接口方法,用于将请求重定向到另一个资源(Servlet、JSP等)。具体来说,sendRedirect方法可以接收一个参数,即要重定向的资源的路径,该路径必须是绝对路径。调用sendRedirect方法会向客户端发送一个302状态码和一个Location响应头,告诉客户端要重定向到哪个资源。需要注意的是,重定向后地址栏会发生变化,变成重定向后的地址。 两个方法之间的区别在于,getRequestDispatcher方法是请求转发,转发后的请求和响应对象与原始请求和响应对象相同,而sendRedirect方法是请求重定向,重定向后的请求和响应对象与原始请求和响应对象不同。此外,getRequestDispatcher方法只能实现同一服务器(应用)内的转发,而sendRedirect方法可以实现不同服务器(应用)之间的重定向。最后,需要注意的是,如果getRequestDispatcher方法sendRedirect方法不是方法的最后一行代码,则应该显示return。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值