小博老师解析经典Java面试题-redirect和forward的区别

[面试原题]

简述java中redirect和forward的区别。

[正确答案]

redirect是url重定向,让客户端重新发送一次请求到另一个url。因此整个过程客户端向服务器发送了两次请求,并且客户端浏览器地址栏中显示新的url。

forward是服务器转发,客户端只向服务器发送一次请求,而服务器在内部做了转交处理,客户端并不知情。因此客户端浏览器地址栏中显示的是前一次的url。

[面试技术点]

JavaEE中会话的概念知识。

[小博老师解读]

首先我们在项目中新建两个Servlet,BWF01Servlet映射BWF01,BWF02Servlet映射BWF02。核心代码如下:



图 1-1 BWF01Servlet映射的URL是BWF01


图 1-2 BWF02Servlet映射的URL是BWF02


现在我们通过浏览器来访问BWF01,并且希望自动跳转到BWF02。我们先使用redirect(跳转)的方式来实现,我们在BWF01Servlet最后增加一条指令:response.sendRedirect("BWF02");

浏览器访问BWF01后,看到的结果如下:




我们会看到,页面显示的内容是BWF02Servlet中的内容,浏览器地址栏中访问的也是BWF02。其实在这个过程中,客户端向浏览器发送了两次请求,第一次请求:客户端向服务器请求BWF01,BWF01Servlet执行后,response.sendRedirect("BWF02");响应给客户端,让客户端URL重定向到BWF02,此时客户端发送第二次请求到BWF02。



我们再使用forward(服务器转定向)的方式来实现,我们在BWF01Servlet中,把刚才新增的response.sendRedirect("BWF02");修改成:request.getRequestDispatcher("BWF02").forward(request, response);浏览器访问BWF01后,看到的结果如下:

我们发现,显示的结果依然是BWF02Servlet中的内容,区别在于浏览器地址栏中请求的是BWF02而不是BWF01,这是因为在这个过程中,客户端只向服务器发送了一次请求,请求的URL是BWF01,然后BWF01Servlet运行后request.getRequestDispatcher("BWF02").forward(request, response);请求对象Request通过拦截配置信息找到了BWF02这个URL Mapping对应的Servlet(BWF02Servlet),将当前请求的处理任务转交(forward)给了BWF02Servlet,并且将当前请求的Request和Response对象作为传输传给了BWF02Servlet。因此处理当前这次请求的真正Servlet是BWF02Servlet,但是这个转交动作是在服务器完成的,客户端全然不知。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值