SpringMVC、MVC、JavaBean、表述层、三层架构

news/2024/4/26 8:26:17/文章来源:https://www.cnblogs.com/Higurashi-kagome/p/16619885.html

来源:BV1Ry4y1574R?p=3、BV1Ry4y1574R?p=4

SpringMVC 是 Spring 的 MVC 模块,也就是来实现 Web 功能的模块。Spring 里面包含有很多的模块,比如说 Spring Framework 是它的基础模块,Spring JDBC 是封装了 JDBC 来实现持久化的模块,还有比如说 Spring Security 是它的安全模块,当然还有 Spring Boot 和 Spring Cloud,SpringMVC 是 Spring 的模块之一。

那么 SpringMVC 它到底是什么?这个框架到底有什么作用?首先我们需要知道什么是 MVC。

MVC 是一种软件架构思想,将软件按照模型(Model)、视图(View)、控制器(Controller)来进行划分。也就是说当我们在实现一个 Web 工程的时候,我们需要来按照模型、视图、控制器来实现我们当前一个完整的 Web 功能。

首先那就是 M 层,M 层指的是 Model 层,即模型层,其实就是工程中的 JavaBean。JavaBean 指的是当前工程里面所有处理数据的类,而不仅是我们的实体类。

处理数据的类有哪些?第一是实体类,实体类的作用就是存储数据,在实现持久化操作的时候,我们去查询一个表中的数据,让它来对应我们当前的一个实体类对象。还有一种是业务处理的 Bean,比如说 Service 是来处理业务逻辑的,Dao 是用来查询数据库、实现持久化操作的,它们两个也是来对我们当前的数据进行处理的,因为处理数据的类就叫做 JavaBean,所以说它们也是 JavaBean,是进行处理业务的 Bean。

所以我们的 JavaBean 就分为两类,一种是用来存储业务数据的实体类,然后还有一种就是来处理业务逻辑和数据访问的业务处理的类。

好,再往下就是我们的第二个叫做 View,叫做视图层,这个视图层是用来干嘛的?视图是来展示数据的,主要指的是我们工程中的 .html 或者是 .jsp 这些页面。我们就可以通过 .html 和 .jsp 来与用户进行交互,用户可以通过页面,向服务器中发送请求。同样我们处理完请求之后,也会响应用户一个完整的页面来展示最终的结果。这个就是我们的视图层,主要就是来展示数据、与用户进行交互的。

最后一个 C 代表的是 Controller,也就是控制器或控制层,其实主要就是 Servlet。控制层,主要来接收请求和响应,比如说现在有一个请求从浏览器发送到服务器之后,我们的服务器该如何去接收、处理这个请求,该如何响应浏览器呢?那就是由我们的 Servlet 来完成的。

好,我们现在知道了 MVC 的每一个部分到底指的是什么,接下来可以来看一下 MVC 的一个整个的工作流程到底是怎样的。首先我们的用户通过我们的视图层,来发送请求到我们的服务器,服务器中我们能够接收请求处理请求响应浏览器的,那就是我们的控制层了。控制层接收完请求之后,他就会去调用我们相对应的 Service 来处理业务逻辑,然后 Service 调用我们当前的 Dao 来进行数据库的操作,然后将访问数据库所得到的结果返回给 Service,再返回到我们的控制层,这个时候控制层就可以根据我们最终的结果,然后来响应浏览器了。

比如说对于一个书城项目。如果说我们在实现登录功能的时候,我们通过用户名跟密码查询数据库查询出来了一条数据,也就是说我们登录成功了,我们最终应该是重定向到我们的登录成功页面,而如果说我们当前没有登录成功,我们应该是转发到我们的登录页面,让用户重新来进行登录。


SpringMVC 就是 Spring 的一个 MVC 模块的内容,再往下,我们来看 SpringMVC 它到底是用来干什么的。

SpringMVC 是 Spring 为表述层开发提供的一整套完整的解决方案。

什么是表述层?我们学过三层架构,那三层架构分别就是表述层(或表示层)、业务逻辑层,还有我们的持久层,也就是数据访问层 Dao。

表述层指的是前台页面和我们的后台 Servlet。前台页面来发送请求到我们的服务器中,我们的服务器使用 Servlet 来接收请求、处理请求,最终来响应我们的浏览器。SpringMVC 处理的也就是这样的一个过程。

我们可以想想在这个过程里面我们都需要做什么,我们从浏览器中,以不同的方式来发送一个请求(超链接、form 表单提交),后端接收到一个请求之后,根据请求地址,来找到相对应的 Servlet,Servlet 生命周期中有三个方法:init 初始化、service 服务,还有一个就是 destroy 销毁。其中 service 方法就是我们处理请求和响应的方法。

