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

![image](重定向和请求转发\1003414-20170724194124918-1066381530 (1).png)

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

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

  1. response.sendRedirect(url) 服务器将新url发送给浏览器,浏览器再根据新url请求

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

  2. response.sendRedirect(url)—客户端跳转

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

  3. 跳转到指定url地址后,上个页面的请求会结束,request对象会消亡,数据会消亡

    内部跳转,request对象一直存在

  4. 网址会改变

    以浏览器角度来看,他只是发送一个request然后收到一个response,所以url不变

  5. 传参数需要在url后加参数

    传参数可以操作request对象方法setAttribute(“name”,value)

  6. 可以定位到任意的网址

    只能定位到服务器资源

  7. 可以重定向有frame得到jsp文件

    不可以重定向有frame的jsp文件,可以重定向到有frame的html文件,只有再客户端没有输出时才可以调用forward方法,如果当前页面缓冲区不是空的,那么该句可能不起作用,由于这种提交不会改变url地址,刷新会重复提交


javaweb     

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!