100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > httpservletresponse 重定向浏览器不变的原因_JavaWeb——Servlet——请求转发与响应重定向...

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

时间:2023-04-02 16:34:16

相关推荐

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

导语:在实际的软件开发过程中,往往需要多个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】

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

代码显示结果

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。