• 重定向和请求转发的区别


    请求转发,例如:

    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、转发必须是在同一台服务器下完成,重定向可以在不同的服务器下完成。

  • 相关阅读:
    阿里播放器踩坑记录 进度条重构 video loadByUrl失效解决方案
    liunx 安装nc/netcat centos安装netcat
    jquery实现显示textarea输入字符数
    SQL 时间戳转换为日期
    .Net WebRequest异步请求与WebClient异步请求
    SQL删除多列语句
    jQuery为元素设置css的问题
    关于调试WCF时引发的异常XmlException: Name cannot begin with the '<' character, hexadecimal value 0x3C” on Client Side
    SQL删除指定条件的重复数据,只保留一条
    net.exe use命令的使用
  • 原文地址:https://www.cnblogs.com/huangdabing/p/9181101.html
Copyright © 2020-2023  润新知