forward和sendRedirect的差别

HttpServletResponse.sendRedirect与RequestDispatcher.forward方法都可以实现获取相应URL资源。
sendRedirect实现请求重定向,forward实现的是请求转发。在web服务器内部的处理机制也是不一样的。
1.forward方法只能转发给同一个web站点的资源,而sendRedirect方法还可以定位到同一个web站点的其他应用,甚至可以通过传入绝对路径定位到别的web站点,这事forward的方法所不能比拟的优势。
如果传给RequestDispatcher 的参数以"/"开头,则访问的是当前web应用的根目录。如果传给sendRedirect方法以"/"开头,访问的是整个web站点的根目录。

2.forward重定向后,浏览器url地址不变,sendRedirect转发后,浏览器url地址变为目的url地址。

3.使用forward重定向的过程,是浏览器先向目的Servlet发送一次Request请求,然后再服务器端由Servlet再将请求发送到目的url,再由服务器端Servlet返回Response到浏览器端。浏览器和服务器一次请求响应。
使用sendRedirect转发的过程,浏览器先向目的Servlet发送一次请求,Servlet看到sendRedirect将目的url返回到浏览器,浏览器再去请求目的url,目的url再返回response到浏览器。浏览器和服务器两次请求响应。

4.forward方法的调用者与被调用者之间共享Request和Response
sendRedirect方法由于两次浏览器服务器请求,所以有两个Request和Response。
如果使用request.setAttribute传递一些属性就需要用forward,如果想要跳转到别的应用的资源,就需要用sendRedirect。

5.无论是forward方法还是sendRedirect方法调用前面都不能有PrintWriter输出到客户端。
forward方法报错: java.lang.IllegalStateException: Cannot forward after response has been committed
sendRedirect报错:java.lang.IllegalStateException: at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:435)

时间: 2024-08-05 17:14:19

forward和sendRedirect的差别的相关文章

JAVA学习——forward和sendRedirect区别总结

request.setAttribute()怎么用的? JSP1代码 String [] test=new String[2]; test[0]="1"; test[1]="2"; request.setAttribute("test",test) ; response.sendRedirect("jsp2.jsp"); JSP2代码 String test[]=(String[])request.getAttribute(&

【Servlet】Servlet之forward、sendRedirect、 include区别与使用

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka servlet中的请求转发主要有三种方式:1. forward:是指转发,将当前request和response对象保存,交给指定的url处理.并没有表示页面的跳转,所以地址栏的地址不会发生改变.2. redirect:是指重定向,包含两次浏览器请求,浏览器根据url请求一个新的页面,所有的业务处理都转到下一个页面,地址栏的地址会变发生改变.3. include:意为包含,即包含url中的内

jsp:forward response.sendRedirect

jsp中<jsp:forward page=""/>和response.sendRedirect("")两种跳转的区别 一.response.sendRedirect("") 始终要记住一点就是这种跳转是让客户端浏览器自己去访问指定的页面,这个指定页面的地址就是sendRedirect("")参数的内容.如果跳转的页面是webapp里面的页面,客户端需要两层访问服务器.如果是其他网址的话,客户端则不再访问此服务器,

Java面试宝典2013版(超长版)

一. Java基础部分......................................................................................................2 1.一个".java"源文件里能否够包含多个类(不是内部类)?有什么限制?.....2 2.Java有没有goto?........................................................................

页面跳转?sendRedirect()与forward()辨析

在JSP中,要实现页面的跳转,主要有两种方式实现:forward和sendRedirect. 一.forward forward实现页面跳转是通过转移请求实现的.客户端向服务器的页面1发出一个请求,页面1编译运行过程中发现处理不了,把这个请求转移(forward)给页面2来处理,这个请求对象封装了一开始客户端发送请求时封装的信息.参数等.页面2对通过这个请求对象提取数据并进行一系列的操作处理后,把结果通过response发回原客户端浏览器显示.整个过程中只发生了一次请求.一次响应.由于宏观上是客

java 中sendredirect()和forward()方法的区别

 一.文章1 HttpServletResponse.sendRedirect与RequestDispatcher.forward方法都可以实现获取相应URL资源. sendRedirect实现请求重定向,forward实现的是请求转发. 在web服务器内部的处理机制也是不一样的. 1. 跳转方式 运用forward方法只能重定向到同一个Web应用程序中的一个资源.而sendRedirect方法可以让你重定向到任何URL. 表单form的action= "/uu ";sendRedir

Servlet中的request对象、重定向和转发的差别(6)

1.这里所说的request对象指的是HttpServletRequest对象,它代表client的请求,当client通过HTTP协议訪问server时.HTTP请求头中的全部信息都封装在这个对象中.我们通过request对象调用里面的方法,能够获得客户发送给webserver的各种信息. 2.request的经常用法 (1)获得客户机信息     getRequestURL方法返回client发出请求时的完整URL.(                                比如:ur

浅谈forword和sendRedirect

最近项目中全部用ajax请求数据,导致在做登录过滤器时不能重定向,然后仔细翻了翻Forward和sendRedirect,以下内容收集自百度: 1. forward (服务器端作的重定向) 服务器往client发送数据的过程为:服务器在向客户端发送数据之前,是先将数据输出到缓冲区,然后将缓冲区中数据发送给client端. 什么时候将缓冲区中数据发送给client端呢? ①当对来自client的request处理完,并把所有数据输出到缓冲区. ②当缓冲区已满. ③在程序中调用缓冲区的输出方法out

Include,Forward,sendRedirct的区别(转)

三者在servlet中的最大区别是: Include和Forward:将当前请求转到另外一个JSP或者servlet处理. sendRedirct:将当前请求返回到浏览器,带上要redirect的URL,浏览器重新发一个新的请求到新的URL. include和forward的区别: include 是去而复返,forward 是前不见古人,后不见来者. include 是把别人包含进来,forward 是丢掉了自己. include是把另一个servlet/jsp处理过后的内容拿过来与本身的se