转发和重定向
1.转发和重定向的区别
- 转发是一次请求。因此浏览器地址栏上的地址不会发生变化。 重定向是两次请求。因此浏览器地址栏上的地址会发生变化。
- 转发的代码实现:request.getRequestDispatcher("/index").forward(request, response);重定向的代码实现:response.sendRedirect("/webapproot/index");
- 转发是服务器内部资源跳转,由服务器来控制。不可实现跨域访问。 重定向可以完成内部资源的跳转,也可以完成跨域跳转。
- 转发的方式可以访问WEB-INF目录下受保护的资源。 重定向相当于浏览器重新发送了一次请求,在浏览器直接发送的请求是无法访问WEB-INF目录下受保护的资源的。
- 转发原理:
- 假设发送了 /a 请求,执行了 AServlet
- 在AServlet 中通过
request.getRequestDispatcher("/b").forward(request,response);
转发到BServlet - 从AServlet跳转到BServlet是服务器内部来控制的。对于浏览器而言,浏览器只发送了一个 /a 请求。
- 重定向原理:
- 假设发送了 /a 请求,执行了 AServlet
- 在AServlet 中通过
response.sendRedirect("/webapproot/b")
重定向到BServlet - 此时服务器会将请求路径
/webapproot/b
响应给浏览器 - 浏览器会自发的再次发送
/webapproot/b
请求来访问BServlet - 因此对于重定向来说,发送了两次请求,一次是
/webapproot/a
,另一次是/webapproot/b
。
2.在SpringMVC中实现转发和重定向
2.1 SpringMVC实现转发
@Controller
public class IndexController {
@RequestMapping("/a")
public String toA(){
return "forward:/b";
}
@RequestMapping("/b")
public String toB(){
return "b";
}
}
2.2 SpringMVC实现重定向
普通重定向:
@Controller
public class IndexController {
@RequestMapping("/a")
public String toA(){
return "redirect:/b";
}
@RequestMapping("/b")
public String toB(){
return "b";
}
}
跨域重定向:
@RequestMapping("/a")
public String a(){
return "redirect:http://localhost:8080/springmvc2/b";//全路径
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!