SpringBoot 学习(02): 从嵌入式系统到嵌入式Servlet SpingBoot 的进化之路

嵌入式系统

计算机操作系统启动后,会加载一系列的功能和服务,而这些东西都不是开发操作系统的人写的,如果想让一个生态快速崛起,那么操作系统的开发人,就要告诉大家,在这个操作系统上,你要遵守那些规则,我才能让你运行起来;
因此,我们追加的各种应用,都可以理解为一个嵌入式系统,例如我们开发的桌面端软件,我们开发的移动 App 都是遵循着该规则。
那么,站在这个角度,你就可以推演你要做什么?

  1. 怎么将自己登记给操作系统,没有登机牌,那肯定是上不了船的——安装时提供包名进行注册;
  2. 怎么收听船长给的各种通知,接收不到通知,别人就再也找不到你了——对应着 listen(8080);
  3. 上传之后,操作系统都会给你说明书,告诉日用品,热水,遇到紧急情况去哪里报告等等,这些都是操作系统提供给你的,这个就叫 API;
  4. 如何得知船上的其他人,给船上的其他人发送广播;
  5. 怎么接收船上的其他人发送的广播,这里广播就是船上的内部通信方式,而你的手机是外部通讯方式,内部当然 比外部快,损耗少;

嵌入式系统——凡是预留了接收主系统信息的缺口,并独立处理所有输入逻辑之后返回输出结果的独立系统都被称为嵌入式系统;

  1. 嵌入式系统必须从属于某一个主系统,能够接收主系统提供的各项服务

Service 服务

概念:
一个能长时间接收外部请求,并根据外部请求的具体要求(传入参数),在完成所有的处理环节之后,反馈给请求者的角色就是一个服务,他有几个特点:

  1. 能服务的人 1 个或者多个,现实中的政务大厅都是能同时服务多个的,所以程序中的服务也应定位成能同时服务多个用户的程序
  2. 有自己的排队系统,超出服务的承载量之后,就要有排队系统,同时也会有弹性窗口的能力,例如平时工作日银行窗口只有 1 个,到了周六日就会有 5 个窗口同时办理业务,同时还有人在外边排队
    这样的过程就叫做服务器。

嵌入式服务

  1. 有很多业务比如押运,盖章,快递,以及贷款环节,并非接待员能搞完的,那么接待员就会找这些服务来协助自己处理问题,他们之间仍然存在交接环节,接待员会给贷款员一些客户信息,同时提供给贷款员一些权限,以节省贷款员与接待员的沟通成本,此时贷款员就成了嵌入式的服务,贷款员有多个,个人贷,企业贷,消费贷,房贷,不同贷款人都有不同的人承担,而接待员的交接方式都是相同的。

这里的贷款员就是 Java Web 中最原始的 Servlet,Servlet 名字组合就是 server
applet,服务的小程序,它的确是一个大服务的小程序,只处理一部分功能,例如,/good/234 就是获取
ID=234商品信息,这就是一个 servlet,如果你将一堆这种 servlet 整合到一起,就成了一个 war 包 “servlet”
则是一个计算机科学的术语,用于描述一种特定类型的服务器端程序。“servlet” 这个词是由 Sun Microsystems
提出的,它是由 “server”(服务器)和 “applet”(小应用程序)两个词合并而来。在 Java 编程中,“servlet”
通常指的是运行在 Servlet 容器中的 Java 类,用于处理来自客户端的请求并生成响应。Servlet 通常用于构建动态的 Web
应用程序。

  1. 再回到银行接待员和贷款员的角度来看,每个贷款员都要把自己的身份信息注册到银行里,接待员会去查找和翻看贷款员的信息是否匹配,匹配之后,将这个用户的信息交付给他具体的贷款员,这里就是 WEB-INF/web.xml中记录的手册了,该手册里记录着/good/234这个链接请找某某 Servlet

总结,最初结识 Java 的那批人,上来接触的是接待员这个概念,因此就会让自己一头雾水,同理一个贷款员也不知道整个公司的运作机理,他也只是死死地记住要先把自己的电话号码,职责填表,再与接待员对接时,要获取一些额外数据,同时还要理解这些数据以后怎么用,处理完毕之后,把所有的文件再递交给接待员,之后贷款员就不知道发生了什么了。

JSP

Web网页就是拼接一个 HTML 返回给前端,前端获得 HTML 进行解析运行,在没有 JSP 的时候,就使用 Servlet 的拼接字符串的方式进行拼接,这个过程耗时耗力,极其低效。后来采用JSP 模板的方式。
可以将其类比于默写题和填空题,默写题要自己全部拼接,填空题只需要按照要求,将局部答案填进去就行。所以开发效率就变高了。
前后端分离之后,后端输出 HTML的概念就变少了,这个功能也就退出了历史舞台。

