您当前的位置:首页 > 电脑百科 > 程序开发 > 框架

详解Web应用的底层逻辑,掌握Spring框架开发的思路

时间:2019-12-23 11:18:55  来源:  作者:

详解Web应用的底层逻辑,掌握Spring框架开发的思路

 

 

前言

前面一篇文章我讲了一下Web应用程序的基础,主要是基于网络连接的I/O数据处理,为了对网络上传输的数据进行处理,我们首先必须清楚的了解网络传输的数据是二进制数据流由网络协议定义的数据包长短,格式等来进行分拆和封装。

通过对网络上节点的标识信息,主机名或者IP地址跟应用的端口来标识运行在某台计算机上的某个可以通信的节点。

其实网络技术就是标识节点建立连接,也就是是IP协议为基础标识了节点信息,然后以TCP或者UDP协议为基础进行的网络连接和数据传输。

在硬件方面这主要体现在一台计算机通过网卡来管理网络连接,网卡会将接收到的数据包拷贝到操作系统管理的输入/输出缓冲区里,我们应用程序或者说我们编写的程序会创建一个自己的缓冲并连接到一个对于网络数据进行处理的通道上,而这个通道是基于网络套接字协议创建的数据流通道,我们可以用它来读取网卡接收到的数据,并在通道和缓冲区操作期间对数据进行加工处理。

这个过程反应在应用程序内存,操作系统内存以及网卡管理的内存之间的数据拷贝。

底层网络数据流与Web应用

简单了解了上面基于网络连接和数据传输以及在操作系统底层数据处理的基础后,我们就开始在这个底层网络数据流基础上构建我们的web应用程序了。

前面我们介绍了关于Web应用程序的特点,就是基于底层网络数据流处理的应用,所以必须现有网络数据流作为基础,而在我们现代的高级编程语言中已经将这些底层数据处理编写成了许多优秀的组件类库,我们可以直接使用,甚至将它们以规范的形式规定在了基础容器实现里。

比如我们介绍的Servlet规范,它提供了底层网络数据的封装和管理以及对宿主计算机环境的集成。

让我们可以使用JAVA语言不需要关心网络连接和底层二进制数据的处理而直接按照一定的规则来对输入的网络数据流进行处理,让后将处理结果通过固定的形式传递给网络进行输出。

 

关于Servlet的说明

Servlet原意是服务器小程序,它固定了一些基于服务器运行的小程序的相关的规范。

它首先对服务器环境进行了规定,对底层的基于网络的点对点之间的数据流进行了封装,这种封装就是在底层对网络传输的数据流按照某种约定的规则进行封装,这就是协议层级的应用处理,它是在网络服务器应用程序和操作系统以及网卡管理的输入输出控制器之间的数据拷贝和编解码过程。

我们知道在操作系统层级,它是一个管理和调度我们机器硬件的应用程序,而调度的对象就是CPU和内存,而网卡作为一个系统硬件它具备自己的驱动应用程序它在操作系统上运行,会有一个独立的管理的输入输出缓冲区,每次的输入输出数据流处理都只是通过相应事件触发来通过CPU的中断处理机制来完成的。

对于我们开发人员来说,我们需要做的就是借用Web服务器的底层处理提供的API来直接编写处理数据的组件,而Web服务器一般都是根据Servlet规范来实现的应用。

它负责根据服务器信息和资源路径来建立连接并传输和接收数据,并将数据转换为遵循某种协议的标准格式,我们Servlet规范主要是基于HTTP/1.1协议的,Servlet 3.0增加了反应式编程模型,到了Servlet 4.0将支持HTTP/2规范。

Web服务器实现

而我们在Web容器层级,它是一个运行在操作系统的中间服务程序,它的作用是负责跟操作系统交互同时为我们的具体服务组件的运行提供支持。

它涉及到数据流的接收,解析,转换和封装底层的操作。基本上就是实现将二进制的字节流根据规定好的协议结构读取并转换为我们应用程序能够使用的格式和数据类型。

对于网络数据流的接收和处理方式,从阻塞型,即获取一定数据后就停止接收数据,然后调用对应的处理程序进行处理,直到处理完成一个请求数据后,才会开始再次接收后面数据。

为提高性能,我们提供了对应处理组件的线程池,由特定的管理程序根据情况调度,即将一个服务处理组件实例化多个提供给进入的数据流请求调用,处理完成后,将服务组件归还给某个调度管理器,以备后面的请求使用。

