MVC架构模式

如何设计一个程序的结构,这是一门专门的学问,叫做“架构模式”(architectural pattern),属于编程的方法论。 MVC模式就是架构模式的一种。 MVC是三个单词的首字母缩写,它们是Model(模型)View(视图)Controller(控制)。该模式可以把不论简单或复杂的程序,都从结构上划分为三层。

  1. 最上面的一层,是直接面向最终用户的“视图层”(View)。它是提供给用户的操作界面,是程序的外壳。
  2. 最底下的一层,是核心的“数据层”(Model),也就是程序需要操作的数据或信息。
  3. 中间的一层,就是“控制层”(Controller),它负责根据用户从”视图层”输入的指令,选取”数据层”中的数据,然后对其进行相应的操作,产生最终结果。

每一部分都相对独立,职责单一,在实现过程中可以专注于自身的核心逻辑。MVC是对系统复杂性的一种合理的梳理与切分,它的思想实质就是“关注点分离”。具体原理可用下图很好地概括:

SpringMVC简介

Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型。SpringMVC是Spring框架的一个模块,SpringMVC和Spring无需通过中间整合层进行整合。Spring MVC 分离了控制器模型对象分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

Spring 的 Web MVC 框架是围绕DispatcherServlet 设计的,它把请求分派给处理程序,同时带有可配置的处理程序映射视图解析本地语言主题解析以及上载文件支持。应用控制器其实拆为处理器映射器(Handler Mapping)进行处理器管理和视图解析器(View Resolver)进行视图管理,页面控制器是非常简单的 Controller 接口,只有一个方法 ModelAndView handleRequest(request, response)。Spring 提供了一个控制器层次结构,可以派生子类。如果应用程序需要处理用户输入表单,那么可以继承 AbstractFormController。如果需要把多页输入处理到一个表单,那么可以继承 AbstractWizardFormController

SpringMVC框架原理

SpringMVC请求处理的流程

具体执行步骤如下:

  1. 首先用户发送请求给前端控制器(Front Controller),前端控制器根据请求信息(如URL)来决定选择哪一个页面控制器(Controller)进行处理并把请求委托给它,即以前的控制器的控制逻辑部分;
  2. 页面控制器(Controller)接收到请求后,进行功能处理,首先需要收集和绑定请求参数到一个对象,这个对象在SpringMVC中叫命令对象,并进行验证,然后将命令对象委托给业务对象进行处理;处理完毕后返回一个ModelAndView(模型数据和逻辑视图名);
  3. 前端控制器收回控制权,然后根据返回的逻辑视图(View)名,选择相应的视图进行渲染,并把模型数据传入以便视图渲染;
  4. 前端控制器再次收回控制权,将响应返回给用户;至此整个结束。

SpringMVC具体架构

该架构图只包括了SpringMVC的核心架构,没有包含文件上传、拦截器等功能,这些将在后续文章里介绍。

核心架构的具体流程步骤如下:

  1. 首先用户发送请求给DispatcherServlet(前端控制器),前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;
  2. DispatcherServlet访问HandlerMapping(处理器映射器), HandlerMapping将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象,通过这种策略模式,很容易添加新的映射策略;
  3. DispatcherServlet调用HandlerAdapter(处理器适配器),HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;
  4. HandlerAdapter调用处理器相应功能处理方法,HandlerAdapter将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理;并返回一个ModelAndView对象(包含模型数据、逻辑视图名);
  5. DispatcherServlet将ModelAndView的逻辑视图名发送给ViewResolver(视图解析器), ViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;
  6. View进行视图渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,因此很容易支持其他视图技术;
  7. 返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。

涉及到的组件:

  • 前端控制器DispatcherServlet(不需要程序员开发) 作用:接收请求,响应结果,相当于转发器,中央处理器。 有了DispatcherServlet减少了其它组件之间的耦合度。
  • 处理器映射器HandlerMapping(不需要程序员开发) 作用:根据请求的url查找Handler
  • 处理器适配器HandlerAdapter 作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler
  • 处理器Handler(需要程序员开发) 编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler
  • 视图解析器View resolver(不需要程序员开发) 作用:进行视图解析,根据逻辑视图名解析成真正的视图(view)
  • 视图View(需要程序员开发jsp) View是一个接口,实现类支持不同的View类型(jsp、freemarker、thymeleaf、pdf…)

