大多数的面试题几乎都会这个问题今天总结一下
forward是服务器内部重定向,程序在接到请求重新定向到另一个程序,客户机不知道。
而sendRedirect()是服务器端接受请求后发送一个状态头给客户,客户再一次请求。
它们之间的区别大致有一下几点
1.地址栏显示
forward是服务器请求资源,服务器直接访问目标地址的url,把那个url的响应内容读取
过来,由于浏览器不知道服务器发送的内容从何而来,所以其地址还是原来的地址。
sendRedirect是服务根据逻辑,发送一个状态码,告诉浏览器去请求那个地址,所以
地址栏是显示新的url.。
2.从数据共享来说
forward:转发页面和转发到的页面数据共享request作用域里面的数据。
sendRedirect:是不共享数据的。
3.请求资源的范围
sendRedirect:不仅可以重定向到当前应用程序的其他资源,还可以到同一个站点的
其他应用程序的资源,甚至使用绝对url重定向到其他站点的资源。
forward:只能用于同一个web应用程序内部的资源请求,是服务器内部的一种操作。
redirect是服务器通知客户端,让客户端重新发起请求。
4.使用地方
forward:一般用于用户登录,根据角色转发到相应的模块。
redirect:一般用户注销登录,返回主页面或跳转到其他的网站等。
5.效率
forward:由于是服务器内部的一种操作,所以效率较高。
redirect:需要经过两次客户端和服务端的网络通信所以效率较慢。