1 SpringMVC
1.1 分层设计
在大型软件系统设计时,业务一般会相对复杂,假如所有业务实现的代码都纠缠在一起,会出现逻辑不清晰、可读性差,维护困难,改动一处就牵一发而动全身等问题。为了更好解决这个问题就有了我们现在常说的分层架构设计。
**分层设计的本质其实就是将复杂问题简单化,首先基于单一职责原则(SRP-Single responsibility principle)让每个对象各司其职,各尽所能。然后再基于“高内聚,低耦合”的设计思想实现相关层对象之间的交互。这样可以更好提高程序的可维护性和可扩展性,**例如生活中的楼宇设计,生日蛋糕设计,企业的组织架构设计等。
1.2 MVC设计思想
MVC(Model–view–controller)是软件工程中的一种软件架构模式,基于此模式把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。目的是通过这样的设计使程序结构更加简洁、直观,降低问题的复杂度。其中MVC各个组成部分为:
-
视图(View)- UI设计人员进行图形界面设计,负责实现与用户交互。
-
控制器(Controller)- 负责获取请求,处理请求,响应结果。
-
模型(Model) - 实现业务逻辑,数据逻辑实现。
思考:海底捞中的MVC?(菜单-View,服务员-Controller,厨师-Model)
1.3 JavaEE组件应用中的MVC设计
在JavaEE技术体系中,基于MVC设计思想,各个核心组件的应用关系如图所示:
在上图中,Servlet充当MVC中的Controller,负责调用model处理业务,负责转换或重定向某个页面,在页面上呈现数据。
1.4 Spring框架中Web模块的MVC设计
Spring MVC 是Spring 框架中基于MVC设计思想,实现的一个用于处理Web请求的模块。这个模块封装了对Servlet的技术的应用,简化了程序员对请求和响应过程中数据的处理,其简易架构分析如图所示:
图中,核心组件分析:
-
DispatcherServlet:前端控制器,不需要工程师开发,由框架提供
作用:统一处理请求和响应,整个流程控制的中心,由它调用其它组件处理用户的请求
-
HandlerMapping:处理器映射器,不需要工程师开发,由框架提供
作用:根据请求的url、method等信息查找Handler,即控制器方法
-
Handler:处理器,需要工程师开发
作用:在DispatcherServlet的控制下Handler对具体的用户请求进行处理
-
HandlerAdapter:处理器适配器,不需要工程师开发,由框架提供
作用:通过HandlerAdapter对处理器(控制器方法)进行执行
-
HandlerInterceptor:拦截器, 需要工程师开发
作用:实现请求响应的共性处理
-
ViewResolver:视图解析器(前缀+viewname+后缀),不需要工程师开发,由框架提供
作用:进行视图解析,得到相应的视图,例如:ThymeleafView、InternalResourceView、RedirectView
-
View:视图
作用:将模型数据通过页面展示给用户。