SpringMVC工作原理
总体流程图如下:
各个组件或者说模块间是通过DispatcherServlet交互的.
@GetMapping时组合注解,@RequestMapping(method =RequestMethod.GET)的缩写
类似的还有@PostMapping等。默认是使用Get方法
传入的参数体现在控制器类中的具体方法的入参;如
public String getNameById(@RequestParam("id") int id ){
//todo
}
这就从页面传递了id到控制器
@RequestParam( ) 中有name、value、required等,默认不填
Model和ModelMap
SpringMVC内部使用org.springframework.ui.Model接口存储数据模型,他的功能类似util.Map。org.springframework.ui.ModelMap实现Map接口,SpringMVC在调用方法前会创建一个隐含的数据模型,作为模型数据的存储容器,如果处理方法的入参为Map或Model类,SpringMVC会将隐含的引用传递给Map或Model,这样就可以在Map或Model模型中访问所有的数据,可以向模型中添加数据。
@RequestMapping("/addBuniness")
public String addBuniness(Map<String, List<Employee>> map){
List<Employee> em = employeeService.getEmployees();
map.put("employee", em);
return "/business/handleBusiness";
}
上面就会添加从getEmployees方法获取的employee数组,存入模型,在渲染视图的时候会显示出来
如果使用Model
@ModelAttribute
public void addEm(Model model){
model.addAttribute("employee", em);
}
@RequestMapping("/addBuniness")
public String addBuniness(Model model,ModelMap modelMap ,Map map){
return "/business/handleBusiness";
}
上面也可以不用addEm方法,直接
@RequestMapping("/addBuniness")
public String addBuniness(Model model,ModelMap modelMap ,Map map){
model.addAttribute("employee", em);
return "/business/handleBusiness";
}
@ModelAttribute注解先执行addEm
addBusiness方法中Model和ModelMap 以及Map三个对象都已获取到addEm添加的值。
另外还可以使用ModelAndView处理
@RequestMapping("/addBuniness")
public String addBuniness(Map<String, List<Employee>> map){
ModelAndView mv = new ModelAndView();
List<Employee> em = employeeService.getEmployees();
mv.addObject("employee", em);
mv.setViewName("/business/handleBusiness")
return mv;
}
是与上面代码一样的作用。
除了Map Model和RequestParam还有很多别的入参,这个用什么查什么把。