java中forward和redirect_java中转发forward和重定向redirect的区别
Forward(转发)
是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。还有,转发是在web应用程序之内进行的,可以访问web应用程序所设定的内部目录,像是WEB-INF目录,只能在Web应用程序中进行,不能指定至其它的Web应用程序(即不能指定其它的服务器上的地址)的地址。
Redirect(重定向)
就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。web应用程序会要求客户端浏览器重新发出请求地址,客户端会重新连接至所指定的地址,因此浏览器的地址会出现重新导向的信息,重新导向后的请求由浏览器发出,所以不能访问Web应用
程序中的隐藏目录,如WEB-INF,但是可由浏览器重新要求一个网页, 可以指定至其他的Web应用程序地址(即可以指定到其它的服务器)。
RequestDispatcher.forward()方法和HttpServletResponse.sendRedirect()方法的区别是:
前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址,他是不会改变Request的值,如果你需要在下一个页面中能从中获取新的信息的话,你可以Request.setAttribute()来放置一些标志,这样从下一个页面中获取;
后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用 Request Dispatcher.forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用HttpServletResponse.sendRequest()方法
1、forward与include共亨Request范围内的对象,而redirect则不行,即:如果一个javabean被声明为request范围的话,则被forward到的资源也可以访问这个javabean,而redriect则不行。
2、forward与include基本上都是转发到context内部的资源,而redirect可以重定向到外部的资源,如:req.sendRedriect
综上所述,转发forward和重定向redirect的区别如下:
1.从地址栏显示来说
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.
2.从数据共享来说
forward:转发页面和转发到的页面可以共享request里面的数据.
redirect:不能共享数据.
3.从运用地方来说
forward:一般用于用户登陆的时候,根据角色转发到相应的模块.
redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.
4.从效率来说
forward:高.
redirect:低.
这是我在网上找到的资料,本来我以为我知道他们的区别,认为主要是当前的请求变量是否继续有效,但看了这个,了解了请求的作用范围,才完全明白其中的原因,希望对大家有用。
先是看上去不同,他们的调用分别如下(如下示例):
request.getRequestDispatcher("apage.jsp").forward(request, response);//转发到apage.jsp
response.sendRedirect("apage.jsp");//重定向到apage.jsp
在jsp页面中你也会看到通过下面的方式实现转发:
提到转发和重定向就不得不提到request作用域。很多初学者都知道当我们提交一个表单时,就创建了一个新的请求。实际上,当我们点击一个链接时,也创建了一个新的请求。那么一个请求的作用域到底有多大呢?例如:
在页面a.jsp中有一个链接这是指向b的一个链接,而且还带了一个参数。当我们点击这个连接的时候,就产生了一个请 求,为了明确起见,我们把它叫做requestA->B。现在,在b.jsp页面中我们就可以从这个请求中获取信息了。在b.jsp中你可以写入out.println(request.getParameter("id"))进行测试。下面更复杂一点,我们在
b.jsp页面中增加下面的语句:
request.setAttribute("name","funcreal");
out.println(request.getAttriblute("name"));//成功显示了name变量的值。
现在在b.jsp中再增加一个链接:这是指向c的一个链接,而且还带了一个参数,当我们点
击这个连接的时候,将产生一个 新的请求,这时requestA-B也就安息了,新的请求叫做requestB-C。同样的道理,在c.jsp中,我们可以访问到的变量只有age,因为id,name这两个变量都属于requestA-B,此时他已经不存在了。下面是
源代码:
a.jsp
java中forward和redirect_java中转发forward和重定向redirect的区别相关推荐
- 请求 转发(forword)和重定向(redirect)
请求 转发forword和重定向redirect 两者含义 两者区别 总结 两者含义 forword转发: 服务器请求资源,直接访问目标地址的url,把那个url响应内容读取过来,然后把这些内容发给浏 ...
- servlet中请求转发forword与重定向redirect区别
1.请求转发(RequestDispatcher)的过程: 客户首先发送一个请求到服务器端,服务器端发现匹配的servlet,并指定它去执行,当这个servlet执行完之后,它要调用getReques ...
- 请求转发和请求重定向有什么区别?
在 Java 中,跳转的实现方式有两种:请求转发和请求重定向,但二者是完全不同的,所以我们今天就来盘它. 请求转发和请求重定向主要区别,包含以下 5 点: 1.定义不同 2.跳转方不同 3.数据共享不 ...
- 转发forword和重定向redirect
转发forword 转发是浏览器发送http请求给服务器,服务器接受请求,在内部调用方法在完成请求处理和转发动作将目标资源发送给浏览器,整个过程浏览器对服务器的请求只有一次,该请求也可以转发n次,都是 ...
- Java中转发(Forward)和重定向(Redirect)的区别
从URL来说,转发的地址栏没有发生改变,而重定向则是新的URL 从数据共享来说,转发可以共享request域里面的数据,而重定向则不能. 效率来说转发效率高,重定向效率低 转发一般用来登陆后转发到对应 ...
- 转发(Forward)和重定向(Redirect)的区别
转发是服务器行为,重定向是客户端行为. 转发(Forward) 通过RequestDispatcher对象的forward(HttpServletRequest request,HttpServlet ...
- 17 重定向(Redirect) vs 转发(Forward)
一.重定向(Redirect) 1.什么是重定向 重定向是指当浏览器请求一个URL时,服务器返回一个重定向指令,告诉浏览器地址已经变了,麻烦使用新的URL再重新发送新请求. 例如,我们已经编写了一个能 ...
- java中forward和redirect_Forward和Redirect的区别
# Forward和Redirect的区别 ---------- ## 通俗比方 - 直接转发请求(Forward)就相当于:"A找B借钱,B说没有,B去找C借,借到借不到都会把消息传递给A ...
- java中forward和redirect_好程序员Java教程分享:Forward和Redirect的区别
Java教程分享:Forward和Redirect的区别,用户向服务器发送了一次HTTP请求,该请求可能会经过多个信息资源处理以后才返回给用户,各个信息资源使用请求转发机制相互转发请求,但是用户是感觉 ...
最新文章
- 宏基因组实战9. 组装assembly和分箱bin结果可视化—Anvi'o
- 想拿下互联网大厂OFFER,都需要准备什么?
- 2015国内征信机构大数据整合能力对比
- ScaleForm十六戒言
- jq 封装弹窗提示框,自动消失,确认
- Eclipse中SVN标记,提交人,时间等版本信息消失
- tomcat context 配置 项目部署
- iOS之获取设备的UUID
- beetl html 转义,beetl 前端
- 使用ElasticSearch6.0快速实现全文搜索功能
- 岩板铺地好吗_铺地的石板如何用出高逼格,三个大师案例来教你!
- 未能将“C:\Program Files (x86)\DevExpress 2009.2\Components\Sources\DevExpress.DLL\DevExpress.XtraGrid.v
- 构建系统发育树~序列对比 MEGA、MAFFT(图文教程)
- codevs1515 瞎搞+Lucas
- 下面程序段中带下划线的语句的执行次数的数量级是( )
- VUE3 响应式 API 之 toRef 与 toRefs
- LT7911D功能概述 LT7911D是Type-C/DP1.2转双路MIPI/Lvds的一款芯片
- html5 spin,HTML5 number spinbox controls not triggering a cha
- 【多校训练】2021HDU多校4
- 红帽上安装wireshark