1、定义
1)Forward(请求转向):服务器程序内部请求转向,这个特性允许前一个程序用于处理请求,而后一个程序用来返回响应。
2)Redirect(重定向):服务端发送给客户端一个重定向的临时响应头,这个响应头包含重定向之后的URL,客户端用新的URL重新向服务器发送一个新的请求。
2、定义简单理解
1)请求转发只是把请求转发给服务器上(通常是同一个Web应用中)的另一个组件(Servlet或Jsp等)。
2)重定向则只是告诉客户(浏览器)去访问另一个URL(可能是同一个Web站点甚至其他站点)。
3、本质区别
1)请求转发发生在服务器端,由服务器(比如servlet)控制。
2)重定向发生在客户端,由客户(通常是浏览器)控制。
4、请求和响应次数
1)请求转发过程在同一个请求当中完成,只会返回一个响应。
2)重定向过程则发生在两个不同的请求中,会返回两个不同响应。
5、基于第4点,进一步分析
1)请求转发后可以在服务器端获取本次请求对象上保存的信息(比如在Servlet中将用户名保存到当前request对象中,转发给另一组件(如JSP)后,另一组件可以通过request对象取得用户名信息)。
2)请求转发后,浏览器地址栏URL不会发生改变。
3)重定向后则无法在服务器端获取第一次请求对象上保存的信息(比如还是在Servlet中将用户名保存到当前request对象中,并重定向到一个新的URL,然后在新URL指向的地址中(比如还是某个Servlet)就无法获取原先保存在第一个请求中的信息。很明显,用户名是保存在第一次请求的对象中,但并没有保存在本次(第二次)请求的对象中)。
4)重定向后,浏览器地址栏URL变为新的URL(因为浏览器确实给新的URL发送了一个新的请求)。
6、服务器端调用的方法
1)请求转发使用RequestDispatcher对象的forward()或include()方法(他们的区别可参考:Servlet中请求转发时forword()和include()的区别)。
2)重定向则使用HttpServletResponse对象的sendRedirect()方法。
7、基于第6点,进一步分析
1)RequestDispatcher对象是通过调用HttpServletRequest对象的getRequestDispatcher()方法得到的,所以forward()或include()本质来说是属于请求对象的方法,所以请求转发始终发生在一个请求当中。
2)sendRedirect()方法HttpServletResponse对象的方法,即响应对象的方法。既然调用了响应对象的方法,就表示本次请求过程已经结束了,服务器即将向客户端返回本次请求的响应了。事实上,服务器确实返回了一个状态码为“302”,首部“Location”值为新的URL的响应。然后浏览器就会根据“Location”首部指定的URL,重新发起一次新的请求,转向这个目标页面,所以重定向实际上发生在两个不同的请求当中。
8、sendRedirect()和forword()中使用相对URL分析(站点为:http://localhost:8080/,Web应用为MyApp)。
1)sendRedirect(URL):如果使用”/”开头,则表示相对于整个Web站点的根目录,如使用sendRedirect(“/foo/myHtml.html”)时,容器建立的完整URL为:http://localhost:8080/foo/myHtml.html。否则,就表示相对于当前目录。
2)request.getRequestDispatcher(URL).forward(req,res):如果使用”/”开头,则表示相对于当前Web应用的根目录,而非整个Web站点的根目录,如使用request.getRequestDispatcher(/foo/myHtml.html).forward(req,res)时,容器会建立绝对(完整)的URL为:http://localhost:8080/MyApp/foo/myHtml.html。否则,同样表示相对于当前目录。
9、跳转时机(有待考究)
1)请求转发执行到跳转语句后马上无条件跳转,之后的代码不再执行。
2)重定向则会在所有代码执行完毕后跳转,但不能再向response中写入任何数据。(可以在重定向跳转后加上return语句,实现马上跳转)
10、执行时机(相同点)
1)请求转发和重定向方法都必须在响应提交(刷新响应正文输出到流中)之前执行,否则会抛出IllegalStateException异常。
2)在转发或重定向之前,响应缓冲区中未提交的数据会被自动清除。
11、响应速度(理论上)
1)请求转发相对快:因为请求转发过程在同一请求中。
2)重定向相对慢:因为重定向过程发生在两个不同的请求中。
相关推荐
servlet请求转发、请求重定向、请求包含 获取form数据
javaServlet请求转发和重定向.pdf
java servlet请求转发重定向 适合于初学者更好的了解页面跳转和原理
通过网上总结的Servlet的转发与重定向的区别介绍。希望可以帮的上大家
servlet中实现请求转发,用户登录,在servlet中验证用户名和密码.
USerLogin servlet 登录实例探究转发与重定向本质区别
请求转发:在最终的 servlet (TestServlet) 中,request和中转的那个servlet(ForwardServlet)中的request对象是同一个对象 重定向:在最终的 servlet (TestServlet) 中,request和中转的那个servlet(SendServlet...
创建web工程还有代码是试练,请求方式+重定向+请求转发+cookie+session+jsp(四大作用域九大内置对象)
使用myEclipse + tomcat Servlet的简单例子,包括重定向,Session的简单使用 初学者使用......高手勿入 www.zhuyi123.cn助益信息网经常有新的信息 助益网
内含请求转发,过滤器,${}使用
1.RequestDispatcher.forward()――转发 是在服务器端起作用,当使用forward()时, Servlet engine传递HTTP请求从当前的Servlet or JSP到另外一个Servlet,JSP 或普通HTML文件,也即你的 form提交至a.jsp,在a.jsp用到了...
一、Servlet请求和响应 web容器概念:顾名思义就像一个盒子,里面可以装东西,这里的web容器 (Tomcat,WebLogic,WebSphere)就是装载Servlet和JSP的环境、负责管理它们的各种对象,并且负责 它们的生命周期以及相关...
MVC架构关键技术,请求分派去重定向。精辟的内容再次,学习就是要掌握重点 难点,其他的就轻松了
JSP和Servlet中的几个编码的作用及原理 JSP和Servlet中的几个编码的作用及原理
Servlet运行原理图,描述servlet运行的步骤方向和servlet运行过程
本篇文章主要介绍了Servlet 实现重定向几种方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
当服务器接收到HTTP请求时,它会将请求转发给相应的Servlet进行处理。Servlet可以动态地生成HTML、XML或其他格式的响应并将其发送回客户端浏览器。 Servlet通过继承javax.servlet.http.HttpServlet类来创建。每个...
jsp和servlet请求与响应,jsp和servlet请求与响应,
Servlet 工作原理解析