导语:在实际的软件开发过程中,往往需要多个Servlet来实现不同的功能,就需要对多个Servlet进行组合调用。多个Servlet之间如何进行通信和跳转?而这就需要用到请求转发与响应重定向技术。

原理

多个Servlet或者说JSP之间跳转有两种方式

注:JSP本质上就是Servlet

①:请求转发:

request.getRequestDispatcher(String).forward(request,response)

②:响应重定向

response.sendDirect(ContextPath)

这两种方式表象上的不同体现在访问地址栏中是否产生了变化:请求转发方式地址栏中的路径不会发生改变,响应重定向方式地址栏中的路径会发生改变。例如现在有ServletA,ServletB这两个Servlet要建立通信当我们在ServletA中采用请求转发的方式将业务转发给ServletB,这时访问ServletA,页面呈现的内容是ServletB中编写的业务,说明ServletA将业务转发给ServletB成功了,此时地址栏中的路径还是ServletA的虚拟目录,但如果采用响应重定向的方式将业务转发给ServletB这时访问ServletA,页面呈现的内容也还是ServletB中编写的,但是地址栏中的路径就变成了ServletB的虚拟目录。

出现这样的差别的原因在于:请求转发只会产生一次请求,它只是在服务器的内部将第一个Servlet的请求转发给了另一个Servlet去处理;响应重定向会产生两次请求,一个Servlet将请求第一次处理完了之后,由浏览器再发一个新的请求让另一个Servlet去处理。所以采用响应重定向时,地址栏会发生变化。

当使用request.setAttribute(String,Object)方法在ServletA中自定义属性时,通过请求转发的技术在ServletB中通过request.getAttribute(String)方法能够获取到对应的属性值,这是因为是同一个请求携带的数据,但是如果采用的是响应重定向技术,就获取不到属性值,这一点就证实了响应重定向技术其实是两次不同的请求,所以ServletB中获取不到ServletA中定义的属性值。

【案例1】

需求:体验请求转发技术

代码显示结果

关于路径的一点小提醒:采用请求转发技术时,如果是两个Servlet之间的转发ServletA将业务转给ServletB这时在request.getRequestDispatcher(String path)括号中的路径就为"/转发目的地的Servlet的虚拟目录",如上例中的“/JumpPage”。如果是转发到JSP页面括号中的路径就为"/文件名.jsp"。

【案例2】

需求:体验响应重定向技术

代码显示结果

httpservletresponse 重定向浏览器不变的原因_JavaWeb——Servlet——请求转发与响应重定向...相关推荐

  1. 解决servlet请求转发、响应重定向无法实现页面跳转问题

    问题:login.html能正常运行,但当用户名和密码正确后,点击登录按钮,通过html页面的action属性值和servlet页面的urlPatterns属性值,实现servlet请求转发,无法实现 ...

  2. 请求转发跟响应重定向的具体应用

    1.请求转发与响应重定向的概念 ·转发 是服务器端的行为 发送了一次请求 网址不会发生变化 请求的数据不会丢失 一般情况下在进行查询操作时使用转发 方法:request.getRequestDispa ...

  3. Servlet之请求转发和响应重定向

    多个servlet之间的跳转有两种方式: 请求转发:request.getRequestDispatcher("转发路径").forward(request, response); ...

  4. Servlet 请求转发(forword)与重定向(sendredirect)的区别

    servlet请求转发与重定向的区别: request.setAttribute("test","hello"); request.getRequestDisp ...

  5. 请求 转发(forword)和重定向(redirect)

    请求 转发forword和重定向redirect 两者含义 两者区别 总结 两者含义 forword转发: 服务器请求资源,直接访问目标地址的url,把那个url响应内容读取过来,然后把这些内容发给浏 ...

  6. httpservletresponse 重定向浏览器不变的原因_正确区分火狐浏览器(Firefox)中国版和国际版amp;下载方法...

    近日由于某些个人原因, 不得不从谷歌浏览器迁移到火狐浏览器, 不想再次遭遇国际版中国版之分的困扰; 研究途中, 发现一些有趣的点, 特此总结分享. 最重要的, 不必把任何软件的中国特供版都视为洪水猛兽 ...

  7. servlet中请求转发forword与重定向redirect区别

    1.请求转发(RequestDispatcher)的过程: 客户首先发送一个请求到服务器端,服务器端发现匹配的servlet,并指定它去执行,当这个servlet执行完之后,它要调用getReques ...

  8. servlet请求转发

    来源:http://www.2cto.com/kf/201610/554591.html 请求转发:Servlet(源组件)先对客户请求做一些预处理操作(数据处理),然后把请求转发给其他Web组件(目 ...

  9. Servlet请求转发中文乱码解决

    2019独角兽企业重金招聘Python工程师标准>>> 在Servlet的使用过程中,如果在请求转发的同时需要获得输出流并且写出数据的时候,需要设定resp 的编码格式,否则的话,跳 ...

最新文章

  1. 相机模型--A Theory of Catadioptric Image Formation
  2. 为何python不好找工作k-为何python不好找工作,seo行业不好转行了
  3. 在Spring启动时与mongodb一起摇摆
  4. 每日一测4(装箱与拆箱)
  5. c语言简单编程题模板,C语言编程题,比较简单
  6. js中普通函数与函数对象
  7. 【微软2014实习生及秋令营技术类职位在线測试】题目1 : String reorder
  8. 【邱锡鹏老师SMP2020教程】90页自然语言处理中的预训练模型
  9. VBS中实现99乘法表的输出
  10. 神经计算棒是什么_这是太棒了
  11. 常见信息流广告有哪些展现形式
  12. linux下xz文件如何解压,tar.xz文件如何解压
  13. excel单元格内换行的方法
  14. php降序怎写,PHP数组如何按键名实现降序排列
  15. 身为一个SEO/SEM/运营专员,一天的工作是怎样的?
  16. 集束搜索算法 beam search
  17. 移动开发技术——近场通信
  18. 《时间从来不语,却回答了所有问题》读后感
  19. oracle创建用户赋予访问某一视图的权限
  20. 最新网站证书提示风险的原因和几个解决方法

热门文章

  1. pandas 批量修改列名_十分钟想搞定pandas?
  2. simulink 28335 代码_simulink建立自己的模块库
  3. python单词的含义-Python这个单词是什么含义??????????????
  4. 30岁学python有前途吗-为什么做大数据一定要学Python?
  5. python从入门到放弃 图-python从入门到放弃(二)
  6. 语音识别技术准确率早已超过人类平均水平
  7. 语音识别模型_语音 识别_语音识别 - 云+社区 - 腾讯云
  8. 一种语音识别的自动控制系统及方法与流程
  9. python的最大优势之一是有理数吗_Python里的有理数类(精度高,可计算)
  10. 【链表】链表中倒数最后k个节点