随着应用程序的复杂程度加大,为了获取更好的处理性能,我们开始采用异步方式来处理,也就是由独立的线程负责接收请求,然后将请求交给工作线程处理,它不会阻止其继续接收请求。而在请求处理完成时,会向系统发送通知,通过线程中断处理来响应通知,如此以来可以使用较少的线程获取高效率,提高应用的反应效率。

当然这种反应式异步处理的开发模型是建立在Java NIO数据流模型基础上的。

 

Spring容器与Spring MVC框架

前面我们说过,Spring框架的优势在于它在Servlet级别上提供了一个开发复杂应用的组件容器,而且这个容器是实现了可配置的工厂模式,也就是说在容器初始化时,它会将组件服务实例化或者将其相关联的组件定义配置好,在需要时动态的去实例化对象。

开发人员在使用Spring框架进行开发时,基本上是将自己应用程序的数据类型和逻辑组件都作为Spring容器管理的组件,对于组件的构建和销毁以及整个调用过程的管理都由Spring容器来完成。

开发人员只需要将定义的数据类型和组件告诉容器,让它遵循容器管理的规则即可。

为此Spring容器为了获取它能管理哪些数据类型或者逻辑组件实现类,它通过读取特定格式的花名册来完成,比如有XML,YML以及Annotation或者代码等格式。

其实其本质都是一样的就是工厂模式,将构建某个依赖项的工作交给专门干这件事的人,我们可以理解为我们有无数的人将创建自己实例的任务交给了一个专门做这事的人。

而这里这个人就是Spring容器,我们只需要在任何一个需要构建的数据类型或者组件时,将这个能够创建依赖的对象提供给它即可。我们称这个被委托者为容器。

它会在启动时读取需要使用的所有组件和数据类型定义信息,并将它们初始化实例放入到其管理的内存空间里,并为每个实例定义唯一标识,并工作这些内容来获取其对应的对象实例。

 

总结

上面对前面说的内容做了简单的回顾,是为了能够衔接后面所要说的内容,如此是为了想连贯的从底层网络数据流到如何被封装进入我们开发语言运行的领域,以及我们如何在应用程序层级上对数据流的设计和管理,从而能够网络技术,数据编解码,Web服务器,高级的应用程序开发框架能够串联起来,找出它们之间的关联,它们为什么要如此设计,以及它们解决的问题什么,来帮助初学的小伙伴将自己所学的知识串联成一个完整的技术图谱,更加宏观的掌握技术思路,为以后开拓创新打好基础。

由于现在在网络上文章过长就没有人愿意读了,所以每次写都没组织好,由于字数问题而不得不中断,不过我会尽量的连贯的去说。



