| 风信Java论坛 ›› J2EE/Java Web 讨论交流中心 ›› forward和sendRedirect 的原理和区别 | 登录 -> 注册 |
|
1F forward和sendRedirect 的原理和区别 唧唧 Post by : 2008-07-29 12:27:06.0
它们在使用上的区别有很多,那些都是表面现象,在理解了它们各自的原理以后,使用上的区别那就能容易掌握了。 一、原理. (1)当对来自client的request处理完,并把所有数据输出到缓冲区 这种重定向方式是利用服务器端的缓冲区机制,在把缓冲区的数据发送到客户端之前,原来的数据不发送,将执行转向重定向页面,发送重定向页面的数据,重定向调用页的数据将被清除。如果在<JSP:FORWORD>之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么这种重定向方式将不起作用,这一点应该特别注意。 public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException 2、 sendRedirect public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException RequestDispatcher.forward则是直接在服务器中进行处理,将处理完后的信息发送给浏览器进行显示,所以完成后在url中显示的是跳转前的页面。在forward的时候将上一页面中传送的request和response信息一同发送给下一页面(而response.sendRedirect不能将上一页面的request和response信息发送到下一页面)。由于forward是直接在服务器中进行处理,所以forward的页面只能是本服务器的。 |
|
2F 唧唧 Post by : 2008-07-29 12:28:14.0
使用JSP大约有下列三种跳转方式:
1. response.sendRedirect(); 2. response.setHeader("Location",""); 3. <jsp:forward page="" /> 经过试验得到下面的一些规则: 一. response.sendRedirect() 此语句前不允许有out.flush(),如果有,会有异常: java.lang.IllegalStateException: Can´t sendRedirect() after data has committed to the client. at com.caucho.server.connection.AbstractHttpResponse.sendRedirect(AbstractHttpResponse.java:558) ... 跳转后浏览器地址栏变化 如果要跳到不同主机下,跳转后,此语句后面的语句会继续执行,如同新开了线程,但是对response的操作已经无意义了; 如果要跳到相同主机下,此语句后面的语句执行完成后才会跳转; 二. response.setHeader("Location","") 此语句前不允许有out.flush(),如果有,页面不会跳转。 跳转后浏览器地址栏变化 此语句后面的语句执行完成后才会跳转 三. <jsp:forward page="" /> 此语句前不允许有out.flush(),如果有,会有异常: java.lang.IllegalStateException: forward() not allowed after buffer has committed. at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:134) at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:101) at com.caucho.jsp.PageContextImpl.forward(PageContextImpl.java:836) ... 跳转后浏览器地址栏不变,但是只能跳到当前主机下 此语句后面的语句执行完成后才会跳转 |
|
3F 千山暮雪 Post by : 2009-03-13 10:13:05.0
真是潜入深出!
|
| 风信Java论坛 ›› J2EE/Java Web 讨论交流中心 ›› forward和sendRedirect 的原理和区别 | 登录 -> 注册 |