转发和重定向的区别
-
转发是一次请求。因此浏览器地址栏上的地址不会发生变化。
-
重定向是两次请求。因此浏览器地址栏上的地址会发生变化
-
转发的代码实现:request.getRequestDispatcher(“/index”).forward(request,response);
-
重定向的代码实现:response.sendRedirect(“/webapproot/index”);
-
转发是服务器内部资源跳转,由服务器来控制。不可实现跨域访问。
-
重定向可以完成内部资源的跳转,也可以完成跨域跳转
-
转发的方式可以访问WEB-INF 目录下受保护的资源
-
重定向先锋岗与浏览器重新发送了一次请求,在浏览器直接发送的 请求是无法访问WEB-INF目录下受保护的资源的。
-
转发原理:
- 假设发送了 /a 请求,执行了 AServlet
- 从 AServlet 中通过
request.getRequestDispatcher("/b").forward(request,response);
转发到 BServet - 从 AServlet 跳转到 BServlet 是服务器内部来控制的。对于浏览器而言,浏览器只发送了一个 /a 请求
-
重定向原理:
- 假设发送了 /a 请求,执行了 AServlet
- 从 AServlet 中通过
response.sendRedirect("/webapproot/b")
重定向到 BServlet - 此时服务器会将请求路径
/webapproot/b
响应给浏览器 - 浏览器会自发的再次发送
/webapproot/b
请求来访问 BServlet - 因此对于重定向来说,发送了两次请求,一次是
/webapproot/a
,另一次是/webapproot/b
在 SpringMVC 里面怎么完成转发???