response.sendRedirect(url)与request.getRequestDispatcher(url).forward(request,response)的区别
Posted buguge
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了response.sendRedirect(url)与request.getRequestDispatcher(url).forward(request,response)的区别相关的知识,希望对你有一定的参考价值。
response.sendRedirect(url)跳转到指定的URL地址,产生一个新的request,所以要传递参数只有在url后加参数,如:
url?id=1。
request.getRequestDispatcher(url).forward(request,response)是直接将请求转发到指定URL,所以该请求能够直接获得上一个请求的数据,也就是说采用请求转发,request对象始终存在,不会重新创建。而sendRedirect()会新建request对象,所以上一个request中的数据会丢失。
更具体来说就是这样的:
redirect 会首先发一个response给浏览器, 然后浏览器收到这个response后再发一个requeset给服务器,然后服务器发新的response给浏览器。这时页面收到的request是一个新从浏览器发来的。
forward 发生在服务器内部, 在浏览器完全不知情的情况下发给了浏览器另外一个页面的response。这时页面收到的request不是从浏览器直接发来了,可能己经用request.setAttribute在request里放了数据.在转到的页面可直接用request.getAttribute获得数据。
运用forward方法只能重定向到同一个Web应用程序中的一个资源。而sendRedirect方法可以让你重定向到任何URL。
在asp.net里,Response.Redirect和Server.Transfer这二者的区别也如是。
以上是关于response.sendRedirect(url)与request.getRequestDispatcher(url).forward(request,response)的区别的主要内容,如果未能解决你的问题,请参考以下文章
使用response.sendRedirect(url) 重定向的url指定中文get参数,接收页面获取的值为问号
java中关于response.addHeader()与response.sendRedirect()的问题
JSP 中response.sendRedirect后面能传对象吗?如果能传,那怎么实现?
求jsp中response.sendRedirect()实例;
response.sendRedirect()和request.getRequestDispatcher().forward(request,response)使用
SpringBoot使用Filter过滤器处理是否登录的过滤时,用response.sendRedirect()转发报错