spring controller 中默认转发、forward 转发、redirect 转发之间的区别

@controller +返回值String表示跳转页面,必然经过视图解析器,拼接前后缀

默认转发

@RequestMapping("/123")
	public String test(HttpSession session) {
		System.out.println("123");
		return "456";
}

服务器在得到 / 123 的请求后调用 test 方法,输出 123 然后寻找 456.jsp(这里已经配置了视图,全路径为 / WEB-INF/jsp/456.jsp) 文件

forward 转发

@RequestMapping("/123")
	public String test(HttpSession session) {
		System.out.println("123");
		return "forward:456";
}
@RequestMapping("/456")
	public String test1(HttpSession session) {
		System.out.println("456");
		return "456";
}

服务器得到 / 123 的请求后调用 test 方法,输出 123,但是与默认转发不同的是, forward 转发会继续寻找 / 456 的解析而不是寻找 456.jsp 文件,
如果 test1 方法不存在则会报 404 的错误,即使 456.jsp 文件存在

redirect 转发

@RequestMapping("/123")
	public String test(HttpSession session, HttpServletRequest hr) {
		System.out.println("123");
		hr.setAttribute("test", "123");
		session.setAttribute("session", 123);
		return "redirect:456";
	}
@RequestMapping("/456")
public String test1(HttpSession session, HttpServletRequest hr) {
	System.out.println("456");
	System.out.println(hr.getAttribute("123"));
	System.out.println(session.getAttribute("session"));
	return "456";
}

效果和 forward 转发差不多,但是浏览器的地址会被修改为 / 456 结尾,还有 redirect 后原来的 request 中的内容会丢失,session 中的内容不会丢失,而 forward 都不会

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值