zoukankan      html  css  js  c++  java
  • 请求转发与重定向的区别

    原文地址:https://blog.csdn.net/fox_bert/article/details/80634468
                    
    转发和重定向流程图如下
    请求转发(服务器端转发):
    1、客户端(HTML)向服务器发送一条请求,服务端发现匹配的servlet,并指定它去执行。当这个servlet执行完之后,它要调用getRequestDispacther()方法,返回值类型是RequestDispatcher,设定目标资源jsp(jsp==servlet是服务端)。
    2、调用forward(ServletRequest req,ServletResponse res):该方法是RequestDispatcher接口的方法,将请求从一个servlet转发到服务器上另一个资源jsp(目标资源)(jsp==servlet是服务端)
    3、目标资源jsp(jsp==servlet是服务端)接收转发过来的请求,并将接收数据后的jsp生成HTML返回给客户端
     
    重点转发是服务器行为,因此也是在这个web应用内转发,整个过程是一个请求一个响应。可以看做一个request请求里包含了多个servlet,多个servlet共享的是同一个request,所以他们之间可以通过getAttribute()读取前一个servlet的存值。
    (因为是一次请求,所以地址栏是不会改变的)
    由request执行转发操作,request.getRequestDispacther("url").forward(request,response)
     
    重定向(客户端跳转):
    1、客户端(HTML)发送一个请求到服务器,服务器匹配servlet,这都和请求转发一样。
    2、servlet处理完之后调用了sendRedirect()这个方法,这个方法是response的方法,所以,当这个servlet处理完之后,看到response.senRedirect()方法,立即向客户端返回这个响应,响应行告诉客户端你的目标资源在哪里你必须要再发送一个请求,去访问你的目标资源jsp(jsp==servlet客户端)
    服务器将你当前请求返回,然后给个状态标示给你,告诉你应该去重新请求另外一个url。
    3、紧接着客户端收到这个请求后,立刻发出一个新的请求,去请求你的目标资源jsp(这里两个请求互不干扰,相互独立,在前面request里面setAttribute()的任何东西,在后面的request里面都获得不了)
    4、目标资源jsp把自己生成HTML返回给客户端。
     
    重点重定向是客户端行为,也就注定可以向任何地址发送请求,客户端行为的改变是服务器所给的指示,亦即是response的行为返回,每次请求都是新的行为,request不保留上次的内容。
    (因为是两次请求,所以地址栏会改变)
     
    两者最大区别是运用forward方法只能重定向到同一个Web应用程序中的一个资源。而sendRedirect方法可以让你重定向到任何
      注意
    重定向是不能访问WEB-INF下的资源,WEB-INF的资源只有服务器级别才可以访问。重定向的含义就是服务器把地址发给客户端,让客户端去访问,这样还是在客户端访问的WEB-INF目录,所以是无法访问到WEB-INF目录下的资源。详情请查看Web项目中关于WEB-INF目录的各种问题
     
    ===================================================================
    上面的还是不好理解吗?好吧,下面是白话版场景模拟
    请求转发(服务器端转发):
    1、我(客户端)要找一本书,我告诉图书管理员(服务器端)我要找什么【第一次请求】;
    2、管理员帮我找到;
    3、并将找到的书翻译成我看的懂的文字(HTML)给我(客户端)
    重定向(客户端跳转):
    1、我(客户端)要找一本,我告诉图书管理员(服务器端)我要找什么【第一次请求】;
    2、这个管理员A说这类书不归我管,告诉我让我去找这书所在类别区域的另一个管理员B(重点是另一个管理员)让他给我拿;
    3、我根据管理员A告诉我的位置去找管理员B告诉他我要找一本书【第二次请求】;
    4、管理员B帮很快帮我找到了书并翻译成我看的懂的文字(HTML)给我(客户端)
     
  • 相关阅读:
    Python元组、列表、字典
    测试通过Word直接发布博文
    Python环境搭建(windows)
    hdu 4003 Find Metal Mineral 树形DP
    poj 1986 Distance Queries LCA
    poj 1470 Closest Common Ancestors LCA
    poj 1330 Nearest Common Ancestors LCA
    hdu 3046 Pleasant sheep and big big wolf 最小割
    poj 3281 Dining 最大流
    zoj 2760 How Many Shortest Path 最大流
  • 原文地址:https://www.cnblogs.com/churujianghudezai/p/11421294.html
Copyright © 2011-2022 走看看