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还有很多别的入参,这个用什么查什么把。

posted @ 2019-04-28 16:21  clay_ace  阅读(134)  评论(0编辑  收藏  举报