最明显的区别就是:
redirect() 会丢失request的所有信息 它属于页面级的重定向,仅仅让你的浏览器重新访问一个新的url,作为浏览者,能很明显的看到浏览器url地址的变化,这和点击了一个普通的超链接的后果是一样的。
而 RequestDispatcher 的forward() 方法,是转发,需要request 和 response最为参数,就是将用户的请求,连同请求信息等内容,一起转发到服务器的另外一个servlet去处理,它不会丢失request信息。这一过程是服务器内部完成的,作为访问者,是感觉不到了,或者说是透明的,因此访客浏览器的url 是不会发生变化的。
forward是转发,redirect是跳转。相同点都是为了两个组件之间的相互调用。forward的运行原理是服务器端内部的调用,所以它不需要通过浏览器来请求,所url地址不会改变,request的作用范围也没有中断过,它的作用域仍然有效。而redirect是重定向,是服务器发送消息告诉浏览器,让浏览器重新向新的地址请求,所以,url地址是会改变的,由于重新请求了,因而request也中断了,重新请求了,它的作用范围也失效了,放在request里面的信息也随之而清空了。