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 逻辑处理层两套逻辑,可操作的方向变多了。

你可能感兴趣的:(Python/PHP,思维学,SpringBoot,servlet,大数据)