1. 转发 (Forward)
转发是在服务器内部完成的一种机制,它允许一个Servlet将请求转发给另一个资源(Servlet、JSP页面或其他资源)。转发过程中,客户端不会察觉到有任何改变,因为转发是在服务器端完成的,客户端只接收到了一次响应。
示例:
特点
- 客户端浏览器地址栏中的URL不变。
- 请求转发过程中,转发前后的请求和响应对象(HttpServletRequest和HttpServletResponse)是同一个对象。
- 可以在转发的目标资源中获取转发前请求的数据(例如request作用域中的数据)。
- 转发速度快,因为只涉及到一次网络往返。
2. 重定向 (Redirect)
重定向是指服务器告诉客户端去请求一个新的URL,客户端会发起一个新的HTTP请求。因此,客户端浏览器的地址栏中的URL会发生变化。
示例:
特点
- 客户端浏览器地址栏中的URL会发生改变。
- 重定向前后是两个不同的请求和响应对象。
- 由于是新的请求,所以重定向前请求的数据(比如request作用域中的数据)不能被重定向后的新请求访问。
- 重定向相对转发来说较慢,因为它涉及到了两次网络往返。
总结区别:
转发:服务器内部操作,客户端不可见,且可以共享同一个请求对象,适合于数据处理后将请求交给另一个资源处理的情况。
重定向:客户端可见,产生新的请求,适用于需要改变客户端访问路径的情况。