在做SSM项目中, 在编写Controller层代码的返回值你可能写过return “login”,或者是 return “redirect:/user/login.html” , 如下代码

    1. @Controller
    2. @RequestMapping("/user")
    3. public class UserController {
    4. private Logger logger = Logger.getLogger(UserController.class);
    5. @Resource
    6. private UserService userService;
    7. @Resource
    8. private RoleService roleService;
    9. // 登录功能
    10. @RequestMapping(value = "/login.html")
    11. public String login(){
    12. logger.debug("UserController welcome SMBMS==================");
    13. return "login";
    14. }
    15. // 登录功能
    16. @RequestMapping(value = "/dologin.html",method = RequestMethod.POST)
    17. public String doLogin(@RequestParam String userCode, @RequestParam String userPassword, HttpServletRequest request, HttpSession session){
    18. logger.debug("doLogin====================================");
    19. //调用service方法,进行用户匹配
    20. User user = userService.login(userCode,userPassword);
    21. //如果用户为空
    22. if(null == user){
    23. throw new RuntimeException("用户名不存在!");
    24. }else if (null != user && !user.getUserPassword().equals(userPassword)){
    25. throw new RuntimeException("密码输入错误!");
    26. }else {
    27. //放入session
    28. session.setAttribute(Constants.USER_SESSION, user);
    29. //页面跳转
    30. return "redirect:/user/main.html";
    31. }
    32. }
    33. //实现页面跳到首页
    34. @RequestMapping(value="/main.html")
    35. public String main(HttpSession session){
    36. //判断session是否为空
    37. if(session.getAttribute(Constants.USER_SESSION) == null){
    38. return "redirect:/user/login.html";
    39. }
    40. return "frame";
    41. }

    其实代码可以略过,你只需理解加redirect的意义是什么就行!

    第一点
    直接使用return “login”会被当成逻辑视图名处理, 这仅仅是进行服务端的页面跳转而已,并非客户端重新发送的url请求。

    第二点
    若想进行重定向操作,就需要加”redirect“前缀,它的意义在于SpringMVC会为它进行特殊处理,将”redirect“当作指示符,其后的字符串作为URL处理,比如上述代码”redirect:/user/main.html”,会让浏览器重新发送一个新的请求/user/main.html,从而进入控制器的main()处理方法中,当然main()方法中也可加入其他的一些业务处理逻辑后再进行页面跳转。