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

    请求转发,例如:

    request.getRequestDispatcher("/student_list.jsp").forward(request,response);//(一个请求,一个响应)

    <jsp:forward page="apage.jsp" />
    重定向,例如:

    response.sendRedirect(request.getContextPath + "/student_list.jsp");//(两个请求,两个响应)

    <%response.sendRedirect(request.getContextPath +"new.jsp");%>

    转发过程客户发送http请求----》web服务器接受此请求,匹配Servlet并指定执行--》调用request的getRequestDispacther()方法在容器内部完成请求处理和转发动作----》将目标资源发送给客户端。整个流程都是在服务端完成的,而且是在同一个请求里面完成的,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request,jsp能把结果getAttribute()出来,执行完把结果返回给客户端;它只能在同一个web应用中使用,可以共享request范围内的数据。整个过程是一个请求,一个响应转发过程在服务器端的跳转

    重定向过程:客户发送http请求----》web服务器接受此请求,调用了responsesendRedirect()方法后,发送302状态码响应,对应新的location地址给客户浏览器--》客户浏览器收到这个请求后,发现是302响应,则自动再发送一个新location地址的请求--》服务器根据此请求寻找资源并发送给客户端。在重定向的过程中,可以重定向到任意URL,不能共享request范围内的数据,传输的信息会被丢失。整个过程是两个请求,两个响应。重定向是在客户端的跳转

    重定向开发中适用情况:1.登录一定要用请求重定向,因为这样地址栏会发生变化,这样用户就可以从地址栏看出已转到首页了;
                                2.购物,购买商品后跳转到购物车(若是采用请求转发,因为共用同一个servlet,用户在购物车刷新会再买一个,造成重复购买);

    总结:

           1、转发是在服务器端完成的,重定向是在客户端发生的;

           2、转发的速度快,重定向速度慢;

           3、转发是一个请求,一个响应,可防止服务器处理多次请求,减轻服务器的压力;重定向是两个请求,两个响应;

           4、转发地址栏没有变化,重定向地址栏有变化;

           5、转发必须是在同一台服务器下完成,重定向可以在不同的服务器下完成。

  • 相关阅读:
    LeetCode 811. Subdomain Visit Count (子域名访问计数)
    LeetCode 884. Uncommon Words from Two Sentences (两句话中的不常见单词)
    LeetCode 939. Minimum Area Rectangle (最小面积矩形)
    LeetCode 781. Rabbits in Forest (森林中的兔子)
    LeetCode 739. Daily Temperatures (每日温度)
    三种方式实现按钮的点击事件
    239. Sliding Window Maximum
    14.TCP的坚持定时器和保活定时器
    13.TCP的超时与重传
    12.TCP的成块数据流
  • 原文地址:https://www.cnblogs.com/huangdabing/p/9181101.html
Copyright © 2011-2022 走看看