当我们通过请求地址匹配到了 Servlet 之后,我们就需要在 service 中来处理请求了。比如说首先设置编码,设置编码的这些代码,我们可以统一把它给放在过滤器中。然后再往下的话,我们需要来获取请求参数,获取完请求参数之后来调用我们的 service 来处理业务逻辑。

service 处理完业务逻辑之后,会给我们返回来一个结果,这个时候我们就可以——比如说我们是查询操作,我们就把我们当前的数据给放在指定的域对象中,比如说我们当前查询所有数据展示在页面里面的功能,我们就需要将我们的这些信息然后放在我们的请求域中。或者说我们的登录功能,如果我们登录成功,我们要来记录用户的登录状态,这个时候我们就需要将我们的用户信息给放在我们当前的 session 里面。

然后再往下的话,我们就可以根据 service 处理业务逻辑之后的结果,来选择不同的方式响应浏览器。比如说登录有成功的情况,也有失败的情况,成功时应该通过重定向跳转到成功页面,而如果失败的话,我们就需要通过转发再次跳转到登录页面,为用户展示一个错误信息,让用户重新进行登录。

其实 SpringMVC 帮助我们来实现的也就是这些功能。

既然 SpringMVC 帮能帮助我们实现这些功能,我们在实现这些功能处理的时候,我们还需要像上一个阶段一样在 Servlet 里面把这些过程给写出来吗?不需要,因为 SpringMVC 它就是基于 Servlet 的,SpringMVC 把我们当前处理请求的这些过程都进行了封装,我们只需要使用 SpringMVC 为我们所提供的实现各个功能的这些代码,就可以来完成一个请求的处理了。

目前业界我们普遍来选择的就是 SpringMVC 来作为 Java 项目表述层开发的首选方案。其他表述层框架:Struts1、WebWork、Struts2。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_2608.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

万物皆可集成系列:低代码释放用友U8+深度价值(2)—数据拓展应用

在上一篇内容我们介绍了如何利用低代码开发套件实现低代码应用与U8+系统的对接集成,本次给大家带来的是如何将用友U8+系统中的数据进行价值扩展和实际应用。 我们以生产物料齐套分析为例来说明如何利用低代码将U8+系统中的系统进行扩展和应用。在开始之前,先来看看什么是生产…

java数据类型转换问题

我们知道java中的各个数据类型的取值范围不同,可以理解成容量大小,而针对容量大小可以对他们进行一个由低到高的排序,也就是优先级。 优先级 低-----------------------------------------------------------------------高 (byte,short,char)=> int => long => …

记esxi linux主机调整分区大小

调整前效果:调整后效果: 方法如下: 工具:VMware vCenter Converter

顶象为飞凡汽车App提供全方位防护 助力新能源汽车发展

汽车App集展示、体验、交互、交易和远程服务于一身,已成为智能汽车的一部分。日前,飞凡汽车与顶象达成合作,为飞凡汽车App提供安全加固服务,为用户提供全方位的安全保障。 用户眼里的“宝藏App” 每个智能汽车都有一个App,大多数将其当做车的附加服务,飞凡汽车把App当做汽…

Fecify 跨境电商系统,有哪些优势?

独立站是最近几年重新火爆起来的跨境电商经营方式。人都喜欢一切都掌握在自己手里的感觉,而独立站的好处就是自己说了算,足够自由。因为可以自己说了算,风险自己把控,自己做的事情,自己负责,独立站的这些自主特性深受货代人的喜爱。独立站以其独立自主的特性,引领未来跨…

删除RAID

场景 当服务器不需要RAID或重新配置RAID时,要先删除当前RAID配置来释放硬盘。 LSI SAS2208 (Legacy/Dual) 操作步骤 步骤1 通过远程虚拟控制台登录到服务器的实时操作桌面。 步骤2 登录CU管理界面。 步骤3 备份删除RAID中的数据。 步骤4 删除RAID。 1. 在CU主界面左侧区域中选…

HTML基础(二):标签学习

html学习笔记排版标签 标题标签场景:在新闻和文章的页面中,都离不开标题,用来突出显示文章主题代码:h系列标签<h1>1级标题</h1> <h2>2级标题</h2> <h3>3级标题</h3> <h4>4级标题</h4> <h5>5级标题</h5> <h…

电商行业:全链路监测广告投放效果,用数据驱动业务增长

哪个营销任务、营销渠道的引流用户更多? 买量用户的活跃、留存情况如何? 哪个营销任务引流的用户后续的加购、下单转化最多? HMS Core分析服务作为广告转化跟踪工具,广告主可实现从“曝光、点击、下载、激活、注册、留存、收藏、加入购物车、下单、开始结算、支付成功、复购…

35. Redis---缓存问题

1. 前言 在实际的业务场景中,Redis 一般和其他数据库搭配使用,用来减轻后端数据库的压力,比如和关系型数据库 MySQL 配合使用。Redis 会把 MySQL 中经常被查询的数据缓存起来,比如热点数据,这样当用户来访问的时候,就不需要到 MySQL 中去查询了,而是直接获取 Redis 中的…

面试突击77:Spring 依赖注入有几种?各有什么优缺点?

IoC 和 DI 是 Spring 中最重要的两个概念,其中 IoC(Inversion of Control)为控制反转的思想,而 DI(Dependency Injection)依赖注入为其(IoC)具体实现。那么 DI 实现依赖注入的方式有几种?这些注入方式又有什么不同?接下来,我们一起来看。 0.概述 在 Spring 中实现依…

[AcWing 167] 木棒

DFS 剪枝点击查看代码 #include<bits/stdc++.h>using namespace std;typedef long long LL;const int N = 1e6 + 10;int n; int w[N]; int sum, len; bool st[N];bool dfs(int u, int s, int start) {if (u * len == sum)return true;if (s == len)return dfs(u + 1, 0, …

Word修订内容批量标红

Word修订标红Plus,适用于科研狗最近改文章,期刊要求提供所有修改内容都标红的修订稿,本着能不手改就不手改的原则,我尝试检索了一下自动修改的方法,最先找到的是简书上的一篇使用VB宏命令批量修改的文章 (Word-接受全部修订为标红字体),但是尝试之后发现运行时间很长,且…

《GB27607-2011》PDF下载

《GB27607-2011 机械压力机 安全技术要求》PDF下载 《GB27607-2011》简介本标准规定了机械压力机类产品的设计、制造、改造、使用的术语和定义、严重危险、安全要求和(或)措施、检验和使用信息; 本标准适用于压力机及作为压力机组成部分的辅助设备的设计、制造、改造和使用,也…

二进制位运算

二进制位运算基础及其应用: 一、基本位运算符: 1.& 按位与:(从左到右)二进制中对应位都是1则为1,否则为0; 2. | 按位或:(从左到右)二进制中对应位有一个是1则为1,否则为0; 3. ^按位异或:(从左到右)二进制中对应位相同则为0,不同为1; 4. <<左移:右侧…

《GB27887-2011》PDF下载

《GB27887-2011 机动车儿童乘员用约束系统》PDF下载 《GB27887-2011》简介 本标准规定了机动车儿童乘员用约束系统术语、定义,在车辆上的安装及固定要求,约束系统的结构,以及对约束系统总成及其组成部件的性能要求和试验方法;本标准适用于适合安装在三个车轮或三个车轮以上…

JS基础:数组、函数、对象

字符串要用英文双引号括起来。字符串与其他类型数据之间用加号+连接起来 // -------------------------------------------------------- JS中定义声明变量是用关键字var,JS中变量名函数名都可以用中文。 JS中定义数组不用写函数长度[],JS中可以定义字符串数组向数组添加新元…

《GB12523-2011》PDF下载

《GB12523-2011 建筑施工场界环境噪声排放标准》PDF下载 《GB12523-2011》简介本标准规定了建筑施工场界环境噪声排放限值及测定方法; 本标准适用于周围有噪声敏感建筑物的建筑施工噪声排放的管理、评价及控制。市政、通信、交通、水利等其他类型的施工噪声排放可参照本标准执…

CATIA——什么是汽车设计硬点和骨架?

什么是汽车设计「硬点」? 汽车设计硬点(Hard point)的概念: 所谓硬点,是通过英文的"hardpoint"直译过来的。 由于零部件设计要在整车总布置基本完成后才开始,在总布置设计阶段中往往没有零部件的详细资料,还不能解决零部件和总成内部的细节问题。所以在布置设…

方法引用-通过this引用成员方法和类的构造器引用

通过this引用成员方法 this代表当前对象 如果需要引用的方法就是当前类中的成员方法 那么可以使用this::成员方法 的格式来使用方法引用函数式接口:public interface Richanle {void buy(); }测试类:public class Husband {//重写父类的成员方法public void buyHouse() {Sys…

Bundle-less 的思考和实践分享

作者:杨兴元随着 Snowpack、Vite 等利用提倡 no-bundle 的构建工具逐渐兴起,同时现代浏览器对原生 ESM 的普遍支持,Bundle-less 的概念席卷前端圈,那么我们如何理解 Bundle-less?究竟是炒概念还是能够真正地给业界带来收益?下面就来分享一下我对于 Bundle-less 的理解以及…