forward
和redirect
是在Java Servlet中用于页面跳转的两种不同方式,在细节上存在着许多不同。
其中,最本质的区别是他们的调用者不同
forword(转发)
是服务器端的跳转方式,它在服务器内部进行页面的跳转。
redirect(重定向)
是客户端的跳转方式,它通过发送特殊的HTTP响应头给浏览器,告诉浏览器去请求新的URL地址
由于二者的使用者不同,所以在使用时也存在以下几点区别
- URL地址栏:
forword是由当前的Servlet转发给另一个Servlet、JSP页面或静态资源客户端浏览器不知道发生了实际的跳转,URL地址不会改变
redirect通过发送特殊的HTTP响应头给浏览器,告诉浏览器去请求新的URL地址,URL地址会改变 - 请求次数:
forword只有一次请求
redirect是两次请求 - 路径:
forword是服务器发起的,不需要加虚拟目录
redirect是有客户端发起的,需要加虚拟目录才能访问到 - 数据共享:
forword只有一次请求,所以可以使用request对象进行共享数据
redirect有两次请求,使用无法使用request对象共享数据
总结:
选择使用哪种方式取决于具体的需求和场景。如果是在同一个项目内部进行页面跳转并需要共享数据,则可以使用forward
;如果需要跳转到其他网站或处理表单重复提交等情况,则可以使用redirect