• sendRedirect和forward方法的区别


    sendRedirect()和forward()方法的区别

    HttpServletResponse接口的sendRedirect()方法和RequestDispatcher接口的forward()方法都可以利用另外的资源(Servlet、JSP页面或HTML文件)来为客户端进行服务,但是这两种方法有着本质上的区别。

    下面分别给出sendRedirect()方法和forward()方法的工作原理图:

     

    交互过程如下:

    1) 浏览器访问Servlet1;

    2) Servlet1想让Servlet2为客户端服务;

    3) Servlet1调用sendRedirect()方法,将客户端的请求重定向到Servlet2;

    4) 浏览器访问Servlet2;

    5) Servlet2对客户端的请求做出响应。

    我们可以看出,调用sendRedirect()方法,实际上是告诉浏览器Servlet2所在的位置,让浏览器重新访问Servlet2。调用sendRedirect()方法,会在响应中设置Location响应报头。要注意的是,这个过程对于用户来说是透明的,浏览器会自动完成新的访问。而浏览器地址栏显示的URL是重定向之后的URL。

    而forward()方法的交互过程如下:

    1) 浏览器访问Servlet1;

    2) Servlet1想让Servlet2对客户端的请求进行响应,于是调用forward()方法,将请求转发给Servlet2进行处理。

    3) Servlet2对请求请出响应。

    从上图的交互过程可以看出,调用forward()方法,对浏览器来说是透明的,浏览器并不知道为其服务的Servlet已经换成Servlet2了,它只知道发出了一个请求,获得了一个响应。而地址栏显示的URL始终会是原始请求的URL。

    此外,sendRedirect()方法和forward()方法还有一个区别,那就是sendRedirect()方法不但可以在位于同一主机上的不同Web应用程序之间进行重定向,而且可以将客户端重定向到其他服务器上的Web应用程序资源。

  • 相关阅读:
    [bzoj1023][SHOI2008]cactus仙人掌图【仙人掌】
    [bzoj1022][SHOI2008]小约翰的游戏John【博弈论】
    [bzoj1021][SHOI2008]Debt 循环的债务【dp】
    [bzoj1020][SHOI2008]安全的航线flight【迭代】【计算几何】
    [bzoj1019][SHOI2008]汉诺塔【dp】
    [bzoj1018][SHOI2008]堵塞的交通traffic【线段树】
    [bzoj1017][JSOI2008]魔兽地图DotR【dp】
    Kafka API使用
    zookeeper单机模式安装配置
    Hadoop伪分布式安装
  • 原文地址:https://www.cnblogs.com/mzzy/p/4724428.html
Copyright © 2020-2023  润新知