SringMVC工作流程简述
- 第一步:用户发送请求到前端控制器(DispatcherServlet)。
- 第二步:前端控制器(DispatcherServlet)去访问处理器映射器(HandlerMapping)获取相应的url地址。处理器映射器根据url找到具体的后端控制器(Handler),如果生成处理器对象或处理器拦截器则和后端控制器(Handler)一起返回给前端控制器(DispatcherServlet)。
- 第三步:前端控制器(DispatcherServlet)根据返回的后端控制器(Handler)查找到合适的处理器适配器(HandlerAdapter)
- 第四步:处理器适配器(HandlerAdpater)会去执行后端控制器(Handler开发的时候会被叫成Controller) 执行之前会有转换器、数据绑定、校验器等等完成上面这些才会去正在执行后端控制器(Handler)。
- 第五步:后端控制器(Handler)根据执行结果生成ModelAndView对象。
- 第六步:处理器适配器(HandlerAdpater)会将这个ModelAndView返回前端控制器(DispatcherServlet)。前端控制器(DispatcherServlet)会将ModelAndView对象交给视图解析器(ViewResolver)。
- 第七步:视图解析器(ViewResolver)解析ModelAndView对象之后返回逻辑视图。
- 第八步:前端控制器(DispatcherServlet)对逻辑视图进行渲染(数据填充)之后返回真正的物理视图(View)并响应给浏览器。
SpringMVC中常用的注解
-
@Controller
负责注册一个bean 到spring 上下文中 -
@RestController
默认所有的方法都返回 -
@responsebody
ajax的控制器 -
@RequestMapping
注解为控制器指定可以处理哪些 URL 请求 -
@RequestBody
针对的请求type=“application/json ,text/json”,请求数据为json字符串。
该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上
再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上 -
@ResponseBody
该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区 -
@ModelAttribute(必须加name才能save,同时起到RequestParam的效果)
在方法定义上使用 @ModelAttribute 注解:Spring MVC 在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribute 的方法
在方法的入参前使用 @ModelAttribute 注解:可以从隐含对象中获取隐含的模型数据中获取对象,再将请求参数绑定到对象中,再传入入参将方法入参对象添加到模型中 -
@RequestParam
request.getParameter,可以把请求参数传递给请求方法 -
@PathVariable
绑定 URL 占位符到入参 -
@ExceptionHandler
注解到方法上,出现异常时会执行该方法 -
@ControllerAdvice
使一个Contoller成为全局的异常处理类,类中用@ExceptionHandler方法注解的方法可以处理所有Controller发生的异常