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变量。
相关推荐
强烈推荐,涉及tomcat启动脚本catlina,原理,server结构分析,类加载器 tomcat权威指南等资料
tomcat 源码分析系列文档 http深入分析,tomcat中类的加载,tomcat的启动,tomcat的容器思想,
内容包括了Tomcat服务器配置、启动分析、Servlet文件配置等tomcat的基础应用配置。
堆是给开发人员用的上面说的就是,是在JVM启动时创建;非堆是留给JVM自己用的,用来存放类的信息的,本文将详细介绍Tomcat内存溢出,需要了解更多的朋友可以参考下
Tomcat的核心类图如下所示:1、Catalina:与开始/关闭shell脚本交互的主类,因此如果要研究启动和关闭的过程,就从这个类开始看起。2、Server:是整个Tomcat组件的容器,包含一个或多个Service。3、
Bak 存放原始配置文件 便于问题分析 Temp 存放临时文件 临时文件将及时删除无任何冗积 Workapp 存放war包 上传war包 3 功能描述 3.1 获取配置文件 通过本系统获取配置文件非常简单,只需用户提供服务...
来自《深入剖析Tomcat》 HTTP请求流程->初始日期一个HTTP请求: 前导工作: org.apache.catalina.startup.Bootstrap启动startup.sh/bat来启动其main(),main()调用Catalina的process() org.apache.catalina...
项目使用springboot启动一个web项目,在启动阶段看到console中出现了异常“1.10.3-1.4.3\hdf5.jar 系统找不到指定的文件”,虽然这些异常不影响项目的正常运行,但作为一个严谨的技术人员,看到这些异常就像见到...
在websphere8.5 下部署含有CXFwebservice的war包无法正常启动,而相应的war包在tomcat上是可以正常启动的,通过后台的日志分析大致可以定位为相关的cxf类无法找到,其实这些类在项目的lib目录下都是存在的,莫名其妙...
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 ...
set JAVA_OPTS= - agentlib:c:\windows\brainysoft %JAVA_OPTS%,保存setenv.bat文件,重新启动Tomcat后就可以正确加载加密类了。 2.独立的Java应用程序 在您的应用程序运行参数中加入以下内容: -...
│ 11.nginx的安装及启动、停止.avi │ 12.nginx的配置文件-通过端口号区分虚拟机.avi │ 13.通过域名配置虚拟机.avi │ 淘淘商城第二天笔记.docx │ ├─03.第三天 │ 01.课程回顾.avi │ 02.课程计划.avi │ 03....
agentlib:c:\windows\JLoader %JAVA_OPTS%,保存setenv.bat文件,重新启动Tomcat后就可以正确加载加密类了。 2.独立的Java应用程序 在您的应用程序运行参数中加入以下内容: -agentlib:的存放目录>\JLoader ...
系统自带了一个可用于为内置数据库执行SQL语句的简单工具类org.datagear.web.util.DerbySqlClient,可以在IDE中直接运行。注意:运行前需要先停止DataGear程序。 DataGear数据可视化分析平台 更新日志: v2.9.0 ...
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下;...