Tomcat 源码分析
文章平均质量分 73
笔者初入职场时由于工作不饱和,空闲期间研究了一下 Tomcat 的源码,从 Java 大神们的代码中,窥得 Java 编程思想的秘密一二,汇集于此,有空了翻看翻看。
毕小宝
技术路漫漫,仍然在路上的 Java 程序员!
展开
-
Spring Cloud @RefreshScope 原理分析:扫描 Bean 定义
最近读了一下 spring cloud 的 `@RefreshScope` 生效的源码,总结一下该注解的 `refresh` 类型的类实例化的过程。原创 2023-02-24 12:38:25 · 290 阅读 · 0 评论 -
Tomcat juli 应用日志隔离原理解析
背景最近在读 博多-舍费尔 著的《财务自由之路Ⅱ》,财务自由的确是一个很具诱惑力的目标,对于我这个连水果自由都没达到的人来说(PS:公司楼底下有一个菜鲜果美超市,随便什么水果都是十几块一斤,普通的苹果最便宜的 10.98 一斤,不敢随便买)。都三十多了才开始考虑如何实现财务自由,觉悟的有点晚了。这本书提醒我们如果想增加财富,必须找到可以出售的东西。我最近在做的尝试是众筹写作、知识变现,或许我可...原创 2019-05-16 14:00:57 · 595 阅读 · 0 评论 -
一文看透Tomcat 是如何用CountDownLatch停止容器的?
Tomcat 源码中多处用了java.util.concurrent 包中的类,用以处理多线程环境下的流程控制。近日分析了下NioEndpoint 源码,本文将以此类为背景,膜拜下 Java 大神们使用 CountDownLatch 并发控制的手法,其实也就是简单的实际应用,算不上高深。原创 2017-12-30 09:39:05 · 552 阅读 · 0 评论 -
Tomcat源码分析-JMX(上)
背景从LifecycleMBeanBase 类分析那一篇文章中,我们已经知道 Tomcat的所有的组件都实现了JmxEnable接口,并且在初始化过程中通过Registry类注册成为Java Managed Bean 了。那么JMX在Tomcat是的运用原理是什么呢?今天就这个问题进行了实践和探究,记录一下流程。JMX基本概念首先,我们来看一下sun公司的官方定义 JMX(Java Manag原创 2017-06-22 18:09:52 · 1341 阅读 · 0 评论 -
Tomcat源码分析-AccessLogValve类
类概况Tomcat的server.xml中,Host节点的子元素名称是Valve,用来定义一系列的处理器,AccessLogValve就是用来记录容器访问请求的日志处理类。Valve,本意是阀门的意思,AccessLogValve是处理生成访问日志的,梳理它的类图如下: 它的所有的成员变量大多都跟日志文件写入操作有关。使用方法tomcate的默认配置为: <Valve className="org原创 2017-06-15 18:39:52 · 6113 阅读 · 0 评论 -
Tomcat源码分析-JMX(终)
背景前几节分析了Tomcat中跟JMX有关的内容,昨天继续分析了JMX的架构图,以及JVM启动JMX的流程,整理出JDK中相关的类图,以巩固对JMX的理解。架构图sun公司定义的JMX架构图,百来的图片如下:纵观上图,以虚线分割,分为三层: 第一层,远程管理层应用,即访问JMX的应用,如jconsole.exe,snmp等。 第二层,JMX代理层,核心层,它是连接第一层和第三层的枢纽。原创 2017-06-27 11:37:46 · 2433 阅读 · 0 评论 -
Tomcat源码分析-JMX(下)
背景上一节分析了Registry类的功能,其引用management包中所有的类,也就是JDK支持JMX功能的类,本节将继续分析类图的其他部分。类图分析JMX的类图截取如下:分析类图得到几点信息如下: 第一,JmxBeanServer和DefaultMBeanServerInterceptor类,它们都是MBeanServer接口的实现类,即它们都是MBeanServer类型。Tomcat中引用是原创 2017-06-25 09:20:47 · 1674 阅读 · 2 评论 -
Tomcat源码分析-JMX之Registry类(中)
背景“Tomcat源码分析-StandardServer类”,这一篇文章的分析中,我们知道StandardServer类的实例被注册到JMX的服务器的过程,是通过Tomcat定义的Registry类完成的,那么这个类又是如何完成JMX相关功能的呢,本文就记录一下本人在源码跟踪过程中的分析结果。流程回顾从StandardServer类的initInternal中跟踪到,注册流程最终是通过Lifecyc原创 2017-06-23 15:29:09 · 2849 阅读 · 0 评论 -
Tomcat源码分析-catalina.home和catalina.base
背景Bootstrap启动的时候使用了两个系统变量catalina.home和catalina.base,从官网和源码中的注释可以知道这两者的区别主要是:catalina.home是Tomcat产品的安装目录,而catalina.base是tomcat启动过程中需要读取的各种配置及日志的根目录。默认情况下catalina.base是和catalina.home是相同的,本章就为了解决本人看到这两个东原创 2017-06-20 09:19:46 · 6701 阅读 · 0 评论 -
Tomcat源码分析-StandardServer类
类概况StandardServer类是Tomcat初始化流程中的第一个组件,本章需要结合“Tomcat源码分析-初始化流程” 的时序图继续看。时序图中Catalina类调用了StandardServer类的init方法,而这个模版方法是调用子类的initInternal类的,所以该类着重关注这个方法即可。类图绘制如下:主要流程初始化流程主要通过该类的initInternal方法完成的,而它的star原创 2017-06-19 17:37:42 · 2034 阅读 · 1 评论 -
Tomcat源码分析-LifecycleMBeanBase
类概况关注这个类是因为上一回跟踪了AccessLogValve类,它是LifecycleMBeanBase的一个子类,搞清楚这个类的各个子类结构,也就理顺了Tomcat容器中各个组件的协助流程了。管中窥豹,还是先从这个顶层抽象类开始吧。 这个类的结构很简单,类图绘制如下:父类LifecycleBase Base implementation of the Lifecycle interfac原创 2017-06-16 14:21:19 · 2030 阅读 · 0 评论 -
Tomcat源码分析-Java原生态log运用
背景调试tomcat源码过程中,控制台日志打印的都是INFO级别的日志,于是就想修改下日志级别,打印Digester类的DEBUG级别的日志,便于观察Digester类解析server.xml的流程,顺便跟踪了一下tomcat使用日志的流程,整理如下。使用方法Java提供了原生态的日志工具包java.util.logging,功能虽然没有log4j强大,但是够用了,我想这也是tomcat使用原生日志原创 2017-06-07 16:19:02 · 970 阅读 · 0 评论 -
Tomcat源码分析-初始化流程
主要类图Tomcat的Bootstrap类关联的几个主要类整理如下:初始化入口类是Catalina,它的load()完成初始化所有类的过程,主类StandardServer类有两个父类,它提供了生命周期的管理方法,同时也具有ManagedBean的功能。 进一步分析得到初始化过程中的时序图。初始化时序图 start方法包括两个步骤,load和start。load操作最终转换为Catalina类的原创 2017-06-06 16:15:33 · 1765 阅读 · 0 评论 -
Tomcat源码分析-Bootstrap类
背景本人真正从事Java开发工作已经五年了,最近一直在思考五年的工作经历,技术应该达到一个什么样的水平的呢。运用SWOT方法,剖析了一下自己目前的现状: 1 能快速熟悉一个项目,厘清项目框架、主要功能模块,找到值得学习的设计思想,发现明显的设计缺陷。 2 有代码洁癖,看到烂代码就有重构的冲动,深受代码重构、代码简洁之道等Java经典著作的毒,写代码的时候简直会有“我是作家,我的代码我做主”原创 2017-06-02 17:57:53 · 3301 阅读 · 0 评论 -
Tomcat源码分析-CatalinaProperties类
这个类很简单,就是一个属性获取的公共类。但是用法却很巧妙,代码相当优雅,所以忍不住想要再说说这个类。它的功能是管理 `catalina.properties` 类文件中的配置属性获取,只有一个方法 `getPropertity(String name)`。原创 2017-06-05 11:25:23 · 1638 阅读 · 0 评论