**

详解请求转发和重定向

**servlet请求转发与重定向的区别:
request.setAttribute(“test”,”hello”);
request.getRequestDispacther(“/test.jsp”).forword(request,response);
response.sendRedirect(“test.jsp”);

一、显示结果:
1、当用request.getRequestDispacther(“/test.jsp”).forword(request,response); 请求转发后,结果页面输出:hello

2、当用response.sendRedirect(“test.jsp”);重定向后,结果页面输出:null

二、底层分析:

1、请求转发(RequestDispatcher)的过程:

请求转发:
客户首先发送一个请求到服务器端,服务器端发现匹配的servlet,并指定它去执行,当这个servlet执行完之后,它要调用getRequestDispacther()方法,把请求转发给指定的test.jsp,整个流程都是在服务器端完成的,而且是在同一个请求里面完成的,因此servlet和jsp共享的是同一个request,在servlet里面放的所有东西,在jsp中都能取出来,因此,jsp能把结果getAttribute()出来,getAttribute()出来后执行完把结果返回给客户端。整个过程是一个请求,一个响应。

2、重定向(sendRedirect)的工作原理:

重定向:
客户发送一个请求到服务器,服务器匹配servlet,这都和请求转发一样,servlet处理完之后调用了sendRedirect()这个方法,这个方法是response的方法,所以,当这个servlet处理完之后,看到response.senRedirect()方法,立即向客户端返回这个响应,响应行告诉客户端你必须要再发送一个请求,去访问test.jsp,紧接着客户端受到这个请求后,立刻发出一个新的请求,去请求test.jsp,这里两个请求互不干扰,相互独立,在前面request里面setAttribute()的任何东西,在后面的request里面都获得不了。可见,在sendRedirect()里面是两个请求,两个响应。
类似以下例子:
转发:
张三(客户端) -> 【 服务窗口 A (服务端 ) -> 服务窗口B 】

重定向:
张三(客户端) -> 服务窗口 A (服务端 ) ->去找B

张三(客户端)    ->   服务窗口 B (服务端 ) ->结束

三、表面分析:

1、当用RequestDispatcher请求转发后,地址栏为http://localhost:8080/test/TestServlet
这真好应正了上面的分析,我们起初请求的就一个servlet,至于你服务器端怎么转,流程怎么样的,我客户端根本就不知道,我发了请求后我就等

着响应,那你服务器那边愿意怎么转就怎么转,我客户端不关心也没法知道,所以当服务器端转发到jsp后,它把结果返回给客户端,客户端根本就

不知道你这个结果是我真正访问的servlet产生的,还是由servlet转发后下一个组件产生的。

2、当用sendRedirect重定向后,地址栏为http://localhost:8080/test/test.jsp
因为这个时候,客户端已经知道了他第二次请求的是test.jsp,服务器已经告诉客户端要去访问test.jsp了,所以地址栏里会显示想要访问的结果。

参考链接:https://blog.csdn.net/u013738122/article/details/82557586

详解请求转发和重定向相关推荐

  1. 【JavaWeb】一文Servlet全解:继承关系、生命周期、容器和请求转发与重定向等

    文章目录 一.Servlet 概述 二.Servlet HelloWorld 三.Servlet 继承关系 四.Servlet 生命周期 五.ServletConfig 和 ServletContex ...

  2. jsp:请求转发和重定向

    HttpServletResponse对象的sendRedirect(String location)方法称作重定向, 如果location地址前面加上"/",则表示相对于Serv ...

  3. 浅析请求转发和重定向

    浅析请求转发和重定向 1.请求转发 request.getRequestDispather("/indexServlet").forword(request,response); ...

  4. 【相对/绝对路径】JavaWeb项目中,请求转发与重定向的路径写法

    相对路径.全路径 是要不以/开头,都是相对路径.相对路径是从当前资源出发,去寻找其他资源. 只要路径中以/开肉,就是全路径.全路径是从项目根目录出发,去寻找其他资源. 在开发中,写文件路径时,最好使用 ...

  5. 【Servlet】请求转发、重定向、Cookie使用之三天自动登陆

    三天自动登陆项目源码:GitHub地址-LoginSystem JDBC 手写SORM框架 手写Servlet 开发环境:Eclipse 一.请求乱码问题解决 // 设置请求.响应编码格式req.se ...

  6. 【JavaWeb】Response请求转发与重定向辨析

    请求转发与重定向对比 辨析 请求转发只有一次请求.一次响应,是在服务端内部跳转 重定向有两次请求.两次响应:将结果返回给客户端,让客户端重新发起一次跳转 请求转发的登陆界面实现 login.jsp & ...

  7. ServletRequest HttpServletRequest 请求方法 获取请求参数 请求转发 请求包含 请求转发与重定向区别 获取请求头字段...

    原文地址:ServletRequest HttpServletRequest 请求方法 获取请求参数 请求转发 请求包含 请求转发与重定向区别 获取请求头字段 ServletRequest 基本概念 ...

  8. 请求转发与重定向的区别和执行流程

    请求转发与重定向的区别和执行流程 文章目录 请求转发与重定向的区别和执行流程 1 请求转发与重定向区别 2 现实生活的例子 2.1 重定向 2.2 请求转发 3 重定向-流程图.代码.结果 3.1 流 ...

  9. 【Servlet】请求转发与重定向

    重定向 重定向是指由原请求地址重新定位到某个新地址,原有的request请求失效,客户端看到的是新的request请求返回的响应结果,客户端浏览器地址栏变为新请求地址. 一次重定向过程存在两次请求和两 ...

最新文章

  1. Nature: 拟南芥微生物组功能研究1培养组学—高通量细菌分离培养鉴定
  2. MariaDB 主从复制的配置
  3. asp.net oracle参数传递,asp.net – Oracle参数问题中的链接数据库
  4. pytorch torch.normal
  5. 亚马逊全面发力AI,推机器学习托管服务、四项新工具,还有AI硬件
  6. Android线程,线程池使用及原理博文参考
  7. 时光 php,ctphp-php教程-时光划过那刹那-PHP教程--创业的风,吹向了年轻之长藤个人博客网站...
  8. [Docker] 03 AUFS
  9. Spring Boot Actuator监控端点小结
  10. python自动生成sql建表语句
  11. 联想服务器一直在初始化系统,为什么联想“一键恢复”一直在初始化
  12. 对未来国产操作系统的期望
  13. depot_tools下载
  14. Oracle同一字段有数字和字母时进行排序
  15. 如何了解舆情传播的平台及路径?
  16. 终止被占用的端口,localhost:8000
  17. Photoshop touch教程全攻略
  18. dash 机器人 Android,用于 Dash 和 Dot 机器人的Blockly
  19. 李翰卿治疗小儿五更咳嗽经验
  20. Redis万字笔记 深入浅出redis

热门文章

  1. xmind报错java.lang.OutOfMemoryError
  2. Yii2 定制表单输入字段的标签和样式
  3. SQL Server 数据库管理员(DBA)的工作内容
  4. 跨境电亚马逊测评是骗人的吗?亚马逊测评这个行业靠谱吗?
  5. 嘘!我有特殊的绕线画技巧,教你用MATLAB绘制另一种绕线画
  6. linux操作系统论文可复制,linux操作系统课程论文
  7. 系统流畅度测试软件,三大系统运行速度对比测试
  8. Windows 搭建银河麒麟 ARM虚拟机
  9. USTC软件学院《高级软件工程》学习总结
  10. 戴尔笔记本如何查看HTML代码,戴尔笔记本win7系统如何查看电脑型号