Spring MVC 一 :从MVC Servlet开始

甩开膀子,继续干活。

今天开始Spring Framework中的另外一部分重头戏:Spring Web MVC,借助Spring Web MVC,Spring Framework可以通过Servlet API轻松构建基于web的应用。

在开始Spring Web MVC之前,我们还是要简单了解一下MVC的前世今生。

MVC vs 三层架构

比较古老了,简单说一下即可。

三层架构
三层架构是为了实现应用程序的“高内聚低耦合”思想,把各功能模块划分为表示层UI、业务逻辑层BLL、数据访问层DAL。各层之间通过接口互相访问,并通过数据实体在各层之间传递数据。

三层之间分工明确,各负其责:UI层负责数据展示,BLL负责业务逻辑的处理,DAL负责数据的访问和存储。

新生代程序员不太容易理解为什么还需要进行这样的定义,因为目前的java框架天生就是三层架构的各种变体:在三层架构的基础上,对各层又进行了进一步的细分。

20年前的程序员对三层架构所解决的问题应该印象深刻,因为20年前绝大部分的java项目都没有清晰的层次结构,要么就是在jsp/servlet中充满业务逻辑和数据库访问、要么就是在后台service代码中掺杂各种数据库访问、业务逻辑以及页面样式的代码。杂乱无章,程序员在需要进行bug修复或功能完善的时候,读代码比读经书还要难。

三层架构对于解决上述问题功不可没。

MVC
MVC是Model、View、Controller的缩写,也就是模型、视图、控制器,最早是为Smalltalk语言提出的一种设计模式,最终在java web应用中得到了最为广泛的应用。

view:视图层,负责数据展示或数据收集,可以有图形、图表、文字等等不同的展示方式。
controller:控制层,负责接收从view层提交的用户请求,转发用户请求给模型层(model),接收model转发给view层进行展示。
model:模型,处理控制层转发的用户请求,生成用户请求的数据并通过控制层转发给view层。

MVC vs 三层架构
MVC是属于三层架构中UI层的设计模式,也就是说MVC都属于UI层,即使是model也属于UI层的一部分。

所以,MVC是设计模式,三层架构是应用程序或应用系统的架构,两者属于不同维度的概念,不能混淆。

如果MVC整个都处于三层架构的UI层的话,那么model就没有处理业务逻辑的责任,因为处理业务逻辑是BLL层的责任。因此,model可以理解为是在view和controller之间传递数据的载体。

生搬硬套的对比概念之间的异同其实意义不大,最重要的,我们还是要学习掌握Spring MVC的具体用法及底层逻辑。

下一篇文章正式开始。在此之前,我们还需要首先简单回忆一下Servlet的概念。

Servlet

当前的java应用在众多优秀框架的加持下(尤其是Spring框架),大家对Servlet可能也不算太熟悉了。

其实正是通过Servlet,Java才成为“适合进行Web程序开发的语言”。

Servlet是Service applet的缩写,意思是服务端小程序,对应的,Java还曾经推出过客户端小程序-applet,曾经风靡一时,只不过是由于各种原因,早已退出了历史舞台。

在MVC框架出现之前,java web程序员必须与servlet打交道,每一个servlet需要在web.xml中进行配置:

	<servlet><servlet-name>MyServlet</servlet-name><servlet-class>com.example.servlet.MyServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>/myServlet</url-pattern></servlet-mapping>

其中部分配置servlet的名字、以及其对应的servlet类。部分配置serlvet与业务请求url的对应关系。

配置内容很容易理解,但是配置起来相当麻烦,因为MVC框架之前的每一个应用都会有数量众多的Servlet,程序员必须在web.xml中为每一个servlet进行配置。

Servlet3.0之后,允许通过注解方式进行配置,与web.xml方式相比,注解方式要简化许多,因此Servlet3.0是对java web程序员的一次解放。

