【SpringMVC】(2)初始化和流程
MVC设计概述
(1)SpringMVC架构
(1.1)早期的MVC模型
(1.2)现在SpringMVC架构
传统的模型层Model被拆分为业务层Service和持久层Dao。在service下可以通过Spring的声明式事务操作数据访问层,还可以在service层访问NoSQL。
SpringMVC 框架是以请求为驱动,围绕 Servlet 设计,将请求发给控制器,然后通过模型对象,分派器来展示请求结果视图。其中核心类是 DispatcherServlet,它是一个 Servlet,顶层是实现的Servlet接口。
SpringMVC的最大特点就是结构松散,例如可以使用各种视图,包括JSON、JSP、XML、PDF等等,所以能够满足手机端、web端和平板电脑端的各类请求。
(2)SpringMVC组件和流程
简单来说:
- 客户端发送请求—>
- 前端控制器 DispatcherServlet 接受客户端请求(拦截HTTP发送过来的请求) —>
- 找到处理器映射 HandlerMapping, 解析请求找到对应的 Handler—>
- 处理适配器HandlerAdapter 会根据 Handler 来调用真正的处理器Controller层开始处理请求,并处理相应的业务逻辑 —>
- 处理器Controller层返回一个模型视图 ModelAndView —>
- 视图解析器ViewResolver进行解析(如果是逻辑视图就解析,如果不是就直接进行视图渲染数据模型) —>
- 返回一个视图对象—>
- 前端控制器 DispatcherServlet 渲染数据(Moder)—>
- 将得到视图对象返回给用户
如下图所示:
上图的一个笔误的小问题:Spring MVC 的入口函数也就是前端控制器 DispatcherServlet 的作用是接收请求,响应结果。
(2.1)流程说明(重要)
- 客户端(浏览器)发送请求,直接请求到 DispatcherServlet。
- DispatcherServlet 根据请求信息调用 HandlerMapping,解析请求对应的 Handler。
- 解析到对应的 Handler(也就是我们平常说的 Controller 控制器)后,开始由 HandlerAdapter 适配器处理。
- HandlerAdapter 会根据 Handler 来调用真正的处理器开处理请求,并处理相应的业务逻辑。
- 处理器处理完业务后,会返回一个 ModelAndView 对象,Model 是返回的数据对象,View 是个逻辑上的 View。
- ViewResolver 会根据逻辑 View 查找实际的 View。
- DispaterServlet 把返回的 Model 传给 View(视图渲染)。
- 把 View 返回给请求者(浏览器)
(2.2)SpringMVC 重要组件说明
(1)前端控制器DispatcherServlet(不需要工程师开发),由框架提供(重要)
作用:Spring MVC 的入口函数。接收请求,响应结果,相当于转发器,中央处理器。有了 DispatcherServlet 减少了其它组件之间的耦合度。用户请求到达前端控制器,它就相当于mvc模式中的c,DispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,DispatcherServlet的存在降低了组件之间的耦合性。
(2)处理器映射器HandlerMapping(不需要工程师开发),由框架提供
作用:根据请求的url查找Handler。HandlerMapping负责根据用户请求找到Handler即处理器(Controller),SpringMVC提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。
(3)处理器适配器HandlerAdapter
作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler 通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。
(4)处理器Handler(需要工程师开发)
注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。 由于Handler涉及到具体的用户业务请求,所以一般情况需要工程师根据业务需求开发Handler。
(5)视图解析器View resolver(不需要工程师开发),由框架提供
作用:进行视图解析,根据逻辑视图名解析成真正的视图(view) View Resolver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。 springmvc框架提供了很多的View视图类型,包括:jstlView、freemarkerView、pdfView等。 一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由工程师根据业务需求开发具体的页面。
(6)视图View(需要工程师开发)
View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf…)
注意:处理器Handler(也就是我们平常说的Controller控制器)以及视图层view都是需要我们自己手动开发的。其他的一些组件比如:前端控制器DispatcherServlet、处理器映射器HandlerMapping、处理器适配器HandlerAdapter等等都是框架提供给我们的,不需要自己手动开发。