重定向与请求转发

很好的一篇文章,让我一看就懂了,转了。

基础的东西,还是要打牢固的
response.sendRedirect(url)
request.getRequestDispatcher(url).forward(request,response)

response.sendRedirect(url) --
重定向到指定
URL
request.getRequestDispatcher(url).forward(request,response) --
请求转发到指定
URL

比如说有人打电话给公司前台找小王,这时候,公司的前台会有两种选择

一:通过转接的方式把电话转到小王那里(forward
二:通过告诉对方小王的电话号码的方式让对方打给小王(sendRedirect

涉及到电话挂断不挂断的问题
就像程序里面一样,请求是否有中断,决定参数是否能传递

response.sendRedirect(url)
跳转到指定的URL地址,产生一个新的request,所以要传递参数只有在url后加参数,如:
url?id=1.
request.getRequestDispatcher(url).forward(request,response)
是直接将请求转发到指定URL,所以该请求能够直接获得上一个请求的数据,也就是说采用请求转发,request对象始终存在,不会重新创建。而 sendRedirect()会新建request对象,所以上一个request中的数据会丢失。
2....

redirect
会首先发一个response给浏览器, 然后浏览器收到这个response后再发一个requeset给服务器, 然后服务器发新的response给浏览器. 这时页面收到的request是一个新从浏览器发来的.

forward
发生在服务器内部, 在浏览器完全不知情的情况下发给了浏览器另外一个页面的response. 这时页面收到的request不是从浏览器直接发来了,可能己经放了数据.

 

补充一些

请求转发:

A.jsp通过request.getRequestDispatcher(“B.jsp”).forward(request,response)语句转发到了B.jsp,而B.jspforward到了C.jsp,这时的request依然是A.jsp中传递过来的request,也就是说请求并没有中断,C.jsp可以通过request获得来自A.jsp的数据。

重定向:

A.jsp通过response.sendRedirect(“B.jsp”)语句转发到了B.jsp,而B.jspforward到了C.jsp,这时的requestB.jsp新建的request,而不是A.jsp中传递过来的request,也就是说请求中断了,C.jsp不能通过request获得A.jsp的数据。

你可能感兴趣的:(C++,c,jsp,浏览器,C#)