在设计 web 应用程序的时候, 经常需要把一个系统进行结构化设计, 即按照模块进行划分, 让不同的 Servlet 来实现不同的功能, 例如可以让其中一个 Servlet 接收用户的请求, 另外一个 Servlet 来处理用户的请求. 为了实现这种程序的模块化, 就需要保证在不同的 Servlet 之间可以相互跳转, 而 Servlet 中主要有两种实现跳转的方式: forward 方式与 redirect 方式.
forward 是服务器内部的重定向, 服务器直接访问目标地址的 URL, 把那个 URL 的响应内容读取过来, 而客户端并不知道, 因此, 在客户端浏览器的地址栏中不会显示转向后的地址, 还是原来的地址. 由于在整个定向的过程中用的是同一个 request, 因此, forward 会将 request 的信息带到被定向的 JSP 或 Servlet 中使用.
redirect 则是客户端重定向, 是完全的跳转, 即客户端浏览器会获取到跳转后的地址, 然后重新发送请求, 因此, 浏览器中会显示跳转后的地址. 同时由于这种方式比 forward 方式多了一次网络请求, 所以, forward 效率更高. 需要注意的是, 客户端重定向可以通过设置特定的 HTTP 头或者写 JavaScript 脚本实现.
鉴于以上区别, 一般当 forward 方式可以满足需求时, 尽可能地使用 forward 方式. 但是在有些情况下, 例如, 需要跳转到一个其他服务器上的资源, 则必须使用 redirect 方式.
来源: http://www.bubuko.com/infodetail-3168556.html