Jsp之Servlet中forward和sendRedirect区别【经典面试问题】

这两者的区别是经典面试问题,我们在servlet或JSP编程中也经常用到,接下来看下他们的接口定义所属类。

  • sendRedirect(String url),定义在HttpServletResponse)

    该方法用于将客户端请求重定向到其他位置进一步处理,新位置可以在其他服务器或不同上下文,并且该请求是在结束本次请求后,由浏览器重新发起的一次请求,因此也称为客户端重定向。
    这样说可能更直白,调用该方法后如何告知浏览器进行重定向呢?在本次请求的response中头部写入location,看到此明白了吧

  • forward(ServletRequest request, ServletResponse response),定义在RequestDispatcher中

    该方法用于在同一服务器中跳转,处于同一个上下文环境中,另一个资源可以是jsp、servlet或其他的文件,是脱离前端干预的,仍处于本次请求过程中,因此也叫做服务器端重定向。

详细区别在此处

forward()
SendRediret()
当我们使用转发方法时,请求将传输到同一服务器内的其他资源以进行进一步处理。
在sendRedirect的情况下,请求将传输到另一个资源到另一个域或另一个服务器以进行进一步处理。
 
如果使用正向Web容器,则内部处理所有进程,并且不涉及客户端或浏览器。
 
当您使用SendRedirect容器时,会将请求传输到客户端或浏览器,因此sendRedirect方法内给出的url 作为对客户端的新请求可见。
 
当在requestdispather对象上调用forward时,我们传递请求和响应对象,因此我们的旧请求对象存在于将处理我们请求的新资源上
 
如果使用SendRedirect调用,则旧的请求和响应对象将丢失,因为浏览器将其视为新请求。
视觉上我们看不到转发的地址,它是透明的
在地址栏中,我们可以看到新的重定向地址,它不是透明的。
 
使用forward()方法比发送重定向要快。
SendRedirect较慢,因为需要一个额外的往返行程,因为完全创建了新请求,并且丢失了旧的请求对象。需要两个浏览器请求。
 
当我们使用正向重定向并且希望在新资源中使用相同的数据时,可以使用request.setAttribute(),因为我们有可用的请求对象。
但是在sendRedirect中,如果要使用它,则必须将数据存储在会话中或与URL一起传递。

附录:

12大经典面试问题

forward和redirect区别

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值