ModelAndView

  1. ModelAndView中的addObjective方法设置的属性,默认存放在当前的请求中
  2. 默认ModelAndView使用请求转发(forward)至界面
  3. 重定向new ModelAndView("redirect:/index.jsp")
    @GetMapping("/view")
      public ModelAndView showView(Integer userId){
    //        ModelAndView mav = new ModelAndView("redirect:/view.jsp");
          ModelAndView mav = new ModelAndView();
          mav.setViewName("/um/view.jsp");
          User user = new User();
          if(userId == 1){
              user.setUsername("lily");
          }else if(userId == 2){
              user.setUsername("smith");
          }else if(userId == 3){
              user.setUsername("lina");
          }
          mav.addObject("u" , user);
          return mav;
      }

4.请求转发和重定向的区别
请求转发:
- 地址上的url显示的是请求Servlet的地址
- 请求次数只有一次
- 只能跳转到自己的工程上
- 效率高
重定向:
- 地址上的url显示的是资源的路径地址
- 请求次数最少有两次。服务器在第一次请求后,会返回一个地址,浏览器根据这个地址,执行第二次的访问。
- 可以跳转到任意路径上,不是自己的工程也可以
- 效率低一些

5.请求转发使用的时机上,内部的controller处理逻辑和我们跳转页面之间没有直接的关系的时候
6.相对路径和绝对路径
(1)绝对路径:"/um/view.jsp"以斜杠开头的全是绝对路径。
(2)相对路径:相对路径相对的谁呢,其实是当前controller层所在的位置。工程在启动的过程中会将资源copy到webapp中,比如我们把这个controller层@RequestMapping全局定义为/um,那么就会在webapp中创建一个um的文件夹。是相对于这个路径来讲的。
7.另一种常用的手段

 //String与ModelMap
    //Controller方法返回String的情况
    //1. 方法被@ResponseBody描述,SpringMVC直接响应String字符串本身
    //2. 方法不存在@ResponseBody,则SpringMVC处理String指代的视图(页面)
    @GetMapping("/xxxx")
//    @ResponseBody
    public String showView1(Integer userId , ModelMap modelMap){
        String view = "/um/view.jsp";
        User user = new User();
        if(userId == 1){
            user.setUsername("lily");
        }else if(userId == 2){
            user.setUsername("smith");
        }else if(userId == 3){
            user.setUsername("lina");
        }
        modelMap.addAttribute("u", user);
        return view;
    }