Tomcat原理系列之五:Tomcat有哪些优秀设计

简介: 读Tomcat也有一段时间了.读源码目的不仅仅是在了解其运行的原理,还有就是借鉴其优秀设计,并应用到日常的编码中去

静态内部类:


Tomcat中大量使用了内部类.我对其中印象比较深的就是Endponit.

以NioEndpoint为例.

作为处理NIO类型的连接的入口(端点),他把Acceptor,Poller,SocketProcessor放在NioEndpoint中.有啥好处呢

设想一下,如果把这些提出来创建类,Nio类型的创建一批,Aio类型的创建一批. 这样不是也可以吗?

答案是:当然可以.

但我是认为, 将其组合在一起, 更能体现其高内聚性,不同类型的相关类组合在一起.使NioEndpoint具有一个丰富的功能,体现了更好的封装. 并且静态内部类依赖于外部类,不依赖于外部类对象,也就是我们不需要实例化外部类就可以使用静态内部类.所以并不会影响其他类使用静态内部类,又体现了低耦合性.

所以,在某些需要多个功能类组合在一起才能完成某个操作时,我们可以尝试使用静态内部类的方法,更能体现操作的完整性.


image.png


生产者消费者


还是以NioEndpoint为例: 其内部类Acceptor 与Poller ,PollerEvent 完美的组成一个典型的生产者消费者模式

Acceptor 循环接收请求,然后将请求封装到PollerEvent, 注册到Poller.queue队列上去.Poller不断从queue队列里取PollerEvent做进一步处理


image.png


将请求与处理解耦.


设计模式


凡是优秀的框架,都少不了用那么一两个设计模式.

  • 模板模式: Lifecycle接口,定义了组件生命周期的各个阶段. LifecycleBase:它实现了Lifecycle的init、start、stop等主要逻辑.init(),start(),stop()作为通用方法,定义算法骨架,调用模板方法,将具体的功能实现延迟到子类去实现. [LifecycleBase中的模板方法]


image.png

  • 观察者模式:LifecycleListener 代表的是抽象观察者, lifecycleEvent代表了一个事件 当组件的状态发生变化时,会调用fireLifecycleEvent将事件广播到LifecycleListener监听器中, 对应的监听器就对事件做出相应
  • 责任了模式Tomcat中的层级调用,是理解Tomcat启动,初始化的关键.每层都持有下家的引用.请求在请求链上传递, 每层组件处理完成后,就将请求交个下家继续处理.直至每层都处理完毕. Tomcat有哪些是责任链模式呢? Cotainer容器Engine->Host->Context->Wrapper Pipeline 和 Valve 组成的处理链 ApplicationFilterChain 过滤器链


相关文章
|
8月前
|
设计模式 网络协议 Java
Tomcat 高并发之道原理拆解与性能调优
Tomcat 高并发之道原理拆解与性能调优
123 0
|
8月前
|
设计模式 Java 应用服务中间件
Tomcat 架构原理解析到设计借鉴
Tomcat 架构原理解析到设计借鉴
340 0
|
8月前
|
设计模式 Java 应用服务中间件
Tomcat 架构原理解析到架构设计借鉴
Tomcat 架构原理解析到架构设计借鉴
148 0
|
8月前
|
设计模式 安全 Java
【分布式技术专题】「Tomcat技术专题」 探索Tomcat技术架构设计模式的奥秘(Server和Service组件原理分析)
【分布式技术专题】「Tomcat技术专题」 探索Tomcat技术架构设计模式的奥秘(Server和Service组件原理分析)
116 0
|
3月前
|
前端开发 Java 应用服务中间件
21张图解析Tomcat运行原理与架构全貌
【10月更文挑战第2天】本文通过21张图详细解析了Tomcat的运行原理与架构。Tomcat作为Java Web开发中最流行的Web服务器之一,其架构设计精妙。文章首先介绍了Tomcat的基本组件:Connector(连接器)负责网络通信,Container(容器)处理业务逻辑。连接器内部包括EndPoint、Processor和Adapter等组件,分别处理通信、协议解析和请求封装。容器采用多级结构(Engine、Host、Context、Wrapper),并通过Mapper组件进行请求路由。文章还探讨了Tomcat的生命周期管理、启动与停止机制,并通过源码分析展示了请求处理流程。
|
3月前
|
负载均衡 应用服务中间件 Apache
Tomcat负载均衡原理详解及配置Apache2.2.22+Tomcat7
Tomcat负载均衡原理详解及配置Apache2.2.22+Tomcat7
66 3
|
8月前
|
安全 Java 应用服务中间件
【小白误闯】这可能是对 Tomcat 工作原理解释最详细的文章
脑子一闪而过,当年 V 哥在面试 Java 开发时,被问到让你写一个 Tomcat 服务器,你有什么想法?尼码,面试官摆明是在压工资了,你得逞了,我回答不上来,当时也没研究过 Tomcat 的源码,饮恨被拒。今天想想看,当时尴尬的表情,蛮逗的嘞。 今天V 哥有空把这个问题整理出来,干脆写成文章吧,放到资料库里,也分享给大家。Tomcat 是一个流行的 Java Servlet 和 JSP 容器,用于运行 Java Web 应用程序。它的核心组件主要包括:
145 1
|
8月前
|
算法 Java 应用服务中间件
Tomcat性能优化及JVM内存工作原理
Tomcat性能优化及JVM内存工作原理
|
8月前
|
存储 负载均衡 NoSQL
【分布式技术架构】「Tomcat技术专题」 探索Tomcat集群架构原理和开发分析指南
【分布式技术架构】「Tomcat技术专题」 探索Tomcat集群架构原理和开发分析指南
159 1
|
8月前
|
XML Java 应用服务中间件
总在说SpringBoot内置了tomcat启动,那它的原理你说的清楚吗
总在说SpringBoot内置了tomcat启动,那它的原理你说的清楚吗
88 0