分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

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

发布时间:2023-09-06 01:19责任编辑:蔡小小关键词:apachetomcatBootstrap
/** * 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

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved