
tomcat源码分析
文章平均质量分 79
zhen_hong
没个性,不签名
展开
-
12、tomcat自检题目
一、tomcat原理篇1.1 为什么tomcat需要自定义线程池org.apache.catalina.core.StandardThreadExecutor?实际上其内部执行任务的仍然是JDK的ThreadPoolExecutor从继承结果上来看,tomcat的线程池实现了Lifecycle,Executor, ResizableExecutor,其中JDK的线程池是没有实现Lifecy...原创 2020-03-19 16:13:37 · 321 阅读 · 0 评论 -
11、tomcat源码系列总结
一、tomcat目录catalinaHome:表示tomcat产品的安装目录catalinaBase:表示tomcat实例的目录,通常是放置配置文件,jar包,web应用的目录,不过在通常情况下和catalinaHome是一样的二、类加载器tomcat中有三个默认的类加载器,他们的层级结构如下:那么这几个类加载的作用是啥?他们都是URLClassLoader的实例,他们的加载路径可以...原创 2019-10-02 18:52:53 · 286 阅读 · 0 评论 -
10、http的解析
分析tomcat对http的解析,我们还是要从tomcat接收到请求开始,我们可以通过浏览器直接请求一下,然后打断点,调试一下。首先说明,一下分析的是NIO类型的socket处理,大致类图如下:org.apache.tomcat.util.net.NioEndpoint.Acceptor其run方法public void org.apache.tomcat.util.net.NioEnd...原创 2019-08-08 23:42:56 · 875 阅读 · 0 评论 -
9、寻找容器
上一节中我们分析了通信的建立,既然建立了通信,那么当一个请求发送过来的时候,我们又是怎么去寻找到之前注册好的容器的呢?connector.getService().getMapper().map(serverName, decodedURI, version, request.getMappingData());以上代码来自org.apache.ca...原创 2019-08-08 23:40:43 · 266 阅读 · 0 评论 -
8、通信
上一节我们分析了容器的注册,现在我们继续分析tomcat的通信,如果没有通信,那么注册的容器就毫无用武之地,从StandardService的connector的启动开始org.apache.catalina.core.StandardService.startInternal()for (Connector connector: connectors) { ...原创 2019-08-08 23:38:38 · 140 阅读 · 0 评论 -
7、注册
回到StandardService的start方法,我们已经分析了engine及其子容器的启动,现在我们继续往下看看其他组件的启动protected void org.apache.catalina.core.StandardService.startInternal() throws LifecycleException { if(log.isInfoEnabled()) ...原创 2019-08-08 23:32:52 · 157 阅读 · 0 评论 -
6、StandardContext的初始化与启动
1、初始化context的初始化没啥可分析的逻辑但是它所触发的初始化事件让ContextConfig做了一些事情protected void org.apache.catalina.startup.ContextConfig.init() { // Called from StandardContext.init() //创建Digester /...原创 2019-08-08 22:50:26 · 762 阅读 · 0 评论 -
5、发布
上一节我们研究了部分组件的启动,在host启动的时候,HostConfig监听了Host容器的启动事件。Host的start事件 public void org.apache.catalina.startup.HostConfig.start() { if (log.isDebugEnabled()) log.debug(sm.getString("h...原创 2019-08-08 22:43:39 · 195 阅读 · 0 评论 -
4、启动
从上一节中我们分析了组件的初始化,除了容器进行了线程池的创建之后,其他的组件的初始化基本上是在注册mbean服务。Bootstrapdaemon.setAwait(true);daemon.load(args);daemon.start();我们分析了load,那么解析来就开始startpublic void start() throws Exception {...原创 2019-08-08 22:41:38 · 160 阅读 · 0 评论 -
3、初始化
在前面我们了解了一个tomcat是如何构建起来,就像是一个机器人,我使用各种组件组装起来,形成一个长得像人的机器人,现在是时候按下电源按钮,检验我们的成果了。电源按下,机器人开口说了声正在初始化。。。。。。服务初始化getServer().init();首先来看下StandardServer的类图其中Lifecycle接口定义每个生命周期的常量/** * The Lif...原创 2019-08-08 22:38:38 · 233 阅读 · 0 评论 -
2、Catalina(tomcat内核构建者)
从上一节中,我们发现Bootstrap的加载和启动方法实际调用的是Catalina对象的加载和启动方法,而Catalina使用的catalina加载器加载,本节就来分析下Catalina的load和start方法,到底做了什么?首先我们看到Catalina的load方法public void load() { //如果已经加载过...原创 2019-08-08 22:29:22 · 680 阅读 · 0 评论 -
1、Boostrap
Boostrap类是tomcat的启动类,它有个main方法,用于启动tomcat,在研究其main方法前,我们先来看看这个类的静态块的处理逻辑static { // Will always be non-null //获取用户目录 String userDir = System.getPrope...原创 2019-08-07 22:23:50 · 250 阅读 · 0 评论