MVC框架比如Spring Web MVC(或之前的struts)的出现是对java web程序员的又一次大解放,Spring Web Mvc框架通过DispatcherServlet代替了应用层的其他Servlet(应用不需要创建Servlet)、只需要创建Controller。整个应用只有Dispatcherservlet一个Servlet即可,进一步简化了繁琐的Servlet配置工作(不过,话说回来,Controller其实类似Servlet,只不过Controller不需要实现任何接口、比Servlet的配置要简单一些)。

因此,虽然我们在使用Spring Mvc的过程中感受不到Servlet的存在,但是我们要知道Spring MVC其实也是围绕Servlet在工作,因为Servlet是MVC框架中的C、起到承上启下的控制器作用、是绕不开的核心存在。

有了这些背景知识,下一篇文章我们开始研究Spring MVC。

上一篇 Spring FrameWork从入门到NB - Spring AOP的自我调用

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

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

相关文章

ELK之LogStash介绍及安装配置

一、logstash简介 集中、转换和存储数据 Logstash 是免费且开放的服务器端数据处理管道&#xff0c;能够从多个来源采集数据&#xff0c;转换数据&#xff0c;然后将数据发送到您最喜欢的“存储库”中。 Logstash 能够动态地采集、转换和传输数据&#xff0c;不受格式或复杂度的…

python-windows本地部署ChatGLM2-6B-int

先说结论 20分钟出来一句话&#xff0c;期间&#xff0c;内存使用50%左右&#xff0c;cpu使用率85% 电脑配置 电脑环境&#xff1a;4cpu16g 配置PYTHON环境&#xff1a; 修改python安装包路径&#xff1a;https://blog.csdn.net/qq_27466827/article/details/131163026 pip3 in…

【MySQL系列】MySQL复合查询的学习 _ 多表查询 | 自连接 | 子查询 | 合并查询

「前言」文章内容大致是对MySQL复合查询的学习。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、基本查询回顾二、多表查询三、自连接四、子查询4.1 单行子查询4.2 多行子查询4.3 多列子查询4.4 在from子句中使用子查询 五、合并查询 一、基本查询回顾…

【PCIE系统学习】Gen1/2Gen3/4 symobl与OrderSet概念对比

这个专栏要干的事:学习PCIE理论知识,学会PCIE IP/VIP的使用。可以达到上手做项目,而不是空有理论 适合谁看:正在学习PCIE 设计验证,但学的过于零散。想有对比的系统的学习。 低价收费的目的:抵制胡乱传播转载现象。 版本控制:便于增加内容以及勘误 版本说明v20230829 …

网络渗透day4-Windows域

针对于Windows系列服务器的最新版本 server2022操作系统的域环境的搭建与维护&#xff0c;做为网络安全其中一项分支“内网渗透”&#xff0c;域是不可绕过的底层基础&#xff0c;本模块重点讲解域环境之外还讲解加密与证书技术&#xff0c;了解PKI相关的应用&#xff0c;最后带…

Python --datetime模块

目录 1&#xff0c; 获取datetime时间 2&#xff0c; datetime与timestamp转换 2-1&#xff0c; datetime转timestamp 2-2&#xff0c; timestamp转datetime 3&#xff0c; str格式与datetime转换 3-1&#xff0c; datetime转str格式 3-2&#xff0c; str格式转datetime…

数据结构:八种数据结构大全

数据结构 1.1 数据结构概述 数据结构是计算机存储、组织数据的方式&#xff1b;通常情况下&#xff0c;精心选择的数据结构可以带来更高的运行或者存储效率。数据结构的优良将直接影响着我们程序的性能&#xff1b;常用的数据结构有&#xff1a;数组&#xff08;Array&#xff…

基于Qt5开发图形界面——WiringPi调用Linux单板电脑IO

Qt5——WiringPi Qt5WiringPi示例教程 Qt5 Qt是一种跨平台的应用程序开发框架。它被广泛应用于图形用户界面&#xff08;GUI&#xff09;开发&#xff0c;可以用于构建桌面应用程序、移动应用程序和嵌入式应用程序。Qt提供了丰富的功能和工具&#xff0c;使开发人员可以快速、高…

上滑动导航栏手势桌面最近任务可见解密-千里马手把手带你搞定framework车载车机系统开发

