JSP转发和重定向之间的区别

JSP转发和重定向之间的区别,jsp,redirect,servlets,forward,Jsp,Redirect,Servlets,Forward,请解释jsp:forward和redirect之间的区别 每种情况下发生了什么? 重定向将响应状态设置为302[1],并将新url设置为位置标题,然后将响应发送到浏览器。然后,浏览器根据http规范向新url发出另一个请求 转发完全在服务器上进行。servlet容器只是将相同的请求转发到目标url,而浏览器不知道这一点。因此,在处理新url时,可以使用相同的请求属性和相同的请求参数。而且浏览器不会知道url已更改(因为它完全发生在服务器上) [1] :这是一个与标准相矛盾的行业实践示例。 H

请解释
jsp:forward
redirect
之间的区别
每种情况下发生了什么?

  • 重定向将响应状态设置为302[1],并将新url设置为
    位置
    标题,然后将响应发送到浏览器。然后,浏览器根据http规范向新url发出另一个请求

  • 转发完全在服务器上进行。servlet容器只是将相同的请求转发到目标url,而浏览器不知道这一点。因此,在处理新url时,可以使用相同的请求属性和相同的请求参数。而且浏览器不会知道url已更改(因为它完全发生在服务器上)


[1] :这是一个与标准相矛盾的行业实践示例。 HTTP/1.0规范(RFC 1945)要求客户端执行 临时重定向(原始描述短语为“移动 但流行的浏览器使用 303的功能参见其他。因此,HTTP/1.1增加了状态 代码303和307,以区分这两种行为。然而, 一些Web应用程序和框架使用302状态代码,就好像它 是303


重定向也比转发慢,因为它必须通过浏览器并等待浏览器发出新请求,从而导致重定向后请求范围对象不可用。

重定向:

  • 用户请求一个资源
  • 发送给用户的响应
  • 这不是请求的资源,这是HTTP代码为302的响应,包含请求资源的URL
  • URL可能与请求的URL相同或不同
  • 客户端浏览器使用新URL再次请求资源,这一次实际资源将发送给用户
  • 转发:


    它是简单地向用户显示请求的资源的过程。它完全发生在服务器端。

    我听过关于重定向和转发的有趣解释。想象一下,你需要朋友的帮助。什么服务都不重要。假设你的朋友帮不了你,但知道谁能帮你

    如果他告诉你:“我不能处理,但我知道谁能处理。这是他的电话号码。打电话给他。”

    如果他告诉你:“没问题”,他会转达你的请求,并亲自给那个人打电话,而不通知你让另一个人来处理你的欲望。然后,您的朋友将得到整理您的愿望的结果并将其发送给您。

    使用一个很好的真实示例,对转发与重定向进行了很好的解释

    牛奶商来了,要求在你家里按月付款。 在这里,房子是一个容器,你是一个存在于这个容器中的资源 容器。Milk man是客户端或浏览器

    他要求每月向你付款,这是他提出的要求 浏览器指向资源A。如果你走进你的房子并询问 母亲(同一容器中的另一个资源B)用于现金和 回来给送牛奶的人,这叫“前进”

    如果你让送牛奶的人在你的房间里跟你妈妈说话 或者你让送牛奶的人和你在他家的父亲说话 office(不同的域),则这称为重定向


    当你提出请求时

    -请求和响应对象已传输。 -url保持不变

    当您将请求重定向到另一个JSP/servlet时

    -请求和响应对象不会传输到新对象。
    -Url更改到新页面的目录。

    对于转发,Url是否更改?我读取的Url将保持不变。是的,它将保持不变,因为浏览器不知道更改(在Spring MVC中),如果我返回一个没有任何前缀的视图名,它是否被视为转发?
    +-------------------------------------------------------------------------+-----------------------------------------------------------------------------+
    |                             Forwards   vs.                              |                                  Redirects                                  |
    +-------------------------------------------------------------------------+-----------------------------------------------------------------------------+
    | ServletContext.getRequestDispatcher(location).forward(request,response) | httpServletResponse.sendRedirect(location)                                  |
    | Communication between pages directly                                    | Communication b/w pages are indirectly by extra round trip from HTTP client |
    | Communication happens within web-container                              | Communication happens outside web-container                                 |
    | Use same Request and Response Object                                    | Use different Request and Response Object                                   |
    +-------------------------------------------------------------------------+-----------------------------------------------------------------------------+