您的位置:首页 > 其它

Servlet中forward和redirect方法的区别

2013-06-30 15:58 267 查看
转发forward方法和重定向redirect方法都可以实现JSP页面直接的跳转,但是实现的本质是不同的。

区别如下:

forward:当服务器请求资源时,会直接访问目标URL路径,把那个URL路径的响应内容读取过来,然后将其发送给浏览器,浏览器并不知晓响应的内容是从哪儿来的,因此他的地址栏中仍然是原来的地址。另外,转发是web应用程序内部进行的,可以访问web应用程序所设定的内部目录,例如WEB-INF目录下的内容,只能是web应用程序内部进行访问,并不能通过其他的web应用程序来访问该目录下的内容。

 

redirect:是指服务端根据逻辑发送一个状态码,告诉浏览器重新去请求那个地址,一般来说,浏览器会用刚才所有的请求参数重新请求,因此,session和request中的参数都是可以获取到的;而web应用程序会要求客户端浏览器重新发送请求地址,客户端此时会重新连接到指定的URL地址,因此浏览器的地址会出现重新导向的信息,重新导向后的请求由浏览器进行相应的转发,因此不能访问web应用程序下的隐藏目录,例如WEB-INF的地址,就不能进行访问,只有访问web应用程序下的其他地址。

综上所述:

forward仅仅是容器中控制权的转换,客户端浏览器的地址不会显示出转向后的地址,他不会改变request的值,如果下个页面希望获取到某一信息的话,可以在该页面中设置Request.setAttribute(),这样就可以通过request来获取信息。
redirect则是完全的跳转,浏览器会得到跳转后的地址,并且重新发送请求并且连接到该URL地址,这样浏览器会得到请求后的地址。
相比较而言,forward更加高效,如果forward可以满足条件的话就尽量使用forward,这样也可以隐藏实际的连接。当然有时候需要跳转到其他服务器的资源,则必须使用redirect方法。
由此可知,两者之间的区别可从以下四个方面进行概括:
(1)地址栏的变化:forward地址不变,而redirect地址栏变
(2)数据共享:forward在前后转发之间可以共享request中数据,而redirect不能共享数据。
(3)运用的场景:forward一般用于登录,根据角色转发到不同的模块,而redirect一般用于用户注销或者返回主页面或者跳转到其他网站等。
(4)效率:forward的效率更高。
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息