`

关于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(
http://www.mocuai.com);

 

上面是从网上找来的比较全面的解释,个人理解总结如下:

共同点:forward与redirect都可以对用户的request进行转发,

不同点:forward是服务器内部重定向,对客户端是隐蔽的,所以客户端是看不到重定向的资源的路径,另外本质上来说forward只发起了一次request请求,它可以在重定向的时候共享Request范围内的对象;Redirect方式利用的是HTTP协议中的redirect机制,redirect

就是服端响应客户端请求后根据逻辑,送一个状态码,客户端重新去求一个地址,所以本质上redirect是发生在客户端的2次请求,因此可以在客户端看到重定向的路径,而且第一次request范围内的对象在redirect发生后一般是无效的(可以通过特殊手段使其有效,但范围肯定是改变了).

个人认为高效不高效是相对的,通常来说由于网络响应速度比起服务器内部处理的速度慢太多了,所以forward会表现为高效,但若是forward重定向的资源处理非常复杂也有可能使得响应很缓慢.

 

分享到:
评论

相关推荐

    转发和重定向的区别 forward和redirect的区别

    转发和重定向的区别 forward和redirect的区别 request.getRequestDispatcher()..forward(request,response);和 response.sendRedirect();的区别详解

    forward转发与redirect重定向的区别.zip

    forward转发与redirect重定向的区别

    forward与redirect区别

    forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。还有,转发...

    19.Servlet中forward和redirect的区别.avi

    19.Servlet中forward和redirect的区别.avi

    Java面试题19.forward和redirect的区别.mp4

    Java面试题19.forward和redirect的区别.mp4

    forward与redirect!转发和重定向 解析

    forward与redirect!转发和重定向 解析

    java中dispcter和forward的区别

    dispcter和forward的区别 RequestDispatcher.forward()方法和HttpServletResponse.sendRedirect()方法的区别是:前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址,他是不会改变Request的...

    JAVA面试题之Forward与Redirect的区别详解

    主要给大家介绍了在JAVA面试中可能遇到会遇到的一道题,就是java中Forward与Redirect两者之前的区别,文中介绍的非常详细,对大家具有一定参考学习价值,需要的朋友们下面来一起看看吧。

    struts_actionforward.rar_ActionForward_redirect

    ActionForward的使用 1、理解全局和局部ActionForward的概念 2、redirect的使用 3、struts-config.xml文件不允许动态修改 4、理解动态ActionForward,动态的ActionForward是可以运行期修改的

    springMVC3学习 九 redirect和forward跳转 源码

    springMVC3学习 九 redirect和forward跳转 源码 文章地址http: blog csdn net itmyhome1990 article details 26286669

    jsp forward与redirect实探

    NULL 博文链接:https://dreamzhong.iteye.com/blog/1128006

    直接请求转发(Forward)和间接请求转发(Redirect)两种区别.docx

    用户向服务器发送了一次HTTP请求,该请求肯能会...根据转发方式的不同,可以区分为直接请求转发(Forward)和间接请求转发(Redirect)两种有何区别呢?本篇在回答该问题的同时全面的讲解两种请求转发方式的原理和区别。

    ActionForward和国际化

    详解Struts2的国际化!ActionForward的使用 ActionForward的默认行为是转发,如果想重定向,需要在标签中配置 redirect="true" 比如: <forward name="login" path="/login.jsp" redirect="true"/>

    大厂面试题知识点讲解汇总

    、bat面试题之线程的实现方式 怎么启动线程怎么区分线程、bat面试题之forward和redirect的区别、bat面试题之内置对象和四大作用域和页面传值、bat面试题之设计模式和常用的设计模式、bat面试题之实现一个拷贝文件的...

    traefik-forward-auth:最小前向身份验证服务,可为traefik反向代理提供基于GoogleOpenID oauth的登录和身份验证

    redirect_uri(请参阅auth-host ) 允许身份验证在多个域中持续存在(请参阅) 支持Google令牌生存期以外的扩展身份验证(请参阅:lifetime )内容发布我们建议在thomseddon/traefik-forward-auth:2 hub上使用2标签...

    java部分试题及答案

    19、forward 和redirect的区别 forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏...

    JAVA基础知识点汇总

    10、Servlet中的forward和redirect有什么区别: Forward是服务器内部的重定向,服务器直接访问目标地址的url,地址不变。 Redirect:客户端的重定向,完全跳转,地址改变。 11、JSP的内置对象: 1)require(请求对象...

    java面试大全视频版

    Java面试题19.Servlet中forward和redirect的区别 Java面试题20.jsp和Servlet的相同点和不同点 Java面试题21.内置对象和四大作用域和页面传值 Java面试题22.Session和Cookie的区别和使用场景 Java面试题23.mvc模式和...

    中软公司JAVA培训资料.doc

    中软公司JAVA培训资料.一、Java语言 1、面向对象的三个基本特征 2、方法重载和方法重写的概念和区别 3、接口和内部类、抽象类的特性 ... ** 2、forward 和redirect的区别 3、JSP的常用指令 三、servlet doc

    ThinkPHP框架使用redirect实现页面重定向的方法实例分析

    本文实例讲述了ThinkPHP框架使用redirect实现页面重定向的方法。分享给大家供大家参考,具体如下: ThinkPHP redirect 方法 ThinkPHP redirect 方法可以实现页面的重定向(跳转)功能。redirect 方法语法如下: $...

Global site tag (gtag.js) - Google Analytics