关于Tomcat应用服务器内核架构原理
Tomcat应用服务器是我们javaEE程序员做管理系统项目经常会使用到的一款经典服务器系统软件。即便是到了springcloud/springboot一统天下的时代,它也是作为其默认内核嵌入使用的。今天我来大致总结一下Tomcat应用服务器总体架构。
Tomcat应用服务器是实现了标准JavaEE Servlet规范的Servlet引擎。它的主要架构包括2大部分。一个是连接器、另外一个是容器,也就是Servlets容器。
连接器组件:本质上是由一些线程+负责协议解析转换的工具对象组成。首先最核心的线程是一个叫Acceptor的主线程,它的工作主要是负责监听某个端口(默认是8080),获取客户端Socket连接。当有客户端远程http连接进入了,它就会从accept()函数返回一个socket对象。然后,它会以该socket对象做入参,放入一个线程池。
接下来,线程池里面的某个worker线程会获取到该socket对象, 然后调用ProtocolProcessesor对象,完成http协议解析,生成HttpRequest,HttpResponse对象。然后它继续调用Adaptor对象,完成适配处理,主要是把HttpRequest,HttpResponse对象转化为HttpServletRequest对象、HttpServletResponse对象。然后,就调用容器组件来完成业务逻辑处理。
容器组件:容器组件都是容器基类的子类,它们有一定的包含关系。最外层的容器组件叫engine。
它内部包含了一个或多个host容器。然后每个host容器里面包含了一个或多个context容器。然后
每个context容器里面包含了一个或多个wrapper容器。
每个容器里面都有一个pipeline,包含了一个或多个valve组件,它像是一个阀门,可以做一些通用性的处理逻辑。 每个容器的最后一个valve组件,会调用下层容器的pipeline。
最内层容器wrapper的pipeline的最后一个valve组件会创建一个filterChain对象,然后调用dofilter()方法。该方法内部主要是层层递进调用符合条件的过滤器,最后调用servlet完成实际业务处理。每个过滤器对象可以完成一些譬如鉴权,日志等通用性的操作。
其实filter的作用跟容器的valve组件作用很相似,都是可以实现一些系统级别的通用逻辑。区别只是valve是tomcat应用服务器自己定义的,而filter组件是javaEE标准规范里面定义的,通用性更强,其它的譬如Jboss,WebSphere,WebLogic等应用服务器也会遵守的。所以为了通用性,我们一般把鉴权,日志等共通操作写入过滤器组件就看可以了,这样切换应用服务器代码也可以继续使用。
tomcat应用服务器架构原理
于 2022-11-24 09:40:14 首次发布