转发和重定向
在控制器内部处理请求的方法中,默认返回字符串时的处理方式是转发,转发的值是view组件的名称,比如return "login",实质上会根据视图解析器(ViewResolver)得到最终负责显示的页面,而通过return redirect:路径这样的语法表示重定向,在redirect:右侧的内容是路径,这个路径通常使用相对的路径,是以当前客户端的地址栏中的路径为标准进行参考,
例如当前的地址为:http://localhost:8080/Project/user/reg,然后return "redirect:login",则会重定向到http://localhost:8080/Project/user/login,
如果return "redirect:/main/index"或者return "redirect:../main/index",则会重定向到http://localhost:8080/Project/main/index
forward:
不添加任何字段,那么spring中默认的是转发,比如return login,那么这个会经过视图解析器进行解析,跳转到指定的视图。但是如果添加了forward,那么就不经过视图解析器,而是直接进行跳转,我们一般都是转发到controller中的方法,比如return forward:../user/showLogin.do
redirect:
重定向 : return "redirect:login.do"
返回的是一个Controller方法的路径,而不是一个view,这个不会经过视图解析器,而是直接跳转
实例:
@RequestMapping(value = "login")
public String login(String name,String pwd,Model model,HttpSession session) {
if (name.equals("srd")&&pwd.equals("123")) {
session.setAttribute("name", name);
return "redirect:/main"; //重定向到main这个控制方法,main对应的就是转发到main.jsp
}else {
model.addAttribute("mes", "账号密码错误");
return "login";
}
}
@RequestMapping(value = "main")
public String toMain() {
return "