Springmvc return 转发跟重定向的区别

3,118 阅读1分钟

假设视图解析器为如下设置。

servlet-context.xml

	<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<beans:property name="prefix" value="/page/" />
		<beans:property name="suffix" value=".jsp" />
	</beans:bean>

假设在登录页面,登录成功后,想跳转到home页面。
以下三种情况,controller分别返回 "home","redirect:home","forward:home"。

返回值 动作 url
"home" 视图解析器会自动添加前缀/page/,后缀/.jsp/。因此转发到/page/home.jsp url不变,还是/login
"redirect:home" 返回相应的url(/home)的请求。重定向到其他controller去处理 url变为/home
"forward:home" 返回相应的url(/home)的请求。转发到其他controller去处理 url不变,还是 /login
@Controller
public class TestLoginController {
	@Autowired
	TestLoginService service;
	
	@RequestMapping("login")
	public String login(Users user, HttpServletRequest request) {
		boolean result = service.login(user);
		if (result) {
			request.getSession().setAttribute("user", user.getUserid());
		}
		
		// return "home";            直接返回视图,也就是 /page/home.jsp。但url不变,还是 /login
		// return "redirect:home";   返回相应的url(/home)的请求。重定向到其他controller去处理。url变为/home
		// return "forward:home";    返回相应的url(/home)的请求。转发到其他controller去处理。但url不变,还是 /login
	}
	
}