SpringMVC学习笔记(1)-SpringMVC介绍相关推荐

  1. springmvc学习笔记(10)-springmvc注解开发之商品改动功能

    springmvc学习笔记(10)-springmvc注解开发之商品改动功能 springmvc学习笔记(10)-springmvc注解开发之商品改动功能 标签: springmvc springmv ...

  2. SpringMVC学习笔记:springMVC中相关细节

    SpringMVC中相关细节 1.什么是MVC? MVC是一种软件架构思想,将软件按照模型.视图.控制器来划分. ①M:模型层:指工程中的javaBean,作用是处理数据.javaBean分为两类:一 ...

  3. SpringMVC学习笔记七:SpringMVC的数据验证

    SpringMVC支持JSR(Java Specification Requests, Java规范提案)303-Bean Validation数据验证规范,该规范的实现者很多,其中较常用的是 Hib ...

  4. [SpringMVC]SpringMVC学习笔记一: springmvc原理及实例解析.

    前言: 今天来回顾下SpringMVC的开发原理, 使用图文并茂的方式 来解析其中的内幕, 我相信懂了其中的运行机制后, 对于面试中SpringMVC大家都可以说so easy了. 一, 图示法 第二 ...

  5. springmvc学习笔记(19)-RESTful支持

    springmvc学习笔记(19)-RESTful支持 标签: springmvc springmvc学习笔记19-RESTful支持 概念 REST的样例 controller REST方法的前端控 ...

  6. SpringMVC:学习笔记(5)——数据绑定及表单标签

    SpringMVC--数据绑定及表单标签 理解数据绑定 为什么要使用数据绑定 基于HTTP特性,所有的用户输入的请求参数类型都是String,比如下面表单: 按照我们以往所学,如果要获取请求的所有参数 ...

  7. springmvc学习笔记--ueditor和springmvc的集成

    springmvc学习笔记--ueditor和springmvc的集成 前言: 在web开发中, 富文本的编辑器真心很重要. 有电商店铺的打理, 新闻稿/博客文章/论坛帖子的编辑等等, 这种所见即所的 ...

  8. SpringMVC学习笔记整理

    SpringMVC学习笔记 以下是我整理的SpringMVC学习笔记: 导入jar包 一:springmvc工作流程. ①.     servlet容器初始化一个request请求 ②.     Di ...

  9. JavaEE 企业级分布式高级架构师(四)SpringMVC学习笔记(4)

    SpringMVC学习笔记 高级应用篇 ControllerAdvice @ControllerAdvice @ModelAttribute 作用于方法 作用于方法参数 @InitBinder @Ex ...

  10. java mvc框架代码_JAVA技术学习笔记:SpringMVC框架(内附入门程序开发代码)

    原标题:JAVA技术学习笔记:SpringMVC框架(内附入门程序开发代码) JavaEE体系结构包括四层,从上到下分别是应用层.Web层.业务层.持久层.Struts和SpringMVC是Web层的 ...

最新文章

  1. 采用编码器-解码器匹配语义分割的图像压缩
  2. layuiajax提交表单控制层代码_漏洞预警|ThinkPHP 5.0 远程代码执行
  3. Python IDE PyCharm2016.3.2(转)
  4. GeoTools——shp转geojson
  5. 17年北邮计算机应用基础,2017计算机应用基础考试题及答案
  6. PDF to Word OCR for Mac(PDF文档转换成word格式)
  7. mysql怎么开启事务日志_mysql中操作事务时要注意的事项
  8. 故宫回应灯会票秒光:3500人约成功 没票别信黄牛
  9. 谢孟媛老师 中级文法学习笔记
  10. 线上发版如何做到分批发的?详解蓝绿部署,滚动升级,A/B 测试,灰度发布/金丝雀发布
  11. c语言剧透,破镜重圆 ·《C语言修仙》by 十四洲
  12. 学生选课系统E-R图以及登录,选课流程图
  13. 文明重启服务器维护中怎么办,【FAQ】文明重启常见问题大全
  14. Mysql访问日志记录
  15. Auto.js学习笔记——快速入门:软件安装
  16. Oracle索引技术pdf
  17. 为iPart表添加“重量”列
  18. 查找购买绿驹电动车配件联系方式(半小时获取)
  19. 为什么程序员会有35岁失业一说
  20. 信息论与编码matlab实验报告,信息论实验报告(实验三、香农编码)

热门文章

  1. 5.Magento资源配置(Setup Resource)
  2. 数据结构与算法学习网
  3. 【Social listening实操】作为一个合格的“增长黑客”,你还得重视外部数据的分析!...
  4. AssetBundle Manager and Example Scenes
  5. MySQL数据库(7)_MySQL 数据备份与还原
  6. Python基础-序列化(json/pickle)
  7. 一张图搞定Java设计模式——工厂模式! 就问你要不要学!
  8. C# Double toString保留小数点方法
  9. js实现页面加载完毕之前显示Loading效果
  10. C++17特性一览(转载)