请求转发和请求重定向

比喻:

请求转发:A向B发送请求,想让B帮忙完成一项工作,当B接收到请求后发现自己完成不了,于是B请C帮忙,C接收到B的请求后最终完成了该项工作,并把最后的结果返回给A。此过程A只发送了一次请求给B,A只知道把请求发给B,至于B是怎么完成的A并不关心,他只等待最终的结果。

重定向:A向B发送请求,想让B帮忙完成一项工作,当B接收到请求后发现自己无法完成,就立即告诉A情况,并向A推荐C可以完成该项工作,于是A就找C帮忙,C最终完成该项工作,返回给A。

不同点:

1、浏览器地址栏显示不同(表面区别):

无论进行多少次请求,如果使用请求转发来实现,浏览器地址栏中只显示第一次发送请求的地址;

如果使用重定向来实现,浏览器地址栏显示的是每次请求的新地址。这只是表面上看到的不同地方。

2、组件之间可否共享信息不同(本质区别

从本质上讲,请求转发时,从发送第一次到最后一次请求的过程中,WEB容器只创建一次request和response对象,请求之间始终共享这两个对象,所以每个请求可以访问他之前请求中的参数和属性的值;

而重定向时,浏览器每发送一次请求,WEB容器都会重新创建新的request和response对象,所以请求之间不能共享信息,即不能在请求中访问到他之前请求中的参数和属性的值。

3、实现方式不同:

3.1 请求转发的实现步骤:

1)说明将要转发的资源;

2)获取请求转发的对象;

3) 调用请求转发对象中forward()方法

Java代码

1). String forward = "/a.jsp";

2). RequestDispatcher rd = request.getRequestDispatcher(forward);

3). rd.forward(request, reponse);

综合:request.getRequestDispatcher("/a.jsp").forward(request,response);

3.2  重定向的实现步骤:

1) 说明将要重定向的资源;

2) 调用response对象中sendRedirect方法

Java代码

1. String resource = request.geContextPath() + "/a.jsp";

2. response.sendRedirect(resource);

综合:response.sendRediect(request.geContextPath() + "/a.jsp");

4、知情人不同

请求转发的过程只有WEB服务器知道,而浏览器不知道进行了多少次转发,以及都转发给哪些组件(servlet,JSP),它只是在等待WEB服务器最终的结果。

而重定向时,每发送一次请求,WEB服务器都会通知浏览器的,所以重定向了几次请求以及每次都向哪个组件发送的请求,浏览器很清楚,当让WEB服务器也很明白。

相同点: 两者都可以进行多次请求的转发。

 

总结:什么情况下使用重定向,什么情况下请求转发,这个不是看我们的习惯,而是什么情况下必须用什么:

重定向:之前的request中存放的变量全部失效并进入一个新session的作用域;

请求转发:之前的request中存放的变量没有失效,就想把两个页面拼在一起

时间: 2024-08-08 13:49:02

请求转发和请求重定向的相关文章

请求转发 和 URL 重定向

五 请求转发 和 URL 重定向 1 请求转发和重定向 干什么用? 是我们在java后台servlet中 由一个servlet跳转到 另一个 servlet/jsp 要使用的技术 前端发送请求到后台 : A 浏览器地址栏输入链接 B a标签 <a href="url地址">跳转</a> C form表单 <form action="url地址" method="get/post"> <input type

Java Web中请求转发和请求包含

1.都是在一个请求中跨越多个Servlet 2.多个Servlet在一个请求中,他们共享request对象.就是在AServle中setAttribute()保存数据在BServlet中由getAttribute()取出数据 3.在AServlet转发到BServlet,那么整个请求都是由BServlet来完成,AServlet不再插手 4.AServlet 包含BServlet,那么两个Servlet共同完成请求 5.请求转发和请求包含都需要使用一个对象RequestDispatcher. A

请求转发与请求重定向

----请求重定向:客户端行为,response.sendRedirect(); 从本质上讲等同于两次请求,前一次的请求对象不会保存,地址栏的URL地址会改变. ----请求转发:服务器行为,request.getRequestDispatcher().forward(req,resp); 其本质是一次请求,转发后请求对象会保存在request中,地址栏URL地址不会改变.

请求转发与请求重定向的区别

1,请求重定向: 客户端行为:response.sendRedirect(),从本质上讲等同于两次请求,前一次的请求对象不会保持,地址栏的URL地址会改变. 2,请求转发: 服务器行为:request.getRequsetDispatcher().forward(requset,response);是一次请求,转发后请求对象会保存,地址栏的URL地址不会改变.(服务器内部转发,所有客户端看不到地址栏的改变) 下面举个生活中的实例来说明: 请求重定向: 就好比我们找一个A广告公司给设计名片,A明确

JavaWeb请求转发与请求重定向理解

请求转发使用方法 httpServletRequest.getRequestDispatcher("login.jsp").forward( httpServletRequest, servletresponse); 此请求过程 完全是一次request对象 完成的. 我们可以用 filter 截取用户的这次请求,然后利用这次请求 访问其它页面,当服务器返回信息给浏览器时 此次请求与response 结束. 过程类似与  request request request   respon

请求转发、请求重定向

请求转发:getRequestDispatcher request.getRequestDispatcher("success.jsp").forward(request,response); 请求重定向:sendRedirect response.sendRedirect("success.jp"); 区别: 请求转发能将参数传递给转发地址,不能转发给其他应用的地址 请求重定向不能将参数传递给转发地址,能转发给其他应用的地址

请求转发与响应重定向

转发在服务器端完成的:重定向是在客户端完成的 转发的速度快:重定向速度慢 转发的是同一次请求:重定向是两次不同请求 转发不会执行转发后的代码:重定向会执行重定向之后的代码 转发地址栏没有变化:重定向地址栏有变化 转发必须是在同一台服务器下完成:重定向可以在不同的服务器下完成 如果不理解请看下面: 请求--转发 地址不变,数据存在请求中 客户首先发送一个请求到服务器端,服务器端发现匹配的servlet,并指定它去执行,当这个servlet执行完之后,它要调用getRequestDispacther

javaWeb中request请求转发和response重定向

1.访问资源 运用forward方法只能重定向到同一个Web应用程序中的一个资源. 而sendRedirect方法可以让你重定向到任何URL. 2.request.get Forward代码中的"/uu"则代表相对与WEB应用的路径. 举例: Servlet 和 目标文件的包路径: Servlet  代码:中 doPost 和doGet代码: request 重定向url地址 或者是是相对于 本项目 (WEB13)  http:localhost:8080/WEB13+url     

请求转发和请求重定向区别

请求转发: 1.request由服务器执行,客户端只发一次请求. 2.地址栏地址不变 3.转发能够传递数据,request域 4.请求转发完成后,目的页面jsp或者html的css样式可能加载不了,原因是路劲错误(正在思考.......) 请求重定向: 1.response由客户端执行,客户端发送两次请求. 2.地址栏地址发生改变 3.不能传递数据,如果想能够传递数据,要搭配session域进行数据传递. 4.可以跳转到其他应用,包括外站. 5.请求重定向完成后,目的页面jsp或者html的cs