Tomcat 数据库连接池

数据库连接池打破了嵌入式独立系统的规则

Tomcat 的数据库连接池实际上是一个由 Tomcat 提供的模块,它可以管理数据库连接以提高性能,并允许 Web 应用程序从连接池中获取数据库连接,从而避免频繁地创建和销毁连接。在这个场景下:

嵌入式系统: 您的 Web 应用程序(例如一个基于 Java 的 Web 应用)可以被视为一个嵌入式系统,它在 Tomcat 这个更大的容器中运行。

数据库连接池: Tomcat 的数据库连接池是一个独立的组件,它由 Tomcat 管理,负责管理数据库连接,提供连接重用、连接池大小限制、连接的创建和释放等功能。

独立性破坏: 是的,您提到的是一个例子,连接池的引入确实打破了 Web 应用程序的绝对独立性。Web 应用程序需要依赖于 Tomcat 提供的连接池,而不是直接在应用程序代码中创建和管理数据库连接。这使得应用程序在连接数据库时与外部组件进行了交互。

好处: 虽然连接池引入了外部依赖,但它提供了性能优势和资源管理,可以更有效地管理数据库连接。这可以避免频繁创建和关闭数据库连接,提高了应用程序的性能和扩展性。

总之,Tomcat 的数据库连接池是一个嵌入式系统中的嵌入式组件,它在 Web 应用程序中被使用,但它确实打破了应用程序的绝对独立性,以实现性能和资源管理的好处。这是一个常见的权衡,通过外部的组件来提供特定功能,以获得更好的整体性能。

SpringBoot 如何处理的?

SpringBoot 做了一次大整合,将 tomcat 和嵌入式 servlet 整合到了一起,这样可同时操作服务分发层和 servlet 逻辑处理层两套逻辑,可操作的方向变多了。

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

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

相关文章

3.1 Ansible 的使用和配置管理

Ansible 的使用和配置管理 文章目录 Ansible 的使用和配置管理Ansible 基础Ansible 模块和变量主机管理和组织角色和剧本部署应用和配置自动化与批量操作Ansible 常见用例Ansible 最佳实践和性能优化 大纲 Ansible 简介和特点 介绍 Ansible 的定义和作用,以及它在配…

【Java】Guava的Striped类。

Striped类,它提供了一种线程安全的分段锁(Striped Locking)机制。 Striped类可以用于将一组资源或操作分成多个段(Stripes),每个段上都有一个独立的锁。这种机制可以在并发访问时提供更好的性能,因为不同线程可以同时访问不同的段而不会相互阻塞。通常,Striped锁适用于…

pytorch3d成功安装

一、pytorch3d是什么? PyTorch3D的目标是帮助加速深度学习和3D交叉点的研究。3D数据比2D图像更复杂,在从事Mesh R-CNN和C3DPO等项目时,我们遇到了一些挑战,包括3D数据表示、批处理和速度。我们开发了许多有用的算子和抽象&#xf…

【Visual Studio Code】--- Win11 安装 VS Code 超详细

Win11 安装 VS Code 超详细 概述一、下载 Vscode二、安装 Vscode 概述 一个好的文章能够帮助开发者完成更便捷、更快速的开发。书山有路勤为径,学海无涯苦作舟。我是秋知叶i、期望每一个阅读了我的文章的开发者都能够有所成长。 一、下载 Vscode Vscode官网 二、…

HTTP和HTTPS协议

目录 一、HTTP和HTTPS区别🌻 二、有了https还有使用http场景吗🍊 三、https协议的工作原理💥 四、https协议的优点和缺点🍞 一、HTTP和HTTPS区别🌻 HTTP(Hypertext Transfer Protocol)和HTT…

时序预测 | MATLAB实现基于KNN K近邻的时间序列预测-递归预测未来(多指标评价)

时序预测 | MATLAB实现基于KNN K近邻的时间序列预测-递归预测未来(多指标评价) 目录 时序预测 | MATLAB实现基于KNN K近邻的时间序列预测-递归预测未来(多指标评价)预测结果基本介绍程序设计参考资料 预测结果 基本介绍 基于KNN K近邻的时间序列预测-递归预测未来(多指标评价) …

macOS - 安装使用 libvirt、virsh

文章目录 关于 libvirt使用安装启动服务virsh 交互模式virsh 帮助命令 关于 libvirt libvirt 官网: https://libvirt.org/gitlab : https://gitlab.com/libvirt/libvirtgithub : https://github.com/libvirt/libvirt 只读,gitlab 的镜像 libvirt是一套…

