首页 > Web开发 > 详细

tomcat启动(二)org.apache.catalina.startup.Bootstrap分析

时间:2017-10-20 17:32:17      阅读:400      评论:0      收藏:0      [点我收藏+]
/**
 * Bootstrap loader for Catalina.  This application constructs a class loader
 * for use in loading the Catalina internal classes (by accumulating all of the
 * JAR files found in the "server" directory under "catalina.home"), and
 * starts the regular execution of the container.  The purpose of this
 * roundabout approach is to keep the Catalina internal classes (and any
 * other classes they depend on, such as an XML parser) out of the system
 * class path and therefore not visible to application level classes.

这个类构造一个类加载器来加载Catalina内部类(通过在server目录下的catalina.home来找到所有的jar文件),和开始定期执行container容器。

这种回旋处理方法的目的是保持Catalina内部类(以及其依赖的任何其他类,如XML解析器)脱离系统类路径,因此对应用程序级别不可见

入口main方法

在进入main之前会前执行static静态模块代码:主要是设置catalina.home和catalina.base的路径

public static void main(String args[]) {
bootstrap初始化init()
设置守护进程daemon = bootstrap;
识别启动bootstrap时传递的参数command = args[args.length - 1];//start
daemon.setAwait(true);
daemon.load(args);
daemon.start();}

上面damemon守护进程的方法setAwait(),load(),start()其实是反射调用的org.apache.catalina.startup.Catalina类的方法

到这里其实就进入到Catalina类的。

--------------------------Bootstrap类解析完毕------下面是对init方法解释---------------------------------------------------------

初始化init方法(初始化守护进程):

在这个方法里主要流程

1、初始化类加载器initClassLoaders----------commonLoader,catalinaLoader,sharedLoade会先加载catalina.base/conf/catalina.propertises配置文件

然后读取common.loader键所对应的值

2、为当前线程设置classLoader 

Thread.currentThread().setContextClassLoader(catalinaLoader);catalinaLoader其实就是commonLoader

用静态类SecurityClassLoad预加载类资源

SecurityClassLoad.securityClassLoad(catalinaLoader);

securityClassLoad(ClassLoader loader, boolean requireSecurityManager)  {   
。。。。。略。。。。。。。。。。
     loadCorePackage(loader); loadCoyotePackage(loader); loadLoaderPackage(loader); loadRealmPackage(loader); loadServletsPackage(loader); loadSessionPackage(loader); loadUtilPackage(loader); loadValvesPackage(loader); loadWebResourcesPackage(loader); loadJavaxPackage(loader); loadConnectorPackage(loader); loadTomcatPackage(loader);
}

3、初始化org.apache.catalina.startup.Catalina利用反射调用它的setParentClassLoader设置sharedLoader;(设置的parentClassLoader的原因和用处暂不完全清楚,看源码估计会在server.xml加载部分会使用到)

 

 

具体源码解析:http://blog.csdn.net/u011545486/article/details/52002626

tomcat启动(二)org.apache.catalina.startup.Bootstrap分析

原文:http://www.cnblogs.com/gne-hwz/p/7688078.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!