Tags:Web应用   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
一个渐进式的web应用程序与普通的网站没有任何不同——它由HTML、CSS和JavaScript组成,并存在于浏览器中。PWA与常规网站的区别在于,它列出了10个需要实现的关键概...【详细内容】
2021-10-20  Tags: Web应用  点击:(45)  评论:(0)  加入收藏
在讨论如何在应用程序中应用安全性之前,您应该首先了解如何保护应用程序。为了进行恶意操作,攻击者会识别并利用应用程序的漏洞。我们经常将漏洞描述为一种弱点,它可以允许执行...【详细内容】
2021-04-21  Tags: Web应用  点击:(186)  评论:(0)  加入收藏
WAF市场的发展缘于客户需要保护内外的Web应用程序。WAF保护Web应用程序和API免受各种攻击,包括自动机器人程序、注入攻击和应用层拒绝服务(DoS)攻击。它们应提供基于特征(signat...【详细内容】
2021-01-08  Tags: Web应用  点击:(960)  评论:(0)  加入收藏
当我在 Heroku 管理安全团队时,我经常做一个噩梦:我的 PagerDuty 警报响了,提醒我发生了安全事故。在梦中,我盯着手机并意识到“不,大事不好”——接着,我就被惊醒了。...【详细内容】
2020-12-07  Tags: Web应用  点击:(143)  评论:(0)  加入收藏
WAF是什么?WAF的全称是(Web Application Firewall)即Web应用防火墙,简称WAF。国际上公认的一种说法是:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提...【详细内容】
2020-11-12  Tags: Web应用  点击:(179)  评论:(0)  加入收藏
前言我们看到越来越多的人将他们的想法倾注到网页上。我们所指的这些人可能不熟悉网站设计和发布的技术细节,因此在建立他们的平台(网站)时可能会遇到一些问题。使用什么托管...【详细内容】
2020-10-24  Tags: Web应用  点击:(166)  评论:(0)  加入收藏
有网站的朋友们肯定了解web应用防火墙,这是目前主要防护网站安全的产品,web应用防火墙一般有三种形态,硬件、软件、云形态,一般软件和云形态用的最多,因为硬件WAF普遍价格在几十...【详细内容】
2020-09-11  Tags: Web应用  点击:(125)  评论:(0)  加入收藏
一、什么是 TypeScriptTypeScript 是近几年被火爆的应用了,这让大家产生了一个错觉:这么多的拥护者,难道TypeScript是一个新的语言?TypeScript是微软公司开发和维护的一种面向对...【详细内容】
2020-08-05  Tags: Web应用  点击:(70)  评论:(0)  加入收藏
提升Web应用的性能从未像今天这样刻不容缓。在线经济活动的比例日益提高,就连发展中国家和地区的经济活动都已经有5%以上在线进行了(相关数据请参考本文后面的资源)。在这个超...【详细内容】
2020-06-12  Tags: Web应用  点击:(261)  评论:(0)  加入收藏
众所周知,网站安全防护,对于企业非常重要。2020年HTTPS加密已经普及,传统的防火墙检测功能失效,所以对于网站来说,部署一个WEB应用防火墙十分重要,这方面商业产品很多,开源的也不少...【详细内容】
2020-05-28  Tags: Web应用  点击:(118)  评论:(0)  加入收藏
▌简易百科推荐
近日只是为了想尽办法为 Flask 实现 Swagger UI 文档功能,基本上要让 Flask 配合 Flasgger, 所以写了篇 Flask 应用集成 Swagger UI 。然而不断的 Google 过程中偶然间发现了...【详细内容】
2021-12-23  Python阿杰    Tags:FastAPI   点击:(6)  评论:(0)  加入收藏
文章目录1、Quartz1.1 引入依赖<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2</version></dependency>...【详细内容】
2021-12-22  java老人头    Tags:框架   点击:(12)  评论:(0)  加入收藏
今天来梳理下 Spring 的整体脉络啦,为后面的文章做个铺垫~后面几篇文章应该会讲讲这些内容啦 Spring AOP 插件 (了好久都忘了 ) 分享下 4ye 在项目中利用 AOP + MybatisPlus 对...【详细内容】
2021-12-07  Java4ye    Tags:Spring   点击:(14)  评论:(0)  加入收藏
&emsp;前面通过入门案例介绍,我们发现在SpringSecurity中如果我们没有使用自定义的登录界面,那么SpringSecurity会给我们提供一个系统登录界面。但真实项目中我们一般都会使用...【详细内容】
2021-12-06  波哥带你学Java    Tags:SpringSecurity   点击:(18)  评论:(0)  加入收藏
React 简介 React 基本使用<div id="test"></div><script type="text/javascript" src="../js/react.development.js"></script><script type="text/javascript" src="../js...【详细内容】
2021-11-30  清闲的帆船先生    Tags:框架   点击:(19)  评论:(0)  加入收藏
流水线(Pipeline)是把一个重复的过程分解为若干个子过程,使每个子过程与其他子过程并行进行的技术。本文主要介绍了诞生于云原生时代的流水线框架 Argo。 什么是流水线?在计算机...【详细内容】
2021-11-30  叼着猫的鱼    Tags:框架   点击:(21)  评论:(0)  加入收藏
TKinterThinter 是标准的python包,你可以在linx,macos,windows上使用它,你不需要安装它,因为它是python自带的扩展包。 它采用TCL的控制接口,你可以非常方便地写出图形界面,如...【详细内容】
2021-11-30    梦回故里归来  Tags:框架   点击:(27)  评论:(0)  加入收藏
前言项目中的配置文件会有密码的存在,例如数据库的密码、邮箱的密码、FTP的密码等。配置的密码以明文的方式暴露,并不是一种安全的方式,特别是大型项目的生产环境中,因为配置文...【详细内容】
2021-11-17  充满元气的java爱好者  博客园  Tags:SpringBoot   点击:(25)  评论:(0)  加入收藏
一、搭建环境1、创建数据库表和表结构create table account(id INT identity(1,1) primary key,name varchar(20),[money] DECIMAL2、创建maven的工程SSM,在pom.xml文件引入...【详细内容】
2021-11-11  AT小白在线中  搜狐号  Tags:开发框架   点击:(29)  评论:(0)  加入收藏
SpringBoot开发的物联网通信平台系统项目功能模块 功能 说明 MQTT 1.SSL支持 2.集群化部署时暂不支持retain&will类型消 UDP ...【详细内容】
2021-11-05  小程序建站    Tags:SpringBoot   点击:(56)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条