• javaweb中重定向和请求转发(response.sendRedirect()和request.getRequestDispatcher(rul).forward(request,response)))的区别


    先来两张图,方便理解:

     

    可以看出,重定向时,是服务器向游览器重新发送了一个response命令,让游览器再次向url2发送请求,以获取url2的资源

    而请求转发时,类似于是服务器自己向自己发了一个跳转,然后将结果直接给游览器,这也是问什么游览器会不改变url地址。下面是具体总结他们的区别

    一、response.sendRedirect(url)-服务器将新url发送给游览器,游览器再根据新url请求

    Request.getRequestDispatcher(url).forward(request,response);请求转发到指定url(服务器内部跳转url然后将结果发给游览器)

    二、response.sendRedirect(url)--客户端跳转

    Request.getRequestDispatcher(url).forward(request,response)--服务器跳转

    三、response.sendRedirect(url)--跳转到指定url地址后,上个页面的请求会结束,request对象会消亡,数据会消亡。

    Request.getRequestDispatcher(url).forward(request,response)--内部跳转,request对象一直存在

    四、response.sendRedirect(url)--网址会改变

    Request.getRequestDispatcher(url).forward(request,response)--以游览器角度来看,他只是发送一个request然后收到一个response,所以url不变

    五、response.sendRedirect(url)--传参数需要在url后加参数。

    Request.getRequestDispatcher(url).forward(request,response)-传参数可以操作request对象方法setAttribute(“name”,value)

    六、response.sendRedirect(url)-可以定位到任意的网址

    Request.getRequestDispatcher(url).forward(request,response)-只能定位到服务器资源

    七、response.sendRedirect(url)--可以重定向有framejsp文件

    Resquest.getRequestDispatcher(url).forward(request,response)-不可以重定向有framejsp文件,可以定向到有framehtml文件,只有在客户端没有输出时才可以调用forward方法,如果当前页面缓冲区不是空的,那么该句可能不起作用,由于这种提交不会改变url地址,刷新会重复提交。

  • 相关阅读:
    hdu 1348【凸包模板】
    hdu 3007【最小圆覆盖-随机增量法模板】
    poj 2187【旋转卡壳模板】
    bzoj 2618【半平面交模板】
    hdu1115【多边形求重心模板】
    bzoj 1006: [HNOI2008]神奇的国度【弦图+LesBFS】
    bzoj 3456: 城市规划【NTT+多项式求逆】
    bzoj 2194: 快速傅立叶之二【NTT】
    bzoj 4555: [Tjoi2016&Heoi2016]求和【NTT】
    bzoj 4842: [Neerc2016]Delight for a Cat【最小费用最大流】
  • 原文地址:https://www.cnblogs.com/jpfss/p/9843361.html
Copyright © 2020-2023  润新知