SpringMVC主要包含以下组件
- DispatcherServlet:作为前端控制器,整个流程控制的中心,控制其它组件执行,统一调度,降低组件之间的耦合性,提高每个组件的扩展性。
- HandlerMapping:通过扩展处理器映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。
- HandlAdapter:通过扩展处理器适配器,支持更多类型的处理器。
- ViewResolver:通过扩展视图解析器,支持更多类型的视图解析,例如:jsp、freemarker、pdf、excel等。
- Controller :控制器,处理业务请求。
- View :视图,jsp、freemarker、pdf等等不多解释。
SpringMVC工作原理图
案例分析
第1步-浏览器请求
第2、3步-找到对应Controller
第4、5步-解析视图对象,返回浏览器
springMVC工作流程
- 用户发送给请求到前端控制器DispatcherServlet。
- DispatcherServlet接收到请求后会调用HandlerMapping处理器映射器。
- 处理器映射器会根据请求的url找到具体的处理器(注解或者xml配置),生成处理器对象以及处理器拦截器(若有),返回给DispatcherServlet。
- DispatcherServlet调用HandlerAdapter处理器适配器,告诉处理器适配器应该要去执行哪个Controller
- HandlerAdapter经过适配调用具体的处理器(Controller)
- Controller执行完成返回ModelAndView(数据和视图)
- HandlerAdapter将Controller执行结果的ModelAndView返回给DispatcherServlet
- DispatcherServlet将ModelAndView传给ViewReslover视图解析器
- 视图解析器解析后返回具体的View(真正的视图)给DispatcherServlet
- DispatcherServlet根据View进行渲染视图(将模型数据填充到视图)
- DispatcherServlet将结果响应给用户
组件说明
- 前端控制器DispatcherServlet(不需要工程师开发),由框架提供。
作用:接收请求,响应结果,相当于转发器,中央处理器。DispatcherServlet减少了其它组件之间的耦合度。
用户请求到达前端控制器,它就相当于MVC模式中的C,DispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,DispatcherServlet的存在降低了组件之间的耦合性。 - 处理器映射器HandlerMapping(不需要工程师开发),由框架提供.
作用:根据请求的url查找Handler。
HandlerMapping负责根据用户请求找到Handler即处理器,springmvc提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。 - 处理器适配器HandlerAdapter
作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler。
通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。 - 处理器Handler(需要工程师开发)。
注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler。Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。由于Handler涉及到具体的用户业务请求,所以一般情况需要工程师根据业务需求开发Handler。 - 视图解析器View resolver由框架提供
作用:进行视图解析,根据逻辑视图名解析成真正的视图(view)
View Resolver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。 springmvc框架提供了很多的View视图类型,包括:jstlView、freemarkerView、pdfView等。
一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由工程师根据业务需求开发具体的页面。 - 视图View(需要工程师开发jsp…)。
View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf…)。
顺便补充一下MVC:
M:model模型,即业务逻辑,entity+service+dao
V:view视图,即展示页面,html,jsp
C:controller控制器,接受请求,调用模型,返回视图