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. Go slice 扩容机制分析

    前言 我们都知道 Go 语言中的 slice 具有动态扩容的机制(不知道的同学请先补课 Go 切片) 但是其底层机制是什么呢?本着知其然,知其所以然的探索精神去研究一番.还不是为了应试 手动狗头 go ...

  2. 如何在CPU上优化GEMM(下)

    如何在CPU上优化GEMM(下) Array Packing 另一个重要的技巧是数组打包.这个技巧是对数组的存储维度进行重新排序,将某个维度上的连续访问模式在平滑后转换为顺序模式. 如上图所示,在阻塞 ...

  3. 如何为应用选择最佳的FPGA(上)

    如何为应用选择最佳的FPGA(上) How To Select The Best FPGA For Your Application 在项目规划阶段,为任何一个项目选择一个FPGA部件是最关键的决策之 ...

  4. postman之将获取响应数据-创建环境变量,用于不同的接口调用

    应用场景: token的获取,用于不同接口的取值 在test中进行如下设置: var jd = pm.response.json(); var access_token = jd.access_tok ...

  5. JVM-gcRoots 和 强引用,软引用, 弱引用, 虚引用, 代码演示和应用场景

    什么是垃圾? 什么是gcRoots, 谈谈你对 强, 软, 弱 , 虚引用的理解, 他们的应用场景 jvm采用可达性分析法: 从gcRoots集合开始,自上向下遍历,凡是在引用链上的对象,都不是垃圾, ...

  6. 我对SpringMVC的浅见

    之前在学校没接触框架这东西之前只接触过MVC的model1和model2,而真正接触SpringMVC的时候是在一年前,在学习过程中,我这才意识到SpringMVC大大简化了以前的开发工程,到了社会上 ...

  7. 时光卷轴,Microsoft大事记

    Our mission is to empower every person and every organization on the planet to achieve more. 2021年6月 ...

  8. Pytest学习笔记10-生成html报告

    前言 在pytest中,如何生成html测试报告呢,pytest提供了pytest-html插件,可以帮助我们生成测试报告,当然,如果希望生成更加精美的测试报告,我们还可以使用allure生成报告,下 ...

  9. Android系统Bitmap内存分配原理与优化

    一.前言 笔者最近致力于vivo游戏中心稳定性维护,在分析线上异常时,发现有相当一部分是由OutOfMemory引起.谈及OOM,我们一般都会想到内存泄漏,其实,往往还有另外一个因素--图片,如果对图 ...

  10. vue cli3 创建项目

    1.确认是否由安装由vue 命令提示符 执行 vue -V 如果没有则执行 npm uninstall vue-cli 2.创建项目 vue create demo1 具体操作如下: (1)执行以上命 ...