建议先看另一篇blog&#xff1a; https://blog.csdn.net/learnframework/article/details/123032419 系统如何让桌面执行对应的onStart方法呢&#xff1f; 具体的堆栈显示如下&#xff1a; makeActiveIfNeeded:5788, ActivityRecord (com.android.server.wm) makeVisibleIfNe…

回归预测 | MATLAB实现GWO-ELM灰狼算法优化极限学习机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现GWO-ELM灰狼算法优化极限学习机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现GWO-ELM灰狼算法优化极限学习机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览基本介绍程…

uniapp接入广告的问题总结

Uniapp官方解决方案 uni-app 支持接入uni-ad广告联盟&#xff0c;开发者可实现一次开发&#xff0c;多端变现。 uni-ad 支持开屏、信息流、激励视频、视频流、悬浮红包、推送等丰富的广告形式&#xff1b; uni-ad 聚合了全网所有主流广告源&#xff0c;包括腾讯优量汇、字节…

自动化测试(三):接口自动化pytest测试框架

文章目录 1. 接口自动化的实现2. 知识要点及实践2.1 requests.post传递的参数本质2.2 pytest单元测试框架2.2.1 pytest框架简介2.2.2 pytest装饰器2.2.3 断言、allure测试报告2.2.4 接口关联、封装改进YAML动态传参&#xff08;热加载&#xff09; 2.3 pytest接口封装&#xff…

RabbitMQ入门笔记

一、写在前面 什么是消息队列&#xff1f; 顾名思义&#xff0c;消息队列就是一个能够存放消息的队列&#xff0c;通常有一个生产者生产消息&#xff0c;一个或多个消费者消费消息。 消息队列在分布式系统中运用十分广泛&#xff0c;有异步处理、应用解耦、流量削峰等用途。…

【Vue3】transition 组件

1. 基础用法 <template><div class"content"><button click"flag !flag">switch</button><transition name"fade"><div v-if"flag" class"box"></div></transition><…

学习c++的第6天

#include <iostream> using namespace std; class Animal { public: virtual void perform()0; virtual ~Animal() { cout<<"Animal的析构函数"<<endl; } }; class Lion :public Animal { public : void perform() { cout<<"狮子…

政务大厅人员睡岗离岗玩手机识别算法

人员睡岗离岗玩手机识别算法通过pythonyolo系列网络框架算法模型&#xff0c;人员睡岗离岗玩手机识别算法利用图像识别和行为分析&#xff0c;识别出睡岗、离岗和玩手机等不符合规定的行为&#xff0c;并发出告警信号以提醒相关人员。Python是一种由Guido van Rossum开发的通用…

2023年PMP最后一次考试,应该如何把握?

2023年PMP最后一次考试&#xff0c;应该如何把握? 免费送备考资料。 一、什么时间报名和考试&#xff1f; 根据国内PMP考试的主办方中国国际人才交流基金会的通知&#xff0c;2023年的PMP考试一共有三次&#xff0c;分别是5月、8月、11月&#xff0c;11月的具体考试时间以官…

Unity引擎修改模型顶点色的工具

大家好&#xff0c;我是阿赵。   之前分享过怎样通过MaxScript在3DsMax里面修改模型的顶点色。不过由于很多时候顶点色的编辑需要根据在游戏引擎里面的实际情况和shader的情况来动态调整&#xff0c;所以如果能在引擎里面直接修改模型的顶点色&#xff0c;将会方便很多。于是…

【力扣每日一题】2023.8.24 统计参与通信的服务器

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目顾名思义&#xff0c;要我们统计参与通信的服务器&#xff0c;给我们一个二维矩阵&#xff0c;元素为1的位置则表示是一台服务器。 …

input子系统

内核分三层 1、事件处理层 2、核心层 3、设备驱动层 当硬件按下&#xff0c;在设备驱动中触发中断&#xff0c;中断程序会将事件上报给核心层 核心层将事件给事件处理层&#xff0c;最后事件处理层控制app应用层的怎么操作将数据发送到用户空间