getRequestDispatcher()与sendRedirect()的区别
作者:互联网
getRequestDispatcher()与sendRedirect()的区别
-
request.getRequestDispatcher()是请求转发,前后页面共享一个request ;
response.sendRedirect()是重新定向,前后页面不是一个request -
RequestDispatcher.forward()是在服务器端运行;
HttpServletResponse.sendRedirect()是通过向客户浏览器发送命令来完成. -
ServletContext.getRequestDispatcher(String url)中的url只能使用绝对路径;
ServletRequest.getRequestDispatcher(String url)中的url可以使用相对路径。因为
ServletRequest具有相对路径的概念;而ServletContext对象无此概念
-
response.sendRedirect(url)跳转到指定的URL地址,产生一个新的request,所以要传递参数只有在url后加参,如www.baidu.com?id=1
request.getRequestDispatcher(url).forward(request,response)是直接将请求转发到指定URL,所以该请求能够直接获得上一个请求的数据,也就是说采用请求转发,request对象始终存在,不会重新创建。而sendRedirect()会新建request对象,所以上一个request中的数据会丢失。
注意:-
sendRedirect(url):会首先发一个response给浏览器, 然后浏览器收到这个response后再发一个requeset给服务器, 然后服务器发新的response给浏览器. 这时页面收到的request是一个新从浏览器发来的.
-
forward 发生在服务器内部, 在浏览器完全不知情的情况下发给了浏览器另外一个页面的response. 这时页面收到的request不是从浏览器直接发来了,可能己经request.setAttribute在request里放了数据.在转到的页面可直接用request.getAttribute获得数据。
-
-
运用forward方法只能重定向到同一个Web应用程序中的一个资源。而sendRedirect方法可以让你重定向到任何
如:sendRedirect("/t1") 表示相对于服务器根路径
网址http://localhost:8080/Test 则提交到 http://localhost:8080/t1
Forward代码中的"/uu"则代表相对与WEB应用的路径
如http://localhost:8080/Test 则提交至http://localhost:8080/Test/t1
-
forward()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件,
forward()无法在后面带参数传递,比如servlet?name=frank,这样不行,可以程序内通过
response.setAttribute("name",name)来传至下一个页面.
重定向后浏览器地址栏URL不变.
标签:浏览器,区别,url,getRequestDispatcher,sendRedirect,request,response 来源: https://www.cnblogs.com/XiaoMingStudy1/p/14523244.html