请求转发forward()和重定向redirect()是Servlet处理完数据后进行页面跳转的两种主要方式。
转发:forward()是使用RequestDispatcher接口中的forward()方法来实现,需要request 和 response作为参数,就是将用户的请求,连同请求信息等内容,一起转发到服务器的另外一个servlet去处理,它不会丢失request信息。这一过程是服务器内部完成的,作为访问者,是感觉不到了,或者说是透明的,因此访客浏览器的url 是不会发生变化的。
重定向:重定向redirect()是通过HttpServletResponse对象的sendRedirect()来实现,该方法相当于浏览器重新发送一个请求 response.sendRedirect(path); 会丢失request的所有信息, 它属于页面级的重定向,仅仅让你的浏览器重新访问一个新的url,作为浏览者,能很明显的看到浏览器url地址的变化,这和点击了一个普通的超链接的后果是一样的。
两者的选择:
forward()方法更加高效, 在forward()方法可以满足需要时, 尽量使用 forward()方法, 并且, 这样也有助于隐藏实际的链接。 在有些情况下, 比如, 需要跳转到一个其它服务器上的资源, 则必须使用。