javaweb中重定向和请求转发

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

先来两张图,方便理解:


    可以看出,重定向时,是服务器向浏览器重新发送了一个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.    response.sendRedirect(url)--跳转到指定url地址后,上个页面的请求会结束,request对象会消亡,数据会消亡。

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

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

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

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

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

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

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

7.    response.sendRedirect(url)--可以重定向有frame的jsp文件

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

面试题:请sendRedirect(),forward的区别是什么?

答:(1)叫法不一样,前者是转发,是一种重定向;后者是转向;

         (2)发生的地点不一样,前者是在浏览器中发生;而后者是发生在web服务器上;

         (3)用法不一样,request.getRequestDispatcher(“/资源名”).forward(request,response),而后者是reponse.sendRedirect("/WEB应用名/资源名");

          (4)可转向的url不一样,前者可去任何一个url;而后者只能去当前的web应用的某个资源;

另:什么是一个http请求呢?
答:只要未停止也未回到浏览器重定向即是一次请求。在forward在不同的servelt间转发;

转载自 https://www.cnblogs.com/chenkeyu/p/7230714.html

猜你喜欢

转载自blog.csdn.net/superman___007/article/details/80514375