tomcat 6.0.24 源代码分析笔记(2010年2月23日更新)

简介: 转载请注明:来自http://blog.csdn.net/cnbird2008 tomcat是支持jsp的一套中间件,为了更好的学习java编程思想所以以tomcat源代码来分析和学习,请大家多多指点 1.

转载请注明:来自http://blog.csdn.net/cnbird2008

 

tomcat是支持jsp的一套中间件,为了更好的学习java编程思想所以以tomcat源代码来分析和学习,请大家多多指点

 

1.tomcat的一些目录结构就不多说了,首先程序的启动bin目录下的bootstrap.jar里面包含了org.apache.catalina和org.apache.naming 2个包里面分成很多小包

org.apache.catalina包含了startup,security,loader三个包

程序首先从startup包的Bootstrap类开始执行

 

开始分析org.apache.catalina.startup的Bootstrap类开始分析

程序

public static void main(String[] args)
  {
    if (daemon == null) {
      daemon = new Bootstrap();

java程序都是从public static void main开始执行

daemon是指创建的Bootstrap类,不多说了很好理解

  public Bootstrap()
  {
    this.catalinaDaemon = null;

    this.commonLoader = null;
    this.catalinaLoader = null;
    this.sharedLoader = null;
  }

类创建实例时执行以上的初始化

 

 try {
        daemon.init();
      } catch (Throwable t) {
        t.printStackTrace(); 
        return;
      }

使用init的初始化方法如果错误抛出异常t.printStackTrace();打印错误堆栈信息

 public void init()
    throws Exception
  {
    setCatalinaHome();
    setCatalinaBase();

    initClassLoaders();

 

setCatalinaHome()方法设置catalina.home环境变量(系统函数参考JAVA API中文文档获得系统的相关环境的文章

http://blog.csdn.net/kongqz/archive/2009/03/13/3987198.aspx

http://blog.csdn.net/gloomyboyo/archive/2009/08/14/4443870.aspx

java.io.FILE类以及相关的方法

http://www.blogjava.net/dreamstone/archive/2007/08/08/134968.html)

 

private void setCatalinaHome()
  {
    if (System.getProperty("catalina.home") != null)
      return;
    File bootstrapJar = new File(System.getProperty("user.dir"), "bootstrap.jar");

    if (bootstrapJar.exists()) {
      try {
        System.setProperty("catalina.home", new File(System.getProperty("user.dir"), "..").getCanonicalPath());
      }
      catch (Exception e)
      {
        System.setProperty("catalina.home", System.getProperty("user.dir"));
      }
    }
    else
      System.setProperty("catalina.home", System.getProperty("user.dir"));
  }

 

setCatalinaBase设置catalina.base环境变量

  private void setCatalinaBase()
  {
    if (System.getProperty("catalina.base") != null)
      return;
    if (System.getProperty("catalina.home") != null) {
      System.setProperty("catalina.base", System.getProperty("catalina.home"));
    }
    else
      System.setProperty("catalina.base", System.getProperty("user.dir"));
  }

 

3.initClassLoaders方法

  private void initClassLoaders()
  {
    try
    {
      this.commonLoader = createClassLoader("common", null);
      if (this.commonLoader == null)
      {
        this.commonLoader = super.getClass().getClassLoader();
      }
      this.catalinaLoader = createClassLoader("server", this.commonLoader);
      this.sharedLoader = createClassLoader("shared", this.commonLoader);
    } catch (Throwable t) {
      log.error("Class loader creation threw exception", t);
      System.exit(1);
    }
  }

目录
相关文章
|
SQL Java 关系型数据库
[笔记]【IDEA2020.2 Ultra】JSP+Servelt+JDBC+Tomcat Helloworld+增删改查(二)
[笔记]【IDEA2020.2 Ultra】JSP+Servelt+JDBC+Tomcat Helloworld+增删改查(二)
126 0
|
6月前
|
网络协议 Java 应用服务中间件
框架源码私享笔记(01)Tomcat核心架构功能 | 配置详解
本文首先分享了《活出意义来》一书序言中的感悟,强调成功如同幸福,不是刻意追求就能得到,而是全心投入时的副产品。接着探讨了Tomcat的核心功能与架构解析,包括网络连接器(Connector)和Servlet容器(Container),并介绍了其处理HTTP请求的工作流程。文章还详细解释了Tomcat的server.xml配置文件,涵盖了从顶级容器Server到子组件Connector、Engine、Host、Context等的配置参数及作用,帮助读者理解Tomcat的内部机制和配置方法。
|
Ubuntu 前端开发 JavaScript
技术笔记:Ubuntu:一个部署好的tomcat应用(war包)怎么用Nginx实现动静分离?
技术笔记:Ubuntu:一个部署好的tomcat应用(war包)怎么用Nginx实现动静分离?
|
11月前
|
Java 关系型数据库 MySQL
自动化测试项目实战笔记(一):JDK、Tomcat、MySQL、Jpress环境安装和搭建
这篇文章是关于自动化测试项目实战笔记,涵盖了JDK、Tomcat、MySQL、Jpress环境的安装和搭建过程,以及测试用例和常见问题总结。
231 1
自动化测试项目实战笔记(一):JDK、Tomcat、MySQL、Jpress环境安装和搭建
|
Java 关系型数据库 MySQL
[笔记]【IDEA2020.2 Ultra】JSP+Servelt+JDBC+Tomcat Helloworld+增删改查(一)
[笔记]【IDEA2020.2 Ultra】JSP+Servelt+JDBC+Tomcat Helloworld+增删改查
141 0
|
应用服务中间件
tomcat系统架构笔记
tomcat系统架构笔记
117 0
tomcat系统架构笔记
|
负载均衡 监控 网络协议
lagou 爪哇 2-1 tomcat / nginx 笔记
Tomcat 系统架构与原理剖析 注意:浏览器访问服务器使⽤的是Http协议,Http是应⽤层协议,⽤于定义数据通信的格式,具体的数据传输使⽤的是TCP/IP协议 Tomcat 系统总体架构 Tomcat是⼀个Http服务器(能够接收并且处理http请求,所以tomcat是⼀个http服务器)我们使⽤浏览器向某⼀个⽹站发起请求,发出的是Http请求,那么在远程,Http服务器接收到这个请求之后,会调⽤具体的程序(Java类)进⾏处理,往往不同的请求由不同的Java类完成处理。 Tomcat 设计了两个核⼼组件连接器(Connector)和容器(Container)来完成 Tomcat 的两⼤核
208 0
lagou 爪哇 2-1 tomcat / nginx 笔记
|
应用服务中间件
Tomcat&Servlet笔记
Tomcat&Servlet笔记
193 0
|
XML Java 应用服务中间件