概念
请求转发:是指服务器内部的页面跳转,即在服务器端完成跳转过程,客户端浏览器感知不到这一过程。
重定向:是指服务器向客户端浏览器发送特殊的响应,让浏览器再向新的 URL 发送请求,实现页面跳转。
使用方法
请求转发
request.getRequestDispatcher("/RequestDemo6").forward(request,response);
重定向
response.sendRedirect("/path/to/destination");
区别
访问外部资源:
请求转发不能访问外部资源(因为服务器不能访问其他的服务器)
重定向可以访问外部资源(因为本服务器通过响应告诉客户端重新向其他服务器发送请求)
访问受保护的页面:
请求转发可以访问受保护的页面(因为转发是服务器内部的跳转)
重定向不可以访问受保护的页面(因为客户端不能直接访问受保护文件夹里的资源)
实现方式:
请求转发是服务器内部完成的,浏览器不知道具体页面位置。
重定向是服务器发送给浏览器的一个特殊响应,让浏览器发起新的请求。
地址栏:
请求转发可以共享同一个请求对象,因此可以在转发前后共享数据。
重定向不能共享同一个请求对象,因为它实际上是两次请求过程。
应用场景:
请求转发适合在同一个应用内部进行页面跳转,保持地址栏不变,并且可以共享数据。
重定向适合在不同应用之间进行跳转,或者需要更改浏览器地址栏显示的情况下。