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


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

文章插图
 
 
前言前面一篇文章我讲了一下Web应用程序的基础 , 主要是基于网络连接的I/O数据处理 , 为了对网络上传输的数据进行处理 , 我们首先必须清楚的了解网络传输的数据是二进制数据流由网络协议定义的数据包长短 , 格式等来进行分拆和封装 。
通过对网络上节点的标识信息 , 主机名或者IP地址跟应用的端口来标识运行在某台计算机上的某个可以通信的节点 。
其实网络技术就是标识节点建立连接 , 也就是是IP协议为基础标识了节点信息 , 然后以TCP或者UDP协议为基础进行的网络连接和数据传输 。
在硬件方面这主要体现在一台计算机通过网卡来管理网络连接 , 网卡会将接收到的数据包拷贝到操作系统管理的输入/输出缓冲区里 , 我们应用程序或者说我们编写的程序会创建一个自己的缓冲并连接到一个对于网络数据进行处理的通道上 , 而这个通道是基于网络套接字协议创建的数据流通道 , 我们可以用它来读取网卡接收到的数据 , 并在通道和缓冲区操作期间对数据进行加工处理 。
这个过程反应在应用程序内存 , 操作系统内存以及网卡管理的内存之间的数据拷贝 。
底层网络数据流与Web应用简单了解了上面基于网络连接和数据传输以及在操作系统底层数据处理的基础后 , 我们就开始在这个底层网络数据流基础上构建我们的web应用程序了 。
前面我们介绍了关于Web应用程序的特点 , 就是基于底层网络数据流处理的应用 , 所以必须现有网络数据流作为基础 , 而在我们现代的高级编程语言中已经将这些底层数据处理编写成了许多优秀的组件类库 , 我们可以直接使用 , 甚至将它们以规范的形式规定在了基础容器实现里 。
比如我们介绍的Servlet规范 , 它提供了底层网络数据的封装和管理以及对宿主计算机环境的集成 。
【详解Web应用的底层逻辑,掌握Spring框架开发的思路】让我们可以使用JAVA语言不需要关心网络连接和底层二进制数据的处理而直接按照一定的规则来对输入的网络数据流进行处理 , 让后将处理结果通过固定的形式传递给网络进行输出 。
 
关于Servlet的说明Servlet原意是服务器小程序 , 它固定了一些基于服务器运行的小程序的相关的规范 。
它首先对服务器环境进行了规定 , 对底层的基于网络的点对点之间的数据流进行了封装 , 这种封装就是在底层对网络传输的数据流按照某种约定的规则进行封装 , 这就是协议层级的应用处理 , 它是在网络服务器应用程序和操作系统以及网卡管理的输入输出控制器之间的数据拷贝和编解码过程 。
我们知道在操作系统层级 , 它是一个管理和调度我们机器硬件的应用程序 , 而调度的对象就是CPU和内存 , 而网卡作为一个系统硬件它具备自己的驱动应用程序它在操作系统上运行 , 会有一个独立的管理的输入输出缓冲区 , 每次的输入输出数据流处理都只是通过相应事件触发来通过CPU的中断处理机制来完成的 。
对于我们开发人员来说 , 我们需要做的就是借用Web服务器的底层处理提供的API来直接编写处理数据的组件 , 而Web服务器一般都是根据Servlet规范来实现的应用 。
它负责根据服务器信息和资源路径来建立连接并传输和接收数据 , 并将数据转换为遵循某种协议的标准格式 , 我们Servlet规范主要是基于HTTP/1.1协议的 , Servlet 3.0增加了反应式编程模型 , 到了Servlet 4.0将支持HTTP/2规范 。
Web服务器实现而我们在Web容器层级 , 它是一个运行在操作系统的中间服务程序 , 它的作用是负责跟操作系统交互同时为我们的具体服务组件的运行提供支持 。
它涉及到数据流的接收 , 解析 , 转换和封装底层的操作 。基本上就是实现将二进制的字节流根据规定好的协议结构读取并转换为我们应用程序能够使用的格式和数据类型 。
对于网络数据流的接收和处理方式 , 从阻塞型 , 即获取一定数据后就停止接收数据 , 然后调用对应的处理程序进行处理 , 直到处理完成一个请求数据后 , 才会开始再次接收后面数据 。


推荐阅读