`
gaojingsong
  • 浏览: 1154604 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

【Tomcat启动类分析】

阅读更多

1、启动类介绍


 二、代码分析

/**

     * Main method, used for testing only.

     *

     * @param args Command line arguments to be processed

     */

    public static void main(String args[]) {

 

        if (daemon == null) {

            daemon = new Bootstrap();

            try {

                daemon.init();

            } catch (Throwable t) {

                t.printStackTrace();

                return;

            }

        }

 

        try {

            String command = "start";

            if (args.length > 0) {

                command = args[args.length - 1];

            }

 

            if (command.equals("startd")) {

                args[0] = "start";

                daemon.load(args);

                daemon.start();

            } else if (command.equals("stopd")) {

                args[0] = "stop";

                daemon.stop();

            } else if (command.equals("start")) {

                daemon.setAwait(true);

                daemon.load(args);

                daemon.start();

            } else if (command.equals("stop")) {

                daemon.stopServer(args);

            } else {

                log.warn("Bootstrap: command \"" + command + "\" does not exist.");

            }

        } catch (Throwable t) {

            t.printStackTrace();

        }

 

    }



 

/**

     * Initialize daemon.

     */

    public void init()

        throws Exception

    {

 

        // Set Catalina path

        setCatalinaHome();

        setCatalinaBase();

 

        initClassLoaders();

 

        Thread.currentThread().setContextClassLoader(catalinaLoader);

 

        SecurityClassLoad.securityClassLoad(catalinaLoader);

 

        // Load our startup class and call its process() method

        if (log.isDebugEnabled())

            log.debug("Loading startup class");

        Class startupClass =

            catalinaLoader.loadClass

            ("org.apache.catalina.startup.Catalina");

        Object startupInstance = startupClass.newInstance();

 

        // Set the shared extensions class loader

        if (log.isDebugEnabled())

            log.debug("Setting startup class properties");

        String methodName = "setParentClassLoader";

        Class paramTypes[] = new Class[1];

        paramTypes[0] = Class.forName("java.lang.ClassLoader");

        Object paramValues[] = new Object[1];

        paramValues[0] = sharedLoader;

        Method method =

            startupInstance.getClass().getMethod(methodName, paramTypes);

        method.invoke(startupInstance, paramValues);

 

        catalinaDaemon = startupInstance;

 

    }

 

init方法总结:

init方法总计做了6件主要的事情

设置了系统变量CATALINA_HOME。

设置了系统变量CATALINA_BASE。

创建了3个类加载器commonloader,catalinaLoader,sharedLoader。

将当前启动线程的类加载器设置为catalinaLoader。

创建类Catalina的实例,并且调用setParentClassLoader方法,将Catalina类的父类加载器设置为catalinaLoader。

将第五条创建的Catalina类实例赋值给catalinaDaemon变量。

  • 大小: 152 KB
  • 大小: 79.3 KB
0
0
分享到:
评论

相关推荐

    tomcat 学习与分析总结资料

    强烈推荐,涉及tomcat启动脚本catlina,原理,server结构分析,类加载器 tomcat权威指南等资料

    tomcat 源码分析系列文档

    tomcat 源码分析系列文档 http深入分析,tomcat中类的加载,tomcat的启动,tomcat的容器思想,

    Tomcat服务器配置、启动分析、Servlet文件配置

    内容包括了Tomcat服务器配置、启动分析、Servlet文件配置等tomcat的基础应用配置。

    Tomcat内存溢出分析及解决方法

    堆是给开发人员用的上面说的就是,是在JVM启动时创建;非堆是留给JVM自己用的,用来存放类的信息的,本文将详细介绍Tomcat内存溢出,需要了解更多的朋友可以参考下

    Tomcat源码分析

    Tomcat的核心类图如下所示:1、Catalina:与开始/关闭shell脚本交互的主类,因此如果要研究启动和关闭的过程,就从这个类开始看起。2、Server:是整个Tomcat组件的容器,包含一个或多个Service。3、

    Linux 多tomcat服务 统一安装 统一部署 工具 shell编写 自动化部署与统一安装升级 - 类ansible工具

    Bak 存放原始配置文件 便于问题分析 Temp 存放临时文件 临时文件将及时删除无任何冗积 Workapp 存放war包 上传war包 3 功能描述 3.1 获取配置文件 通过本系统获取配置文件非常简单,只需用户提供服务...

    myTomcat:WebServer + Tomcat源码分析总结

    来自《深入剖析Tomcat》 HTTP请求流程->初始日期一个HTTP请求: 前导工作: org.apache.catalina.startup.Bootstrap启动startup.sh/bat来启动其main(),main()调用Catalina的process() org.apache.catalina...

    tomcat加载jar异常问题的分析与解决

    项目使用springboot启动一个web项目,在启动阶段看到console中出现了异常“1.10.3-1.4.3\hdf5.jar 系统找不到指定的文件”,虽然这些异常不影响项目的正常运行,但作为一个严谨的技术人员,看到这些异常就像见到...

    websphere下部署CXF项目jar包冲突问题解决方式

    在websphere8.5 下部署含有CXFwebservice的war包无法正常启动,而相应的war包在tomcat上是可以正常启动的,通过后台的日志分析大致可以定位为相关的cxf类无法找到,其实这些类在项目的lib目录下都是存在的,莫名其妙...

    看透springMvc源代码分析与实践

    7.1 Tomcat的顶层结构及启动过程44 7.1.1 Tomcat的顶层结构44 7.1.2 Bootstrap的启动过程45 7.1.3 Catalina的启动过程47 7.1.4 Server的启动过程48 7.1.5 Service的启动过程50 7.2 Tomcat的生命周期管理52 ...

    JavaClass二进制文件加密专家

    set JAVA_OPTS= - agentlib:c:\windows\brainysoft %JAVA_OPTS%,保存setenv.bat文件,重新启动Tomcat后就可以正确加载加密类了。 2.独立的Java应用程序 在您的应用程序运行参数中加入以下内容: -...

    Eclipse开发分布式商城系统+完整视频代码及文档

    │ 11.nginx的安装及启动、停止.avi │ 12.nginx的配置文件-通过端口号区分虚拟机.avi │ 13.通过域名配置虚拟机.avi │ 淘淘商城第二天笔记.docx │ ├─03.第三天 │ 01.课程回顾.avi │ 02.课程计划.avi │ 03....

    Java类文件加密专家

    agentlib:c:\windows\JLoader %JAVA_OPTS%,保存setenv.bat文件,重新启动Tomcat后就可以正确加载加密类了。 2.独立的Java应用程序 在您的应用程序运行参数中加入以下内容: -agentlib:的存放目录>\JLoader ...

    DataGear数据可视化分析平台

    系统自带了一个可用于为内置数据库执行SQL语句的简单工具类org.datagear.web.util.DerbySqlClient,可以在IDE中直接运行。注意:运行前需要先停止DataGear程序。 DataGear数据可视化分析平台 更新日志: v2.9.0 ...

    在线考试系统 eclipse+MySQL

    5. 确保Tomcat安装目录的common\lib下mysql-connector-java-3.0.16-ga-bin.jar类包文件,如果没有拷贝WebRoot\WEB-INF\lib目录下的mysql-connector-java-3.0.16-ga-bin.jar类包文件到Tomcat安装目录的common\lib下;...

Global site tag (gtag.js) - Google Analytics