zoukankan      html  css  js  c++  java
  • Forward和Redirect的区别

    通俗比方

    • 直接转发请求(Forward)就相当于:“A找B借钱,B说没有,B去找C借,借到借不到都会把消息传递给A”;

    • 重定向(间接转发请求)(Redirect)就相当于:"A找B借钱,B说没有,让A去找C借"。

    区别

    • 直接转发请求(Forward),客户端浏览器只发出一次请求,Servlet把请求转发给Servlet、HTML、JSP或其它信息资源,由第2个信息资源响应该请求,两个信息资源共享同一个request对象。

    • 重定向(Redirect),服务器端在响应第一次请求的时候,让浏览器再向另外一个URL发出请求,从而达到转发的目的。它本质上是两次HTTP请求,对应两个request对象。

    分辨技巧

    通过浏览器就可以观察到服务器端使用了那种请求转发方式,当单击某一个超链接时,浏览器的地址栏会出现当前请求的地址,如果服务器端响应完成以后,发现地址栏的地址变了,则证明是重定向。相反,如果地址没有发生变化,则代表的是直接请求转发或者没有转发。

    原理

    直接转发请求(Forward)

    直接转发方式用的更多一些,一般说的请求转发指的就是直接转发方式。Web应用程序大多会有一个控制器。由控制器来控制请求应该转发给哪个信息资源。然后由这些信息资源处理请求,处理完以后还可能转发给另外的信息资源来返回给用户,这个过程就是经典的MVC模式。

    javax.servlet.RequestDispatcher接口是请求转发器必须实现的接口,由Web容器为Servlet提供实现该接口的对象,通过调用该接口的forward()方法到达请求转发的目的,示例代码如下:

    //Servlet里处理get请求的方法
    public void doGet(HttpServletRequest request, HttpServletResponse response){
       //获取请求转发器对象,该转发器的指向通过getRequestDisPatcher()的参数设置
       RequestDispatcher requestDispatcher =request.getRequestDispatcher("资源的URL");
       //调用forward()方法,转发请求      
       requestDispatcher.forward(request,response);    
    }

    上图所示的直接转发请求的过程如下:

    1. 浏览器向Servlet1发出访问请求;
    2. Servlet1调用forward()方法,在服务器端将请求转发给Servlet2;
    3. 最终由Servlet2做出响应。

    重定向(Redirect)

    间接转发方式,有时也叫重定向,它一般用于避免用户的非正常访问。例如:用户在没有登录的情况下访问后台资源,Servlet可以将该HTTP请求重定向到登录页面,让用户登录以后再访问。在Servlet中,通过调用response对象的SendRedirect()方法,告诉浏览器重定向访问指定的URL,示例代码如下:

    //Servlet中处理get请求的方法
    public void doGet(HttpServletRequest request,HttpServletResponse response){
        //请求重定向到另外的资源
        response.sendRedirect("资源的URL");
    }

    上图所示的间接转发请求的过程如下:

    1. 浏览器向Servlet1发出访问请求;
    2. Servlet1调用sendRedirect()方法,将浏览器重定向到Servlet2;
    3. 浏览器向servlet2发出请求;
    4. 最终由Servlet2做出响应。
  • 相关阅读:
    高级(线性)素数筛
    Dijkstra(迪杰斯特拉)算法
    简单素数筛
    【解题报告】 POJ1958 奇怪的汉诺塔(Strange Tower of Hanoi)
    4 jQuery Chatting Plugins | jQuery UI Chatbox Plugin Examples Like Facebook, Gmail
    Web User Control Collection data is not storing
    How to turn on IE9 Compatibility View programmatically in Javascript
    从Javascrip 脚本中执行.exe 文件
    HtmlEditorExtender Ajax
    GRIDVIEW模板中查找控件的方式JAVASCRIPT
  • 原文地址:https://www.cnblogs.com/isxiaoming/p/12518435.html
Copyright © 2011-2022 走看看