M→Model 模型

V→View 视图

C→Controller 控制器

也就是说一次交互由生到死(请求到相应) 需要经过 这三个层级 来完成 那么为什么这么设计 这么设计又有什么好处 我是这么认为的


首先Model指的是什么 是业务处理的数据参数 业务处理之后数据返回的数据结果


什么又是视图呢? 对于编程人员来讲 我想从一个网站 得到我想要得到的数据内容 即使在空白的页面上面显示出来一段Json串 我们也是可以得到我们想要的信息的 那么这种只有Json串的空白页面到底属不属于View视图 我的理解是属于的 我的认知是凡是可以展现出数据结果的都可以称为视图


控制器又是什么呢? 服务器接收到请求根据请求的参数决定调用哪个模型去处理业务需求,然后再确定用哪个视图来渲染这次请求的结果

PS:由于 JSP的各种缺点 编译速度慢(首先被转换为 .java文件(Servlet) 然后将.java文件编译为字节码文件) 不好进行调试 等一系列缺点 再加上 前段三大框架 VUE React Angular 再加上前后端分离 并行开发所带来的优势 在视图渲染这块 我们只需要将数据按照约定好的模型 返回给浏览器 交给前段同事处理即可


MVC 中的请求处理工作流程


1.从流程图里面我们可以看出 在MVC中每一层 都是独立的 自己解决自己所负责的功能 当用户用浏览器发出请求的时候 我们首当其冲的是接受用户请求的参数 (请求体 请求头 等等..) 再由DispatcherServlet(中央处理器) 来决定分发到哪一个具体的控制器 我会在以后的文章具体讲解一下DispatcherServlet 到了这里我们的控制器 工作基本完成 也就是说请求到了服务器 控制器控制请求 以具体分发到哪一个具体的控制器 我们可以看到每一个请求都需要经过DispatcherServlet 可想而知他的重要性

2.既然已经到了控制器 我们也拿到了请求参数 那么下一步我们就需要进行具体的业务处理 也就是Modal 看到Modal(模型) 可能很多人都觉得他应该就是返回给前端的数据模型 我一开始也是这么认为的 但是在我仔细的看了Spring官网的时候 我发现数据本身 在设计模式里并不算什么 他可能是一个你封装的一个实体类 一段JSON字符串 一个数字 但我们真正需要的注意的是 这些数据是从哪里来的 我们拿到用户的参数 是一定需要进行业务处理的 他可能需要 交互自己的数据 可能需要调用他人接口 而这些真正处理请求参数 并得到结果的我们统称为Modal

3.此时我们用'C'接到了用户参数 到了控制器 由经过了'M'进行了数据的业务处理得到了用户想要的数据 省下来就应该返回视图(页面)呈现给用户 让用户得到自己想要的信息 也就是我们的'V' 一个项目中我们往往有很多页面 具体返回到哪一个页面进行渲染 这也是通过我们之前提到过的DispatcherServlet来决定的 这样子我们一次请求到响应的流程也就全部结束了

总结:之所以使用MVC这种模式 是因为可以把一次请求到响应 可以分成三层 这三层之间解耦 各司其职 多一层冗余 少一层无法解决
这也牢牢地遵守的设计模式中的

开闭原则

Spring MVC中的M V C的更多相关文章

  1. Spring mvc中@RequestMapping 6个基本用法

    Spring mvc中@RequestMapping 6个基本用法 spring mvc中的@RequestMapping的用法.  1)最基本的,方法级别上应用,例如: Java代码 @Reques ...

  2. spring mvc中使用freemark的一点心得

    参考文档: FreeMarker标签与使用 连接http://blog.csdn.net/nengyu/article/details/6829244 freemarker学习笔记--指令参考: ht ...

  3. Http请求中Content-Type讲解以及在Spring MVC中的应用

    引言: 在Http请求中,我们每天都在使用Content-type来指定不同格式的请求信息,但是却很少有人去全面了解content-type中允许的值有多少,这里将讲解Content-Type的可用值 ...

  4. Spring mvc中@RequestMapping 6个基本用法小结(转载)

    小结下spring mvc中的@RequestMapping的用法. 1)最基本的,方法级别上应用,例如: @RequestMapping(value="/departments" ...

  5. Spring MVC中处理静态资源的多种方法

    处理静态资源,我想这可能是框架搭建完成之后Web开发的”头等大事“了. 因为一个网站的显示肯定会依赖各种资源:脚本.图片等,那么问题来了,如何在页面中请求这些静态资源呢? 还记得Spring MVC中 ...

  6. Spring MVC 中的基于注解的 Controller【转】

    原文地址:http://my.oschina.net/abian/blog/128028 终于来到了基于注解的 Spring MVC 了.之前我们所讲到的 handler,需要根据 url 并通过 H ...

  7. spring mvc中的文件上传

    使用commons-fileupload上传文件所需要的架包有:commons-fileupload 和common-io两个架包支持,可以到Apache官网下砸. 在配置文件spring-mvc.x ...

  8. spring mvc中的valid

    当你希望在spring mvc中直接校验表单参数时,你可以采用如下操作: 声明Validator的方式: 1.为每一个Controller声明一个Validator @Controller publi ...

  9. spring mvc中的@PathVariable(转)

    鸣谢:http://jackyrong.iteye.com/blog/2059307 ------------------------------------------------ spring m ...

随机推荐

  1. Could not get JDBC Connection排查

    最近在维护的一个比较旧的项目,发现总是隔一段时间JDBC就报错: Could not get JDBC Connection; nested exception is org.apache.commo ...

  2. django2中namespace和name的使用

    django2中namespace和name的使用   一.在Django <= 1.11 我们通过关键词namespace参数定义名称空间 1.projects/urls.py   from ...

  3. node.js学习(3)模块

    1.创建文件 count.js 2 调用 3 改造 4 调用 5 再改造 6 在再改造

  4. Python+Selenium - 一个元素有两个标签时:一个用于显示,一个用于底层

    如下图,这种一个元素由两个标签控制的,用js改值时需要两个标签的属性值都改 改值代码 js_code = 'a = document.getElementById("lostdate&quo ...

  5. Python+Selenium学习笔记13 - 窗口截图及关闭

    涉及方法 get_screenshot_as_file() 1 # coding = utf-8 2 3 from selenium import webdriver 4 from time impo ...

  6. 对标 Spring Boot & Cloud ,轻量框架 Solon 1.4.12 发布

    Solon 是一个轻量的Java基础开发框架.强调,克制 + 简洁 + 开放的原则:力求,更小.更快.更自由的体验.支持:RPC.REST API.MVC.Job.Micro service.WebS ...

  7. AIFramework框架Jittor特性(下)

    AIFramework框架Jittor特性(下)

  8. 从7nm到5nm,半导体制程

    从7nm到5nm,半导体制程 芯片的制造工艺常常用XXnm来表示,比如Intel最新的六代酷睿系列CPU就采用Intel自家的14nm++制造工艺.所谓的XXnm指的是集成电路的MOSFET晶体管栅极 ...

  9. H.265 HD 和H.265 4K Video Encoder IP Core

    H.265 HD 和H.265 4K Video Encoder IP Core H.265 HD Video Encoder IP Core(H.265 HD Video/Audio Encoder ...

  10. java接口类

    是什么:类似于java中的继承,但是继承只可以继承一个人父类,接口类可以继承多个 作用:解决java继承解决不了的问题 关键字:interface(定义) implements(使用) 注意事项:1. ...