`
gaojingsong
  • 浏览: 1201773 次
  • 性别: 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启动分析与配置详解 Tomcat是一款广泛使用的开源Java Servlet容器,它实现了Java EE的Web应用程序规范。理解Tomcat的启动过程和配置对于优化服务器性能和管理Web应用至关重要。本文将深入解析Tomcat的组成...

    tomcat启动原理解析

    **Tomcat启动原理解析** Tomcat作为一款广泛使用的开源Java应用服务器,其启动过程涉及了众多关键步骤和组件的协同工作。理解Tomcat的启动原理对于开发者来说至关重要,不仅有助于提升性能优化的能力,还能在遇到...

    Tomcat 6.0启动过程分析

    ### Tomcat 6.0 启动过程分析 #### Bootstrap 类的作用 `Bootstrap` 类作为 Tomcat 的启动入口,承担着构建一个独立的类加载器的任务,用于装载 `Catalina` 的内部类,以此来确保这些内部类与系统的 classpath 相...

    tomcat 学习与分析总结资料

    1. **Tomcat启动脚本catalina** Tomcat的启动脚本`catalina.sh/bat`是服务器运行的关键。这个脚本负责配置环境变量、初始化Java选项,并启动或关闭Tomcat服务器。通过研究这个脚本,我们可以了解如何配置JVM参数,...

    tomcat启动的错误

    本文将对“tomcat启动的错误”这一主题进行深入探讨,并结合具体的错误信息来分析其原因及解决方案。 #### 错误描述:“Could not load com.mysql.jdbc.Messages Could not load java.net.BindException MySQL JDBC...

    Tomcat系统架构分析

    Server包含了至少一个Service,即在Tomcat启动时至少会有一个Service对外提供服务。Server组件负责整个Tomcat的初始化、启动和关闭,它是整个Tomcat的控制中心。 在Tomcat架构中,组件之间的通信和交互是通过事件...

    tomcat 源码分析系列文档

    9. "Tomcat启动源代码分析.pdf":深入到启动脚本和Java代码,解释了从启动脚本开始,如何初始化和启动Tomcat服务的全过程。 10. "tomcat类加载机制.pdf":再次聚焦于Tomcat的类加载机制,可能深入到更多细节和技巧...

    tomcat 架构 分析

    在深入分析Tomcat的架构之前,需要了解Tomcat是Apache Jakarta项目中的一个核心项目,是一个免费的开源Servlet容器。它主要用于作为独立服务器或集成到Web服务器中,如Apache和IIS等。作为Web服务器,Tomcat负责解析...

    tomcat 启动报APR based Apache Tomcat Native library not found

    - 源码:如果你正在对Tomcat进行深入研究或自定义构建,理解源码中的AprLifecycleListener类和其初始化过程有助于解决问题。 - 工具:解决问题可能需要使用一些工具,如编译器(如GCC)来编译APR库,或使用系统包...

    tomcat架构的源码分析

    ### Tomcat架构的源码分析 #### 一、Tomcat的架构概述 Tomcat作为一款广泛使用的开源Java Servlet容器,其内部架构设计简洁而高效。本文档将对Tomcat的架构进行详细介绍,并从源码层面深入分析其核心组成部分。...

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

    `Tomcat启动分析-Servlet-Web.xml.doc`文档可能涵盖了启动过程中的关键步骤,包括加载`context.xml`(用于全局配置)、解析`web.xml`(Web应用的部署描述符)以及初始化Servlet和过滤器等。在启动过程中,Tomcat会...

    tomcat启动的时序图

    通过以上对Tomcat启动流程的解析,我们可以看到Tomcat的启动过程涉及到了多个类和组件的交互与协作。从初始化类加载器、解析配置文件、构建核心组件到最终的启动和服务监听,每一个步骤都至关重要。了解这些细节有助...

    struts2中,在tomcat启动时候总是出现严重

    为了更具体地解决问题,需要查看`struts2中,在tomcat启动时候总是出现严重.txt`这个文本文件,它应该包含了详细的错误堆栈信息。根据这些信息,我们可以进一步定位问题所在,并采取相应的解决措施。如果文件中包含...

    tomcat类加载器

    通常,开发者希望在不重启服务器的情况下更新代码,这时DevLoader可能会有热部署功能,即在代码更改后,能自动或手动重新加载修改过的类,而无需停止和重新启动Tomcat服务。这大大提高了开发效率。 类加载器在...

    Tomcat启动参数及监控参数配置

    一、Tomcat启动参数配置 1. **基本启动参数**: - `-D<name>=<value>`:定义系统属性,例如`-Djava.awt.headless=true`用于无头模式运行。 - `-cp`或`-classpath`:指定类路径,包含所有依赖的JAR文件和目录。 -...

    Tomcat 6 启动过程分析.doc

    Bootstrap类是Tomcat启动的入口点,位于`org.apache.catalina.startup`包中。Bootstrap的主要任务是创建一个特定于Tomcat的类加载器,以隔离Catalina内部类与系统类路径,防止它们对应用级别的类可见。Bootstrap的`...

    TOMCAT不能正常启动总结

    文件列表中,“Tomcat不能正常启动.docx”可能是一个详细的故障分析报告或解决方案文档,包含了解决问题的步骤和建议。而“tomcat卡死补丁包.zip”则可能是博主或其他人提供的修复补丁,可能包含修正特定问题的修改...

    eclipse tomcat启动,内存溢出问题

    针对上述问题,我们可以采取以下措施来解决Eclipse中Tomcat启动时遇到的内存溢出问题: ##### 1. 修改Tomcat启动脚本中的JVM参数 - 打开Tomcat安装目录下的`bin`文件夹,找到`catalina.bat`文件(Windows系统)或`...

Global site tag (gtag.js) - Google Analytics