漫谈Servlet请求重定向和请求转发

   1. 请求重定向方法是sendRedirect(),那么request请求在重定向过程中生存期是多久,有几个request请求,一个还是两个?

   2. 请求转发,getRequestDispather(),那么请求转发过程中request请求生存期是多久,有几个request请求?

重定向过程和实现

1->  request.setAttribute("demo",demo);

2->  response.sendRedirect("/2.jsp");

    客户端发送一个请求,由服务器确定要处理请求的Servlet,处理时执行到sendRedirect()方法,由于该方法是response响应对象调用的方法,所以直接给客户端发送响应,客户端会看到地址栏出现:http://localhost:8080/webItem/2.jsp。在此过程中request的属性demo到请求重定向至2.jsp时就不存在了,客户端需要在2.jsp页面重新向服务器提交请求。前面的请求和后面重新提交的请求是互不干扰、独立的两个请求,那么在前面请求(第一行)设置的属性demo(setAttribute())在后面2.jsp重新提交的请求里就获取不到。

从1.jsp经过该Servlet处理请求,重定向到2.jsp,可以看到,2.jsp页面中没有拿到demo的数据。

2.jsp页面代码:

请求转发过程和实现

request.setAttribute("demo",demo);   

request.getRequestDispatcher("/2.jsp").forward(request, response);

    Servlet的dopost方法处理客户端发送过来的请求,执行到请求转发forward()时,是将当前请求和响应对象一起转发给2.jsp页面,整个流程是在服务器端完成,并且是在同一个请求里面完成的。因此Servlet和Jsp是共享了同一个request,那么在Servlet中设置的所有数据,在JSP中都能获取,所以在2.jsp中能够获取demo的值,显示给客户端。请求转发过程是一个request和一个response。

    当请求转发给2.jsp,客户端显示获取到了数据小薇和10kg,但从下图的地址栏中看出,请求转发是在服务器端进行的,所以客户端根本不清楚到底转发了几次,当服务器Servlet把请求转发到Jsp时,客户端只看到显示的结果,却不知道结果是由Servlet产生。

延伸——Servlet向JSP传值

    前面例子传值使用的是request对象的setAttribute方法,然而这种传值方式在请求转发时有效,并且数据只能在同为一个请求时可行,所以不适用于不同的多个请求之间的传值。所以不同的多个请求之间的传值使用session更合适,session设置属性和属性值后,无论是请求重定向还是请求转发,都能在JSP中获取到属性值。

    以请求重定向为例,使用session传值:

    下图中地址浏览器中出现2.jsp的路径,显示使用了请求重定向,但文本框里出现了demo值。因此可以说使用session传值无论是重定向还是转发都可行。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 这部分主要是与Java Web和Web Service相关的面试题。 96、阐述Servlet和CGI的区别? 答...
    杂货铺老板阅读 1,543评论 0 10
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 137,128评论 19 139
  • 0 系列目录# WEB请求处理 WEB请求处理一:浏览器请求发起处理 WEB请求处理二:Nginx请求反向代理 本...
    七寸知架构阅读 14,289评论 22 189
  • Servlet:Sun公司制订的一种用来扩展Web服务器功能的组件规范。当浏览器将请求发送给Web服务器(比如:a...
    南山伐木阅读 662评论 0 4
  • 1.学习内容 JSP技术入门和常用指令 JSP的内置对象&标签介绍 EL表达式&EL的内置对象 2.JSP技术入门...
    WendyVIV阅读 2,382评论 1 18

友情链接更多精彩内容