SpringMVC原理
1.简介
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts 2(一般老项目使用)等。
2.工作原理图
2.1 MVC模式原理图
2.1.1 流程解析
-
客户发起请求到控制层
-
控制层将请求发送到模型层进行业务处理
-
模型层将处理的结果发送回控制层
-
控制层将结果进行视图渲染发送到视图层,显示页面
2.1.2 模式解析
M-Model 模型(模型层:处理业务逻辑,由javaBean构成,service+dao+entity)
V-View 视图(视图层:做界面的展示 ,jsp,html……)
C-Controller 控制器(控制层:接收客户端发来的请求,调用模型层处理业务逻辑,将处理结果发送给视图层)
2.2 SpringMVC模式原理图
2.2.1 流程解析
- 用户发起请求到前端控制器DispatchServlet。
- 前端控制器DispatchServlet请求处理器映射器HandlerMapping,通过xml配置或者注解的方式找到对应的Handler。
- 找到Handler后,处理器映射器HandlerMappering像前端控制器DispatchServlet返回执行链HandlerExecutionChain。
- 前端控制器DispatchServlet调用处理器适配器HandlerAdapter。
- 处理器适配器HandlerAdapter按照特定规则执行Handler进行相关业务操作。
- 执行Handler进行相关业务操作后结果返回ModelAndView给处理器适配器HandlerAdapter。
- 处理器适配器HandlerAdapter返回ModelAndView给前端控制器DispatchServlet。
- 前端控制器DispatchServlet请求视图处理器ViewResolver进行视图解析。
- 视图处理器ViewResolver将处理结果返回给前端控制器DispatchServlet。
- 前端控制器DispatchServlet对视图进行渲染。
- 前端控制器DispatchServlet将渲染后的视图返回给客户。
2.2.2 组件
2.2.2.1 前端控制器DispatchServlet(不需要工程师开发,由框架提供)
DispatcherServlet主要用作职责调度工作,本身主要用于控制流程,主要职责如下:
-
文件上传解析,如果请求类型是multipart将通过MultipartResolver进行文件上传解析。
-
通过HandlerMapping,将请求映射到处理器(返回一个HandlerExecutionChain,它包括一个处理器、多个HandlerInterceptor拦截器)。
-
通过HandlerAdapter支持多种类型的处理器(HandlerExecutionChain中的处理器)。
-
通过ViewResolver解析逻辑视图名到具体视图实现。
-
本地化解析。
-
渲染具体的视图等。
-
如果执行过程中遇到异常将交给HandlerExceptionResolver来解析。
2.2.2.2 处理器映射器HandlerMapping(不需要工程师开发,由框架提供)
根据url查找Handler,通过xml配置或者注解的方式找到对应的Handler。
2.2.2.3 处理器适配器HandlerAdapter
按照特定规则(HandlerAdapter要求的规则)去执行Handler,通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。
2.2.2.4 处理器Handler(需要工程师开发)
注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler
Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。
由于Handler涉及到具体的用户业务请求,所以一般情况需要工程师根据业务需求开发Handler。
2.2.2.5 视图解析器ViewResolver(不需要工程师开发,由框架提供)
进行视图解析,根据逻辑视图名解析成真正的视图(view),ViewResolver负责将处理结果生成View视图,ViewResolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。springmvc框架提供了很多的View视图类型,包括:jstlView、freemarkerView、pdfView等。
一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由工程师根据业务需求开发具体的页面。
2.2.2.6 视图View
View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf…)