`
fyd222
  • 浏览: 103903 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

forword和sendRedirect

    博客分类:
  • j2ee
阅读更多

jsp中forword和sendRedirect的区别

RequestDispatcher.forward()</P>


是在服务器端起作用,当使用forward()时,Servlet engine传递HTTP请求从当前的Servlet or JSP到另外一个Servlet,JSP 或普通HTML文件,也即你的form提交至a.jsp,在a.jsp用到了forward()重定向至b.jsp,此时form提交的所有信息在 b.jsp都可以获得,参数自动传递.</P>


但forward ()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件,同时forward()无法在后面带参数传递,比如 servlet?name=frank,这样不行,可以程序内通过response.setAttribute("name",name)来传至下一个页面.</P>


重定向后浏览器地址栏URL不变.</P>


例:servlet文件中重定向
CODE</P>


public void doPost(HttpServletRequest request,HttpServletResponse response)</P>


       throws ServletException,IOException</P>


{</P>


       response.setContentType("text/html; charset=gb2312");</P>


       ServletContext sc = getServletContext();</P>


       RequestDispatcher rd = null;</P>


       rd = sc.getRequestDispatcher("/index.jsp");</P>


       rd.forward(request, response);
}</P>

 

2.response.sendRedirect()</P>


是在用户的浏览器端工作,sendRedirect()可以带参数传递,比如servlet?name=frank传至下个页面,同时它可以重定向至不同的主机上,且在浏览器地址栏上会出现重定向页面的URL.</P>


sendRedirect()可以重定向有frame的jsp文件.</P>


例:servlet文件中重定向
CODE</P>


public void doPost(HttpServletRequest request,HttpServletResponse response)</P>


       throws ServletException,IOException</P>


{</P>


       response.setContentType("text/html; charset=gb2312");</P>


       response.sendRedirect("/index.jsp");</P>


}
</P>


在Java Web开发中,经常会用到跳转页面的方法,一般有下面两种方法。
Java代码

   1. HttpServletResponse response = new HttpServletResponse(); 
   2. response.sendRedirect(location) 

  HttpServletResponse response = new HttpServletResponse();
  response.sendRedirect(location)

Java代码

   1. RequestDispatcher rd = new RequestDispatcher(); 
   2. rd.forward(request, response)  

  RequestDispatcher rd = new RequestDispatcher();
  rd.forward(request, response)

   1. 跳转方式
      http://localhost:8080/Test应用
      运用forward方法只能重定向到同一个Web应用程序中的一个资源。而sendRedirect方法可以让你重定向到任何URL。
      表单form的action= "/uu ";sendRedirect( "/uu ");表示相对于服务器根路径。如http://localhost:8080/Test应用(则提交至http://localhost:8080/uu);
      Forward代码中的 "/uu "则代表相对与WEB应用的路径。如http://localhost:8080/Test应用(则提交至http://localhost:8080/Test/uu);
   2. (运用RequestDispatcher接口的Forward)方法
      forward()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件,
      同时forward()无法在后面带参数传递,比如servlet?name=frank,这样不行,可以程序内通过response.setAttribute( "name ",name)来传至下一个页面.
      重定向后浏览器地址栏URL不变.

      只有在客户端没有输出时才可以调用forward方法。如果当前页面的缓冲区(buffer)不是空的,那么你在调用forward方法前必须先清空缓冲区。
      "/ "代表相对与web应用路径

      RequestDispatcher   rd   =   request.getRequestDispatcher( "/ooo ");
      rd.forward(request,   response);提交至http://localhost:8080/Test/ooo

      RequestDispatcher   rd   =   getServletContext().getRequestDispatcher( "/ooo ");
      rd.forward(request,   response);提交至http://localhost:8080/Test/ooo

      RequestDispatcher   rd   =getServletContext().getNamedDispatcher( "TestServlet ");(TestServlet为一个 <servlet-name> )
      rd.forward(request,   response);提交至名为TestServlet的servlet

      如果在 <jsp:forward> 之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么该语句将不起作用,这一点应该特别注意。
      另外要注意:它不能改变浏览器地址,刷新的话会导致重复提交
      从http://localhost:8080/Test/gw/page.jsp中转发
      <jsp:forward   page= "OtherPage.jsp "/> 在JSP页面被解析后转换成pageContext.forward( "OtherPage.jsp ");
      "/OtherPage.jsp "提交到http://localhost:8080/Test/OtherPage.jsp
      "OtherPage.jsp "提交到http://localhost:8080/Test/gw/OtherPage.jsp


      (运用HttpServletResponse接口的sendRedirect)方法302
      是在用户的浏览器端工作,sendRedirect()可以带参数传递,比如servlet?name=frank传至下个页面,
      同时它可以重定向至不同的主机上,sendRedirect()可以重定向有frame.的jsp文件.

      假设转发代码包含于注册的servlet-url为/ggg/tt;jsp为/ggg/tt.jsp:
      绝对路径:response.sendRedirect( "http://www.brainysoftware.com ")发送至http://www.brainysoftware.com
      根路径:response.sendRedirect( "/ooo ")发送至http://localhost:8080/ooo
      相对路径:response.sendRedirect( "ooo ")发送至http://localhost:8080/Test/ggg/ooo,

      sendRedirect等同于此方式
      response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
      String   newLocn   =   "/newpath/jsa.jsp ";
      response.setHeader( "Location ",newLocn);


      (Meta   Refresh)方法200
      这种方法是由HTML提供的,Meta本身就是HTML标签。使用方法是: <meta   http-equiv= "refresh "   content= "5;   url=http://www.dreamdu.com/ "   />
      相应的java代码
      String   content=stayTime+ ";URL= "+URL;
      response.setHeader( "REFRESH ",content);
   3. 使用response.sendRedirect()地址栏将改变
      使用request.getRequestDispatcher().forward(request,response)地址栏中的信息保持不变
   4. request.setAttribute存的东西
      只用通过方法2跳转   才能在新页取出来
   5. redirect   会首先发一个response给浏览器,   然后浏览器收到这个response后再发一个requeset给服务器,   然后服务器发新的response给浏览器.   这时页面收到的request是一个新从浏览器发来的.
      forward   发生在服务器内部,   在浏览器完全不知情的情况下发给了浏览器另外一个页面的response.   这时页面收到的request不是从浏览器直接发来了,可能己经放了数据.
      所以:
              request.setAttribute存的东西
              只用通过方法2跳转   才能在新页取出来

分享到:
评论

相关推荐

    forward PK sendredirect

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

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

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

    forward-sendRedirect

    在Java Web开发中,"forward-sendRedirect"是一个关键的概念,主要涉及到Servlet和JSP之间的页面跳转技术。这里我们将深入探讨这两个方法的工作原理及其在实际应用中的差异。 首先,我们来了解一下`forward()`方法...

    sendRedirect()和forward()

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

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

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

    JAVA-web基础知识点

    JAVA-web基础知识点 以下是对给定文件信息的详细解释和知识点总结: ...forward 和 sendredirect 是两种不同的请求转发机制。forward 是在服务器端转发请求,而 sendredirect 是在客户端转发请求。

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

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

    javaee专题分类

    #### 四、Forward和SendRedirect的区别 - **Forward**:请求转发是在服务器内部完成的,客户端浏览器的URL不会发生变化,不会产生新的HTTP请求。这种方式效率较高,因为避免了多次网络交互。 - **SendRedirect**:...

    response_sendRedirect和request_getRequestDispatcher()_forward的区别.

    运用forward方法只能重定向到同一个Web应用程序中的一个资源。而sendRedirect方法可以让你重定向到任何URL。 表单form的action="/uu";sendRedirect("/uu");表示相对于服务器根路径。如http://localhost:8080/Test...

    servlet-api-2.5.jar以及jsp-api-2.1.jar

    4. **转发与重定向**:通过RequestDispatcher的forward和sendRedirect方法,Servlet和JSP可以控制请求的流向。 5. **EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)**:EL简化了表达式...

    servlet程序开发之二

    4.转发与重定向:讲解RequestDispatcher接口的forward和sendRedirect方法,以及它们在请求处理中的应用。 5. 异常处理:介绍Servlet的error页面配置,以及使用try-catch-finally处理异常的方法。 6. 过滤器:讲解...

    Servlet跳转方式sendReDirect

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

    JSP源码jsp高校智能排课系统设计(源代码+论文)

    - **页面跳转控制**:通过 forward 和 sendRedirect 方法实现页面间的跳转。 ##### 2. 数据库操作 - **连接池管理**:使用 C3P0 或 DBCP 连接池管理数据库连接,提高数据库访问效率。 - **SQL注入防护**:使用 ...

    J2EE武功秘籍

    Forward 和 SendRedirect 区别** - **Forward**:服务器内部转发,只发送一次请求,客户端地址栏不会变化。 - **SendRedirect**:客户端重定向,发送两次请求,客户端地址栏会变化。 **3. RMI 和 WebService 区别...

    自己动手写Struts.pdf

    - **forward和sendRedirect的区别**:`forward`是服务器端跳转,不改变URL;`sendRedirect`是客户端跳转,会改变URL。 - **JSP的内置对象** - **request对象**:用于获取客户端请求的信息。 - **response对象**...

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

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

    java面试题

    #### forward和sendRedirect的区别 - **forward**:服务器端转发,只发送一次请求。 - **sendRedirect**:客户端重定向,发送两次请求。 #### JSP中动态INCLUDE与静态INCLUDE的区别 - **动态INCLUDE**:运行时...

Global site tag (gtag.js) - Google Analytics