SpringMVC底层工作流程
四大核心组件、10个过程。
一、DispatchServlet
二、HandlerMapping
三、HadlerAdaptor
四、ViewResolver
1、浏览器发送HttpRequest请求给DispatchServlet(前端控制器)。
2、DispatchServlet转发对应的HttpRequest请求到HandlerMapping(处理器映射器)。
3、HandlerMapping根据对请求路径,找到负责处理该请求的Controller处理器。并将其封装为处理器执行链(HandlerExecutionChain)返回给DispatchServlet。
4、DispatchServlet根据处理器执行链中的处理器,找到能够执行该处理器的处理器适配器(HandlerAdaptor)。
5、处理器适配器则会调用并执行对应的Controller处理器。
6、Controller将处理结果及要跳转的视图封装到一个ModelAndView中,并返回给处理器适配器。
7、HandlerAdaptor 直接将 ModelAndView 交给 DispatcherServlet ,至此,业务处理完毕。
8、业务处理完毕后,我们需要将处理结果展示给用户。于是DisptcherServlet 调用 ViewResolver,将 ModelAndView 中的视图名称封装为视图对象
9. ViewResolver 将封装好的视图 (View) 对象返回给 DIspatcherServlet
10. DispatcherServlet 调用视图对象,让其自己 (View) 进行渲染(将模型数据填充至视图中),形成响应对象 (HttpResponse),最后结果展示在页面上。
SpringMVC的常用注解
@RequestMapping:请求路由
@PathVariable:
就是要获取url路径中的一部分值,具体用法:与@RequestMapping中的value的占位符:{id}配合使用,在请求路由下的那个业务方法使用@PathVariable动态获取url地址中的一部分值,以便下面的业务方法的逻辑代码使用。
@RequestMapping(value = "/auditTaobao/{id}")
public void doAuditTaobao(@PathVariable Integer id){
taobaoService.auditTaobao(id);
}
@RequestParam:
就是获取到url地址后面?请求携带的那个参数,具体用法:在请求路由下的那个业务方法的方法参数前面使用@RequestParam在以便下面的业务方法的逻辑代码使用。
@ResponseBody
表示该方法的返回结果直接写入HTTP response body中
一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@responsebody后,会直接返回json数据。