这个类位于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的`conf`目录下,有一个名为`logging.properties`的文件,它是Java日志系统(java.util.logging)的配置文件。你可以通过修改此文件来定制日志行为。例如,你可以创建一个文件Handler,设置其日志文件大小...
例如,添加`java.util.logging.FileHandler.pattern`和`java.util.logging.FileHandler.limit`等属性,设置日志文件的命名规则(例如包含日期)以及每个文件的最大大小。 重起Tomcat后,新的配置才会生效。这意味着...
总之,解决Tomcat的`catalina.out`日志乱码问题,需要综合考虑Java环境、操作系统环境以及具体应用的配置。通过调整这些设置,可以确保日志信息正确无误地以预期的编码格式呈现,从而便于进行有效的故障排查和运维...
java.util.logging.ConsoleHandler.level = OFF ``` 这里我们关闭了JULI(Tomcat的默认日志系统),并让`Logback`接管日志输出。 最后,将`logback.xml`文件放置在`Tomcat`的`conf`目录下,重启`Tomcat`,日志管理...
tomcat默认使用Java.util.logging记录日志,默认只记录tomcat的日志,不记录应用的日志。tomcat支持采用log4j进行日志记录,配置方法如下: 1.更新最新的tomcat_juli.jar包到./bin/目录下; 2.拷贝log4j.jar,lo4j....
在Linux环境中,Tomcat作为广泛使用的Java应用服务器,其日志管理是系统监控和问题排查的重要环节。默认情况下,Tomcat的主要日志输出文件是`catalina.out`,它记录了服务器启动、运行和关闭过程中的所有标准输出和...
在部署Java Web应用时,经常使用Apache Tomcat作为Web服务器。随着应用程序的运行,Tomcat会生成大量的日志文件,其中最重要的是`catalina.out`。这个文件用于记录Tomcat运行期间的各种信息,包括但不限于启动、关闭...
在Tomcat中,默认的日志是通过catalina.out文件记录的,它使用java.util.logging包提供的日志系统。不过,catalina.out文件不具备按天滚动的功能,随着时间的推移,它会变得越来越大,不利于日志文件的管理。另外,...
Catalina是Tomcat服务器的主要实现部分,它完全实现了Java Servlet和JavaServer Pages(JSP)规范,为开发者提供了部署和运行Web应用程序的环境。在"tomcat-6.0.33.catalina.jar.zip"这个压缩包中,我们可以看到...
问题1:TOMCAT下载文件出错:org.apache.catalina.connector.ClientAbortException. 问题2:TOMCAT记录接收数据大小、发送数据大小和请求处理时间
标题中的“在tomcat的catalina.sh文件中添加了jconsole检测内存配置”涉及到的是Java应用程序服务器Tomcat的配置以及使用JConsole进行性能监控的知识点。Tomcat是Apache软件基金会的一个开源项目,广泛用于部署Java ...
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter ``` 这里我们关闭了默认的控制台日志,并设置了日志输出到`catalina.out`的同级目录。 4. **启动Tomcat**:重新启动Tomcat,...
在Java Web开发中,Tomcat是一个广泛使用的应用服务器,它负责运行我们的Servlet和JSP应用程序。日志系统是任何应用程序的重要组成部分,它帮助开发者在调试、监控和问题排查时收集必要的信息。Log4j是Apache的一个...
在Tomcat这样的Java应用服务器中,`catalina.out`是默认的日志文件,记录了Tomcat启动、运行过程中的所有信息,包括错误、警告以及普通日志。随着服务器运行时间的增长,`catalina.out`可能会变得非常庞大,不仅占用...
2. **Catalina工作流程** 当一个HTTP请求到达Tomcat时,Catalina会执行以下步骤: - 连接器接收请求,解析HTTP头信息,然后将请求对象传递给Catalina。 - Engine根据请求的域名找到对应的Host。 - Host查找与URL...
了解和正确使用`Catalina.out`日志分割工具,是每个Tomcat管理员必备的技能之一。在实际操作中,还需要结合日志分析工具,如Logstash、ELK(Elasticsearch、Logstash、Kibana)栈等,进一步提升日志数据的价值。
在Tomcat中,Catalina扮演着至关重要的角色,它提供了对Java Web应用的管理和运行环境。 **Catalina的工作原理** Catalina通过解析Web应用的配置文件(如`web.xml`)来初始化和管理Servlet。在这个过程中,`...
Apache Tomcat 8.5.85 是一个广泛使用的开源软件,它是一个符合Java Servlet和JavaServer Pages(JSP)规范的应用服务器,主要用于部署和运行Java Web应用程序。在这个8.5.85版本中,Tomcat提供了对Java EE 7的支持...
apache-tomcat软件,windows-64版本 日志可查看catalina.out,如下: at org.springframework.web.servlet.mvc.method.annotation... at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)