`

forward与sendRedirect区别

阅读更多
SendRedirect Forward
不同的request 不同的对象,但是可以渠道上一个页面的内容
send后面的语句会继续执行,除非return Forward后面的语句不会继续发送给客户端
速度慢 速度快
需要到客户端的往返,可以跳转到任何页面 服务器内部转换
地址栏有变化 地址栏没有变化
可以传参数,直接写在URL后面 可以传参数

 / 代表的是http://127.0.0.0/
<%response.sendRedirect();%>
<form action="/test/ServletToJSP">
<a href="/test/ServletToJSP">test</a>

 / 代表的是 http://127.0.0.1/test
this.getServletContext().getRequestDispatcher
("/servlet_jsp/ServletUseJSP.jsp").forward
(req,resp); 并且只能以 / 开头






 










ITeye sendRedirect和forward原理及区别总结
ITeye  forward与sendRedirect区别
CSDN  forward和sendRedirect的区别

 

HttpServletResponse.sendRedirect与RequestDispatcher.forward方法都可以实现获取相应URL资源。

sendRedirect实现请求重定向,forward实现的是请求转发。

在web服务器内部的处理机制也是不一样的。

 

1.forward方法只能转发给同一个web站点的资源,而sendRedirect方法还可以定位到同一个web站点的其他应用,甚至可以通过传入绝对路径定位到别的web站点,这事forward的方法所不能比拟的优势。

可以看到这两种方法的用法,如果传给RequestDispatcher 的参数以"/"开头,则访问的是当前web应用的根目录

加入当前web的根目录是myweb。如果传给sendRedirect方法以"/"开头,访问的是整个web站点的根目录。

[java] view plain copy
 
 print?
  1. RequestDispatcher rd = request.getRequestDispatcher("/index.jsp");  
  2.         rd.forward(request, response);  
  3.   
  4.         response.sendRedirect("/index.jsp");  


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)

 

【转自】:http://blog.csdn.net/xuxurui007/article/details/7755792

分享到:
评论

相关推荐

    forward PK sendredirect

    在Web开发中,"forward"和"sendRedirect"是两种常用的HTTP请求处理方式,它们都是用来实现页面跳转,但工作原理和应用场景有所不同。这里我们将深入探讨这两种方法的区别。 首先,`jsp:forward page="转的页面"`是...

    Servlet之forward、sendRedirect、 include区别与使用实例

    Servlet之forward、sendRedirect、 include区别与使用实例 ,具体效果和过程看博文http://blog.csdn.net/evankaka/article/details/45169569

    forward-sendRedirect

    与`forward()`不同,`sendRedirect()`实际上是向客户端浏览器发送一个HTTP状态码302(临时重定向)或303(见其他),并附带一个新的URL,指示浏览器发起一个新的GET请求到这个新URL。因此,`sendRedirect()`会生成一...

    jsp中页面之间的跳转forward与sendRedirect的区别

    在JSP(Java Server Pages)中实现页面间的...总结来说,forward和sendRedirect是JSP中实现页面跳转的两种基本方法,它们在性能、使用场景和实现效果上各有优劣。开发者需要根据具体的应用场景和需求来选择合适的方法。

    sendRedirect()和forward()

    sendRedirect()和forward()方法的区别 sendRedirect()和forward()方法都是Servlet编程中常用的方法,它们可以将客户端的请求重定向或转发到其他的资源,如Servlet、JSP页面或HTML文件中。但是,这两个方法之间存在...

    sendredirect()和forward()方法的区别_xyy511的专栏-CSDN博客.mht

    sendredirect()和forward()方法的区别_xyy511的专栏-CSDN博客.mht

    response_sendRedirect和request_getRequestDispatcher()_forward的区别.

    跳转方式 ...运用forward方法只能重定向到同一个Web应用程序中的一个资源。...Forward代码中的"/uu"则代表相对与WEB应用的路径。如http://localhost:8080/Test应用(则提交至http://localhost:8080/Test/uu);

    Servlet跳转方式sendReDirect

    在Servlet中,有两种主要的跳转方式:`RequestDispatcher.forward()`和`ServletResponse.sendRedirect()`。这两种方法在处理客户端请求时有不同的行为和应用场景。 1. `RequestDispatcher.forward()` - `forward()...

    forward与redirect区别

    在Java Servlet中,通常通过`HttpServletResponse.sendRedirect()`方法实现。 - 重定向后,浏览器的URL会显示新请求的地址,用户可以看到页面跳转的过程。 - 由于是浏览器重新发起请求,所以原有的Request数据不会被...

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

    Java 中 sendRedirect() 和 forward() 方法的区别 Java 中的 sendRedirect() 和 forward() 方法都是用于页面跳转的,但是它们之间存在着一些关键的区别。 1. 跳转方式 sendRedirect() 方法可以将请求重定向到任何...

    java中dispcter和forward的区别

    1. 地址栏显示:`forward()`不会改变浏览器地址栏的URL,而`sendRedirect()`会显示新请求的URL。 2. 数据共享:`forward()`可以保留并共享`Request`作用域内的数据,而`redirect()`则无法做到这一点,因为它们涉及...

    jsp forward与redirect实探

    当我们需要在不同的页面之间导航时,`forward`和`redirect`是两种常见的处理请求转发和重定向的方法。本文将深入探讨这两种机制及其区别。 首先,`forward`是通过服务器端内部跳转实现的。它使用`RequestDispatcher...

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

    它们的主要区别在于请求处理流程、URL改变以及数据共享方式。 1. 转发(Forward): - 使用`RequestDispatcher.forward()`方法实现。 - 请求转发是在服务器内部完成的,客户端浏览器并不知情。这意味着,浏览器的...

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

    "JAVA面试题之Forward与Redirect的区别详解" 本文主要讲解了在JAVA面试中可能遇到的问题,即JAVA中Forward与Redirect两者之间的区别。文中详细介绍了两种请求转发方式的原理和区别,包括请求转发的含义、Forward...

    jsp:forward方法实例

    请求转发与URL重定向(`response.sendRedirect()`)有显著区别。URL重定向会向客户端浏览器发送一个HTTP响应,告知浏览器加载新的URL,从而创建了一个新的HTTP请求。而`jsp:forward`是在服务器端完成的,用户浏览器...

    JSP面试容易问到的问题

    ### JSP面试常见问题解析:Forward与SendRedirect的区别及Include的理解 #### 1. Forward与SendRedirect的区别 在Web开发中,特别是在Java Server Pages (JSP)与Servlets结合使用的场景下,`forward`与`...

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

    ### Forward与Redirect解析 在Web开发中,Forward(转发)与Redirect(重定向)是两种常见的页面跳转方式。它们虽然都可以实现从一个页面跳转到另一个页面的功能,但在实现机制、应用场景以及对用户浏览器地址栏的...

    forward方法实现请求转发

    如果确实需要进行某些设置,可以在转发完成后进行,或者选择使用重定向(`response.sendRedirect`)而不是转发来实现功能。 ##### 2. `forward`方法之前的内容不会被浏览器渲染 - **问题背景**:当在Servlet中使用`...

    jsp跳转getRequestDispatcher()和sendRedirect()的区别.docx

    ### jsp跳转getRequestDispatcher()和sendRedirect()的区别 在Java Web开发中,经常会遇到页面间的跳转操作,其中两种常见的方法是`getRequestDispatcher()`和`sendRedirect()`。这两种方式虽然都能实现页面跳转,...

Global site tag (gtag.js) - Google Analytics