`

转发和重定向的区别

阅读更多

转发: request.getRequestDispatcher("/b").forward(request, response);

重定向:   response.sendRedirect("forward.jsp");

 

转发:

     两个jsp共享一个request请求 (这里页面之间的属性值是可以传递,并共享的。)

     Forword不仅可以跳转到本应用中的另一个servlet,JSP,还可以跳转到另外一个文件,

     甚至是WEB-INF下的 web.xml文件     Forward跳转是一种服务器端的跳转。

 

    比如:

       <input type="button" onclick='location="./a?destination=servlet"' value="跳转到servlet">
      <input type="button" onclick='location="./a?destination=file"' value="跳转到web.xml">
      <input type="button" onclick='location="./a?destination=jsp"' value="跳转到JSP">

       当你点击第三个按钮的时候:浏览器地址栏会显示 

       http://localhost:8080/ForwardAndRedirect/a?destination=jsp

 

      服务器端的响应为:

    if("jsp".equals(destination)){
        request.getRequestDispatcher("forward.jsp").forward(request, response);
     }

    很明显他跳转到了forward.jsp  但是经过服务器段跳转完成之后,浏览器上的地址栏依是:

    http://localhost:8080/ForwardAndRedirect/a?destination=jsp

 

   这是为什么呢?  很明显。JSP也是一种servlet这个跳转是发生在服务器端的,对与浏览器来讲是透明的,浏览器根本就

   不知道 服务器到底跳到哪里去了,所以地址栏的地址是不会改变的。

 

     我们在看重定向。

 

重定向:放弃当前request请求,重新生成一个新的请求

    比如:同样以上面同样的例子加以说明:

     <input type="button" onclick='location="./a?destination=servlet"' value="跳转到servlet">
      <input type="button" onclick='location="./a?destination=file"' value="跳转到web.xml">
      <input type="button" onclick='location="./a?destination=jsp"' value="跳转到JSP">

       当你点击第三个按钮的时候:浏览器地址栏会显示 

      http://localhost:8080/ForwardAndRedirect/forward.jsp

 

      服务器端的响应为:

       f("jsp".equals(destination)){
      response.sendRedirect("forward.jsp");
  }
   

   实际上sendRedirect方法封装了两个属性:

   //返回给浏览器告诉浏览器一个状态码

  response.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);

  // 返回给客户端告诉浏览器一个访问地址

   response.setHeader("location", "http://localhost:8080/ForwardAndRedirect/forward.jsp");

    

    很明显他跳转到了forward.jsp  但是经过服务器段跳转完成之后,浏览器上的地址栏却不是:

    http://localhost:8080/ForwardAndRedirect/a?destination=jsp

 

    而变成了:   http://localhost:8080/ForwardAndRedirect/forward.jsp

 

    这就不明白了,重定向跳转也是发生服务器端的呀,怎么浏览器却识别了服务器跳转的具体页面呢,

    是不是与上面所说的矛盾了吗?

 

    不要激动,不矛盾,是这样子的,重定向实际上浏览器开始是拿着这个"./a?destination=jsp"地址去请求服务器,   

 

   服务器不是马上发生了跳转,而是发给浏览器一个状态码,这个状态码是301或者302,和一新的访问地址,而这个新

   的   访问地址恰恰就是http://localhost:8080/ForwardAndRedirect/forward.jsp 浏览器拿着这个地址,

   再一次向服务器发送一次请求,请求forword.jsp的资源。

 

   所以这里是服务器会响应两次请求,应此存放在request中的属性数据会丢失。如果没有页面之间是属性值需要传递,

   那么我们方可使用重定向。比如还没有注册的用户 将其重定向到注册的页面,比如注销之后,消除session中的user状 

   态在重定向到登录页面。 事实是上一般没有强烈要求,我们不太推荐使用重定向。用重定向实现的跳转我们都可以使用

   Forward跳转来实现。

 

 

最后我把Forwar的请求和重定向的例子,简单的写了一下,放在附件中供大家,理解上面的所说的。

分享到:
评论

相关推荐

    转发与重定向的区别

    ### 转发与重定向的区别 在Web开发中,转发(Forward)和重定向(Redirect)是两种常见的页面跳转方式。这两种方法虽然都能实现页面的跳转,但其内部工作原理、对客户端的影响以及应用场景都有所不同。本文将详细...

    请求转发与重定向的区别

    2. 实践编程:通过编写实际的Servlet或Filter来实现请求转发和重定向,这能帮助你更好地掌握它们的用法和区别。 3. 分析案例:研究不同应用场景下,何时选择请求转发,何时选择重定向,这有助于你在实际工作中做出...

    重定向和转发的区别

    ### 重定向与转发的区别 在Web开发中,经常需要用到重定向(Redirect)与转发(Forward)这两种控制页面跳转的技术。尽管它们都能实现页面之间的跳转,但在具体的应用场景和技术实现上却有着本质的不同。下面将从多...

    转发与重定向区别

    尽管HttpServletResponse.sendRedirect方法和RequestDispatcher.forward方法都可以让浏览器获得另外一个URL所指向的资源,但两者的内部运行机制有着很大的区别。下面是HttpServletResponse.sendRedirect方法实现的...

    jsp 转发和重定向的区别(forward sendRedicreat)

    jsp 转发和重定向的区别 jsp 转发和重定向是两种常见的控制转移方式,它们都可以把控制从一个页面转到另一个页面,但是它们有很大的区别。 转发 jsp 转发是通过 `&lt;jsp:forward&gt;` 元素或 `request....

    请求转发与重定向

    在Web开发中,**请求转发**与**重定向**是两种非常重要的控制流程技术,它们都用于实现页面跳转的功能,但其工作原理和应用场景有所不同。 #### 二、请求转发 ##### 1. 定义 **请求转发**是在服务器内部进行的,它...

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

    在Java的Servlet编程中,`转发`和`重定向`是两种不同的机制,用于在服务器端将客户端的请求导向不同的资源。它们的主要区别在于请求处理流程、URL改变以及数据共享方式。 1. 转发(Forward): - 使用`...

    小谈“转发与重定向”

    总结而言,转发与重定向各有优势与局限性,开发者需要根据具体的应用场景和技术需求来灵活选择使用哪种方式。通常情况下,如果希望在同一个Web应用内部进行跳转,并且希望保持请求的数据不丢失,那么选择转发更为...

    servlet请求转发、重定向、包含

    Servlet请求转发、重定向和包含是Servlet中处理客户端请求的重要技术,它们都涉及到如何有效地管理用户请求和页面跳转,但各自有不同的特性和应用场景。 1. **请求转发(Request Forward)** - 请求转发是在服务器...

    请求转发和重定向的区别共1页.pdf.zip

    本篇文章将详细解析请求转发与重定向的区别。 一、请求转发(Request Forwarding) 1. 定义:请求转发是在服务器端完成的内部操作,它不涉及客户端浏览器的任何更改。当服务器接收到一个请求后,可以决定将该请求...

    (代码)SpringMVC第6讲:请求转发和重定向

    在Spring MVC框架中,请求转发和重定向是两种常见的页面跳转方式,它们在处理用户请求和构建应用程序的流程控制中扮演着重要角色。本文将深入探讨这两种技术,并结合实际的代码示例来阐述其工作原理和使用场景。 ...

    javaServlet请求转发和重定向.pdf

    请求转发和重定向的主要区别在于: * 请求转发只能将请求转发给同一个 Web 应用中的组件,而 sendRedirect() 方法不仅可以重定向到当前应用程序中的其他资源,还可以重定向到其他站点的资源。 * 请求转发过程结束后...

    java 转发和重定向区别及实例代码

    在Java Web开发中,转发(Forward)和重定向...理解这些区别有助于我们在实际开发中合理选择使用转发或重定向,以实现更高效和安全的Web应用。同时,了解这些基础知识也能帮助我们更好地排查和解决问题,提升编程效率。

    Servlet转发与重定向

    Servlet 转发与重定向是 Java Servlet 编程中两个重要的概念,它们都可以让浏览器获得另外一个 URL 所指向的资源,但是它们的内部运行机制有着很大的区别。 RequestDispatcher.forward 方法 RequestDispatcher....

    请求转发与重定向详解代码

    在Web开发中,请求转发(Request Forward)和重定向(Redirect)是两种常见的处理客户端请求的方式,它们在处理用户请求并展示相应页面时起到关键作用。这篇文章将深入讲解这两种技术的工作流程,以及它们在实际应用...

Global site tag (gtag.js) - Google Analytics