ModelAndView
- ModelAndView中的addObjective方法设置的属性,默认存放在当前的请求中
- 默认ModelAndView使用请求转发(forward)至界面
- 重定向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; }