`
22cgreen
  • 浏览: 55048 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

tomcat(2)之Catalina.java

阅读更多
这个类位于org.apache.catalina.startup包中.
其实这个类是启动tomcat的真正的入口类.
从Bootstrap.java中看得出来,其实启动时只执行此类的load和start,并设置此对象的父加载器属性。
我们选来看此类的方法load有什么作。
--------------------------------------------------------
public void load(String args[]) {

        try {
            if (arguments(args))
                load();
        } catch (Exception e) {
            e.printStackTrace(System.out);
        }
    }
    注:从方法可以看出,它主要是通过传进来的参数看是否要不要执行load()这个无参的方法。arguments作用就指对不同的参数
    进行属性附值操作,这里start参数是true,因此要执行load();
    我们来看看load的源码:
    -----------------------------------------------------------------------------------------------------------------------
    public void load() {

        long t1 = System.nanoTime(); //返回最准确的可用系统计时器的当前值,以毫微秒为单位。

        initDirs(); //初始化tomcat的目录

        // Before digester - it may be needed

        initNaming();//初始化命名

        // Create and execute our Digester
        Digester digester = createStartDigester();

        InputSource inputSource = null;
        InputStream inputStream = null;
        File file = null;
        try {
            file = configFile();
            inputStream = new FileInputStream(file);
            inputSource = new InputSource("file://" + file.getAbsolutePath()); //加载本置文件conf/server.xml
        } catch (Exception e) {
            ;
        }
        if (inputStream == null) {
            try {
                inputStream = getClass().getClassLoader()
                    .getResourceAsStream(getConfigFile());
                inputSource = new InputSource
                    (getClass().getClassLoader()
                     .getResource(getConfigFile()).toString());
            } catch (Exception e) {
                ;
            }
        }

        // This should be included in catalina.jar
        // Alternative: don't bother with xml, just create it manually.
        if( inputStream==null ) {
            try {
                inputStream = getClass().getClassLoader()
                .getResourceAsStream("server-embed.xml");
                inputSource = new InputSource
                (getClass().getClassLoader()
                        .getResource("server-embed.xml").toString());
            } catch (Exception e) {
                ;
            }
        }
       

        if ((inputStream == null) && (file != null)) {
            log.warn("Can't load server.xml from " + file.getAbsolutePath());
            return;
        }

        try {
            inputSource.setByteStream(inputStream);
            digester.push(this);
            digester.parse(inputSource);
            inputStream.close();
        } catch (Exception e) {
            log.warn("Catalina.start using "
                               + getConfigFile() + ": " , e);
            return;
        }

        // Stream redirection
        initStreams();

        // Start the new server
        if (server instanceof Lifecycle) {
            try {
                server.initialize();
            } catch (LifecycleException e) {
                log.error("Catalina.start", e);
            }
        }

        long t2 = System.nanoTime();
        if(log.isInfoEnabled())
            log.info("Initialization processed in " + ((t2 - t1) / 1000000) + " ms");

    }
   
    我们来一行行的分析上面的为码:
    1)long t1 = System.nanoTime();//返回最准确的可用系统计时器的当前值,以毫微秒为单位。
    此时间主要是用于计算启动的时间,从最后看,只是用于记录进日中用到,
     if(log.isInfoEnabled())
            log.info("Initialization processed in " + ((t2 - t1) / 1000000) + " ms");
           
    2)initDirs();
    初始化目录,也就是把一些目录作为属性写入system属性中,主要是tomcat的一些系统目录,如:
    System.setProperty("catalina.base",
                               catalinaHome);
     System.setProperty("catalina.home", catalinaHome);
     把这些tomcat目录信息写入系统环境变量用,用于后面程序要用到。
    
    3)initNaming();
    也是把一些相关属性写入环境变量中,不过对于作用,目前并不太清楚,如:
     System.setProperty("catalina.useNaming", "false");
     System.getProperty(javax.naming.Context.URL_PKG_PREFIXES);
     System.setProperty(javax.naming.Context.URL_PKG_PREFIXES, value);
    
    4)Digester digester = createStartDigester();
    这个类主要作用就是把配置文件server.xml转换成对象,以便TOMCAT使用和调用。这个类的使用细节有点复杂,目前只知道
    它的作用就是从server.xml中把配置信息加载,并用于初始化server实例,至于初始化的细节要进一步的研究。
    Server是一个接口,位于包:org.apache.catalina
    他的实现类有:StandardServer,StandardService 都位于包:org.apache.catalina.core
    如下:
    public final class StandardServer
    implements Lifecycle, Server, MBeanRegistration
    ---------------------------------------------------------
    public class StandardService
        implements Lifecycle, Service, MBeanRegistration
    可见它们都实现了Lifecycle, Service, MBeanRegistration 三个接口。三个字面意思应为生命周期,服务,Mbean注册器。
   
   
    总结:此类的作用也就是继Bootstrap.java过来,在启动时执行了load()和start();
    load()的作用如下:
    1)返回最准确的可用系统计时器的当前值,以毫微秒为单位。
    2)初始化tomcat目录。
    3)设置一些环境参数,有关于命名的。
    4)得到Digester实例,用于解释server.xml文档,并初化服务器,设置server实例。
    5)设置日志输出和错误输出的地方.
    6)server.initialize(); //服务器进行初始化.
   
    start()的作用如下:
    1)执行server中的start方法:
    ((Lifecycle) server).start();
分享到:
评论

相关推荐

    Tomcat输出catalina.out的大小控制

    在Tomcat的`conf`目录下,有一个名为`logging.properties`的文件,它是Java日志系统(java.util.logging)的配置文件。你可以通过修改此文件来定制日志行为。例如,你可以创建一个文件Handler,设置其日志文件大小...

    tomcat7修改catalina.out日志按天生成jar文件

    例如,添加`java.util.logging.FileHandler.pattern`和`java.util.logging.FileHandler.limit`等属性,设置日志文件的命名规则(例如包含日期)以及每个文件的最大大小。 重起Tomcat后,新的配置才会生效。这意味着...

    tomcat 下catalina.out 日志乱码问题处理

    总之,解决Tomcat的`catalina.out`日志乱码问题,需要综合考虑Java环境、操作系统环境以及具体应用的配置。通过调整这些设置,可以确保日志信息正确无误地以预期的编码格式呈现,从而便于进行有效的故障排查和运维...

    Tomcat日志catalina.out过大解决方案--使用logback按日轮转.rar

    java.util.logging.ConsoleHandler.level = OFF ``` 这里我们关闭了JULI(Tomcat的默认日志系统),并让`Logback`接管日志输出。 最后,将`logback.xml`文件放置在`Tomcat`的`conf`目录下,重启`Tomcat`,日志管理...

    Linux tomcat下catalina.out日志文件分割

    tomcat默认使用Java.util.logging记录日志,默认只记录tomcat的日志,不记录应用的日志。tomcat支持采用log4j进行日志记录,配置方法如下: 1.更新最新的tomcat_juli.jar包到./bin/目录下; 2.拷贝log4j.jar,lo4j....

    Linux下tomcat日志catalina.out按天(/周)分割

    在Linux环境中,Tomcat作为广泛使用的Java应用服务器,其日志管理是系统监控和问题排查的重要环节。默认情况下,Tomcat的主要日志输出文件是`catalina.out`,它记录了服务器启动、运行和关闭过程中的所有标准输出和...

    windows下tomcat的catalina.out按天自动分割

    在部署Java Web应用时,经常使用Apache Tomcat作为Web服务器。随着应用程序的运行,Tomcat会生成大量的日志文件,其中最重要的是`catalina.out`。这个文件用于记录Tomcat运行期间的各种信息,包括但不限于启动、关闭...

    Tomcat使用Log4j输出catalina.out日志

    在Tomcat中,默认的日志是通过catalina.out文件记录的,它使用java.util.logging包提供的日志系统。不过,catalina.out文件不具备按天滚动的功能,随着时间的推移,它会变得越来越大,不利于日志文件的管理。另外,...

    tomcat-6.0.33.catalina.jar.zip

    Catalina是Tomcat服务器的主要实现部分,它完全实现了Java Servlet和JavaServer Pages(JSP)规范,为开发者提供了部署和运行Web应用程序的环境。在"tomcat-6.0.33.catalina.jar.zip"这个压缩包中,我们可以看到...

    org.apache.catalina.connector.ClientAbortException和TOMCAT的日志配置

    问题1:TOMCAT下载文件出错:org.apache.catalina.connector.ClientAbortException. 问题2:TOMCAT记录接收数据大小、发送数据大小和请求处理时间

    在tomcat的catalina.sh文件中添加了jconsole检测内存配置

    标题中的“在tomcat的catalina.sh文件中添加了jconsole检测内存配置”涉及到的是Java应用程序服务器Tomcat的配置以及使用JConsole进行性能监控的知识点。Tomcat是Apache软件基金会的一个开源项目,广泛用于部署Java ...

    Tomcat下使用Log4j 接管 catalina.out 日志文件生成方式

    java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter ``` 这里我们关闭了默认的控制台日志,并设置了日志输出到`catalina.out`的同级目录。 4. **启动Tomcat**:重新启动Tomcat,...

    tomcat下用Log4j 按文件大小,生成catalina.out日志文件

    在Java Web开发中,Tomcat是一个广泛使用的应用服务器,它负责运行我们的Servlet和JSP应用程序。日志系统是任何应用程序的重要组成部分,它帮助开发者在调试、监控和问题排查时收集必要的信息。Log4j是Apache的一个...

    使用cronolog工具切分Tomcat的catalina.out日志文件

    在Tomcat这样的Java应用服务器中,`catalina.out`是默认的日志文件,记录了Tomcat启动、运行过程中的所有信息,包括错误、警告以及普通日志。随着服务器运行时间的增长,`catalina.out`可能会变得非常庞大,不仅占用...

    tomcat-catalina-7.0.27.jar.zip

    2. **Catalina工作流程** 当一个HTTP请求到达Tomcat时,Catalina会执行以下步骤: - 连接器接收请求,解析HTTP头信息,然后将请求对象传递给Catalina。 - Engine根据请求的域名找到对应的Host。 - Host查找与URL...

    Catalina.out日志分割工具

    了解和正确使用`Catalina.out`日志分割工具,是每个Tomcat管理员必备的技能之一。在实际操作中,还需要结合日志分析工具,如Logstash、ELK(Elasticsearch、Logstash、Kibana)栈等,进一步提升日志数据的价值。

    tomcat--catalina.docx

    在Tomcat中,Catalina扮演着至关重要的角色,它提供了对Java Web应用的管理和运行环境。 **Catalina的工作原理** Catalina通过解析Web应用的配置文件(如`web.xml`)来初始化和管理Servlet。在这个过程中,`...

    Tomcat8安装包,Tomcat安装包-8.5.85版本

    Apache Tomcat 8.5.85 是一个广泛使用的开源软件,它是一个符合Java Servlet和JavaServer Pages(JSP)规范的应用服务器,主要用于部署和运行Java Web应用程序。在这个8.5.85版本中,Tomcat提供了对Java EE 7的支持...

    apache-tomcat-7.0.69.zip

    apache-tomcat软件,windows-64版本 日志可查看catalina.out,如下: at org.springframework.web.servlet.mvc.method.annotation... at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)

Global site tag (gtag.js) - Google Analytics