Spring boot mvc HelloWord

Spring MVC是目前主流的实现MVC设计模式的企业级开发框架,Spring框架的一个子模块,无需整合,开发起来更加便捷。

spring mvc 是什么?

在web模型中,MVC是一种很流行的框架,通过把Model,View,Controller分离,把较为复杂的web应用分成逻辑清晰的几部分,是为了简化开发,减少出错。还是为了组内开发人员之间的配合。总之就是一种分层工作的办法。

Spring MVC就是对这套流程的封装,屏蔽了很多底层代码,开放出接口,使开发者更加轻松和便捷的开发出web应用

springMVC 原理

spring_mvc_principle.png

绿色填充模块为springMVC的组件

  • 前端控制器 DispatcherServlet

    作用:接收请求,响应,也是中央转发器
    
  • 处理器映射器 HandlerMapping

    作用:根据url查找Handler
    
  • 处理器适配器 HandlerAdapter

    作用:按照特定规则去执行Handler,规则即HandlerAdapter要求的规则
    
    注意:编写Handler时需要按HandlerAdapter要求去编写,这样适配器才可以去正确执行Handler
    
  • 视图解析器 ViewResolver

    作用:根据逻辑视图解析成真正的视图(view)
    
  • 视图 View

    View 是一个接口,实现类支持不同的view类型(jsp,FreeMarker,pdf,excel...)
    

spring mvc 核心组件

  • DispatcherServlet:前置控制器,是整个流程控制的核心,控制其他组件的执行,进行统一调度,降低组件之间的耦合性,相当于总指挥。

  • Handler:处理器,完成具体的业务逻辑,相当于Servlet和Action。

  • HandlerMapping:DispatcherServlet接受请求之后,通过HandlerMapping将不同的请求映射到不同的Handler。

  • HandlerInterceptor:处理器拦截器,是一个接口,如果需要完成一些拦截器处理,可以实现该接口。

  • HandleExecutionChain:处理器执行链,包括两部分内容:Handler和HanlerInterceptor(系统会有一个默认HanlerInterceptor,如果需要各位设置拦截,可以添加拦截器)。

  • HandlerAdapter:处理器适配器,Handler执行业务方法之前,需要进行一系列的操作包括表单数据的验证、数据类型的转换、将表单数据分装到javabean等。这些操作都是由HandlerAdapter完成,开发者注意力集中在业务逻辑的处理上,DispatcherServlet通过HandlerAdapter执行不同的Handler.

  • ModelAndView: 装载了模型数据和视图信息,作为Handler的处理结果,返回给DispatcherServlet。

  • ViewResolver:视图解析器,DispatcherServlet通过它将逻辑视图解析为物理视图。

Spring MVC的工作流程

  • 客户端请求被DispatcherServlet接受。

  • 根据HandlerMapping映射到Handler

  • 生成Handler和HandlerInterceptor。

  • Handler和HandlerInterceptor以HandleExecutionChain的形式一并返回给DispatcherServlet。

  • DispatcherServlet通过HandlerAdapter调用Handler的方法完成业务逻辑处理。

  • Handler返回ModelAndView给DispatcherServlet。

  • DispatcherServlet将获取的ModelAndView对象传给ViewResolver视图解析器,将逻辑视图解析为物理视图View。

  • ViewResolver返回一个View给DispatcherServlet。

  • DispatcherServlet根据View进行视图渲染(将模型数据Model填充到视图View中)。

  • DispatcherServlet将渲染后的结果上传服务器。

SpringMVC流程非常复杂,实际开发起中很简单,因为大部分的组件不需要开发者创建、管理,只需要通过配置文件的方式完成配置即可。真正需要开发者进行处理的只有Handler、View。

代码示例

spring boot mvc helloword