机器学习之数据集

目录 1、简介 2、可用数据集 3、scikit-learn数据集API 3.1、小数据集 3.2、大数据集 4、数据集使用 ⭐所属专栏:人工智能 文中提到的代码如有需要可以私信我发给你😊 1、简介 当谈论数据集时,通常是指在机器学习和数据分析中使用的一组…

ES 概念

es 概念 Elasticsearch是分布式实时搜索、实时分析、实时存储引擎,简称(ES)成立于2012年,是一家来自荷兰的、开源的大数据搜索、分析服务提供商,为企业提供实时搜索、数据分析服务,支持PB级的大数据。 -- …

logstash 原理(含部署)

1、ES原理 原理 使⽤filebeat来上传⽇志数据,logstash进⾏⽇志收集与处理,elasticsearch作为⽇志存储与搜索引擎,最后使⽤kibana展现⽇志的可视化输出。所以不难发现,⽇志解析主要还 是logstash做的事情 从上图中可以看到&#x…

RDMA概述

1. DMA和RDMA概念 1.1 DMA DMA(直接内存访问)是一种能力,允许在计算机主板上的设备直接把数据发送到内存中去,数据搬运不需要CPU的参与。 传统内存访问需要通过CPU进行数据copy来移动数据,通过CPU将内存中的Buffer1移动到Buffer2中。DMA模…

【图像分类】理论篇 (4)图像增强opencv实现

随机旋转 随机旋转是一种图像增强技术,它通过将图像以随机角度进行旋转来增加数据的多样性,从而帮助改善模型的鲁棒性和泛化能力。这在训练深度学习模型时尤其有用,可以使模型更好地适应各种角度的输入。 原图像: 旋转后的图像&…

1.MySQL数据库的基本操作

数据库操作过程: 1.用户在客户端输入 SQL 2.客户端会把 SQL 通过网络发送给服务器 3.服务器执行这个 SQL,把结果返回给客户端 4.客户端收到结果,显示到界面上 数据库的操作 这里的数据库不是代表一个软件,而是代表一个数据集合。 显示当前的数据库 …

Python中的MetaPathFinder

MetaPathFinder 是 Python 导入系统中的一个关键组件,它与 sys.meta_path 列表紧密相关。sys.meta_path 是一个包含 MetaPathFinder 实例的列表,这些实例用于自定义模块的查找和加载逻辑。当使用 import 语句尝试导入一个模块时,Python 会遍历…

Golang通过alibabaCanal订阅MySQLbinlog

最近在做redis和MySQL的缓存一致性,一个方式是订阅MySQL的BinLog文件,我们使用阿里巴巴的Canal的中间件来做。 Canal是服务端和客户端两部分构成,我们需要先启动Canal的服务端,然后在Go程序里面连接Canal服务端,即可监…

Maven - 统一构建规范:Maven 插件管理最佳实践

文章目录 Available Plugins开源项目中的使用插件介绍maven-jar-pluginmaven-assembly-pluginmaven-shade-pluginShade 插件 - 标签artifactSetrelocationsfilters 完整配置 Available Plugins https://maven.apache.org/plugins/index.html Maven 是一个开源的软件构建工具&…

零食量贩店热潮:小县城的新零售革命

零食量贩店热潮:小县城的新零售革命 目录 引言零食量贩店的快速崛起零食量贩店的运营模式量贩零食店在小县城的影响技术在零食量贩店的应用未来展望结论 1. 引言 近年来,零食量贩店在我国小县城迅速发展,成为一种新型的零售模式。在一条街…

flutter 二进制转字符串

通常接口返回的数据都是二进制数据 二进制转字符串:utf8二进制转字符串 onRoomMsg.body是二进制编码 utf8.decode(onRoomMsg.body)然后字符串转对象 json.decode(utf8.decode(onRoomMsg.body))然后再用fromJson解析 PrankActivityModel prankActivityModel Prank…

新疆大学841软件工程考研

1.软件生产的发展经历了三个阶段,分别是____、程序系统时代和软件工程时代时代。 2.可行性研究从以下三个方面研究每种解决方法的可行性:经济可行性、社会可行性和_____。 3.HIPO图的H图用于描述软件的层次关系&…

Android 12.0 系统systemui下拉通知栏的通知布局相关源码分析

1.前言 在android12.0的系统rom开发中,在进行systemui中的下拉通知栏的布局自定义的时候,对于原生systemui的 系统的下拉通知栏的通知布局的了解也是非常重要的,接下来就来分析下相关的下拉通知栏的通知布局的相关 源码流程,了解这些才方便对通知栏的布局做修改 2.系统sy…