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. TVM性能评估分析(一)

    TVM性能评估分析(一) System Overview AutoTVM vs Auto-scheduler Table 1. Workflow Comparision Figure 1. Searc ...

  2. Linux内存技术分析(上)

    Linux内存技术分析(上) 一.Linux存储器 限于存储介质的存取速率和成本,现代计算机的存储结构呈现为金字塔型.越往塔顶,存取效率越高.但成本也越高,所以容量也就越小.得益于程序访问的局部性原理 ...

  3. CVPR2020:4D点云语义分割网络(SpSequenceNet)

    CVPR2020:4D点云语义分割网络(SpSequenceNet) SpSequenceNet: Semantic Segmentation Network on 4D Point Clouds 论 ...

  4. pytest的allure的环境配置

    一.下载地址: https://github.com/allure-framework/allure2/releases 二.配置环境变量: 三.验证allure安装成功

  5. 移动通信-5G

    1.移动通信的发展历程: "G"代表一代,每10年一个周期 1G 2G 3G 4G 5G 1980s 1990s 2000s 2010s 2020s 语音 短信 社交应用 在线.互 ...

  6. 阅读源码很重要,以logback为例,分享一个小白都能学会的读源码方法

    作为一个程序员,经常需要读一些开源项目的源码.同时呢,读源码对我们也有很多好处: 1.提升自己 阅读优秀的代码,第一可以提升我们自身的编码水平,第二可以开拓我们写代码的思路,第三还可能让我们拿到大厂 ...

  7. 【NX二次开发】Block UI 选项卡控件

    [NX二次开发]Block UI 选项卡控件

  8. Java中JVM、JRE和JDK三者有什么区别和联系?

    Java 语言的开发运行,也离不开 Java 语言的运行环境 JRE.没有 JRE 的支持,Java 语言便无法运行.当然,如果还想编译 Java 程序,搞搞小开发的话,JRE 是明显不够了,这时候就 ...

  9. 【题解】Luogu P3052 【USACO12】摩天大楼里的奶牛Cows in a Skyscraper

    迭代加深搜索基础 题目描述 A little known fact about Bessie and friends is that they love stair climbing races. A ...

  10. Linux常用命令详解下

    Linux常用命令详解 目录 一.Linux常用命令 1.1.查看及切换目录(pwd.cd.ls.du) 1.2.创建目录和文件(mkdir.touch.ln) 1.3.复制.删除.移动目录和文件(c ...