文档章节

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

博为峰教研组
 博为峰教研组
发布于 2016/10/27 14:03
字数 628
阅读 27
收藏 0

[面试原题]

简述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,但是这个转交动作是在服务器完成的,客户端全然不知。

© 著作权归作者所有

博为峰教研组
粉丝 50
博文 1224
码字总数 479077
作品 0
黄浦
程序员
私信 提问
java中高级大公司多线程面试题

1)在Java中Lock接口比synchronized块的优势是什么?你需要实现一个高效的缓存,它允许多个用户读,但只允许一个用户写,以此来保持它的完整性,你会怎样去实现它? lock接口在多线程和并发编...

java成功之路
2018/10/30
0
0
15个顶级Java多线程面试题及回答

Java 线程面试问题 在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分。如果你想获得任何股票投资银行的前台资讯职位,那么你应该准备很多关于多线程的问题。在投资银行业务中多...

LCZ777
2014/05/27
494
0
BATJ等大厂最全经典面试题分享

金九银十,又到了面试求职高峰期,最近有很多网友都在求大厂面试题。正好我之前电脑里面有这方面的整理,于是就发上来分享给大家。 这些题目是网友去百度、蚂蚁金服、小米、乐视、美团、58、...

老道士
2018/09/26
158
0
提给程序员和开发者的 10 道 Java 泛型面试题

关于泛型的面试题在 Java面试中变得越来越常见,因为 Java 5问世已经有相当长的时间了,越来越多的应用已经迁移到Java 5上来了,并且几乎所有新的Java开发工作也都是在Tiger(Java 5的项目代号...

lwei
2013/10/18
13.5K
30
Java 208 道面试题:Java 基础模块答案

目前市面上的面试题存在两大问题:第一,题目太旧好久没有更新了,还都停留在 2010 年之前的状态;第二,近几年 JDK 更新和发布都很快,Java 的用法也变了不少,加上 Java 技术栈也加入了很多...

王磊的博客
03/05
427
0

没有更多内容

加载失败,请刷新页面

加载更多

OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
5
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
6
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
昨天
6
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
7
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部