bin/startup.bat批处理文件解读:http://blog.csdn.net/pangdingshan/article/details/7214293
:startup.bat 的作用主要是检查catalina.bat 执行所需环境,并调用catalina.bat 批处理文件
bin/catalina.bat批处理文件解读:http://www.cnblogs.com/fantiantian/p/3623740.html
:caltalina.bat的作用是生成如下命令:
转化为如下命令:
Using CATALINA_BASE: "F:\DBSPACEBAC\apache-tomcat-7.0.62-src\output\build"
Using CATALINA_HOME: "F:\DBSPACEBAC\apache-tomcat-7.0.62-src\output\build"
Using CATALINA_TMPDIR: "F:\DBSPACEBAC\apache-tomcat-7.0.62-src\output\build\temp"
Using JRE_HOME: "G:\Program Files\Java\jdk1.6.0_45"
Using CLASSPATH: "F:\DBSPACEBAC\apache-tomcat-7.0.62-src\output\build\bin\bootstrap.jar;F:\DBSPACEBAC\apache-tomcat-7.0.62-src\output\build\bin\
tomcat-juli.jar"
start "Tomcat" "G:\Program Files\Java\jdk1.6.0_45\bin\java.exe"
-Djava.util.logging.config.file="F:\DBSPACEBAC\apache-tomcat-7.0.62-src\output\build\conf\logging.properties"
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.endorsed.dirs="F:\DBSPACEBAC\apache-tomcat-7.0.62-src\output\build\endorsed"
-Dcatalina.base="F:\DBSPACEBAC\apache-tomcat-7.0.62-src\output\build"
-Dcatalina.home="F:\DBSPACEBAC\apache-tomcat-7.0.62-src\output\build"
-Djava.io.tmpdir="F:\DBSPACEBAC\apache-tomcat-7.0.62-src\output\build\temp"
-classpath "F:\DBSPACEBAC\apache-tomcat-7.0.62-src\output\build\bin\bootstrap.jar;F:\DBSPACEBAC\apache-tomcat-7.0.62-src\output\build\bin\tomcat-juli.jar"
org.apache.catalina.startup.Bootstrap start
实际执行的命令为:
java -Djava.util.logging.config.file="F:\DBSPACEBAC\apache-tomcat-7.0.62-src\output\build\conf\logging.properties"
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.endorsed.dirs="F:\DBSPACEBAC\apache-tomcat-7.0.62-src\output\build\endorsed"
-Dcatalina.base="F:\DBSPACEBAC\apache-tomcat-7.0.62-src\output\build"
-Dcatalina.home="F:\DBSPACEBAC\apache-tomcat-7.0.62-src\output\build"
-Djava.io.tmpdir="F:\DBSPACEBAC\apache-tomcat-7.0.62-src\output\build\temp"
-classpath "F:\DBSPACEBAC\apache-tomcat-7.0.62-src\output\build\bin\bootstrap.jar;F:\DBSPACEBAC\apache-tomcat-7.0.62-src\output\build\bin\tomcat-juli.jar"
org.apache.catalina.startup.Bootstrap start
例如:可以在运行前配置一些属性,比如路径什么的。java -Dconfig="d:/config/config.xml" Abc
这样在Abc中就可以通过System.getProperty("config");获得这个值了
[args..]class类中需要的参数
总结以上的Tomcat启动bat脚本,为如下逻辑:
startup.bat=catalina.bat start=java Bootstrap start(附带-D、-classpath选项)
参考: 《Tomcat8源码编译及导入Eclipse中研究》http://www.cnblogs.com/lanxuezaipiao/p/3640923.html
需要注意:
1,jdk版本和tomcat版本需要对应,例如:tomcat7使用jdk1.6版本即可,使用高的jdk版本,在使用ant命令时会报类编译错误。
2,导入的包设置为项目的source:
将java设置成source folder,java build path ->Source->Add folder...->选择java。
3,可以通过tomcat源码目录中输入命令:ant ide-eclipse获取需要的jar包
加载的JAR报为ant目录下lib中的ant.jar,将base.path的值对应的文件中将所有jar包加载
3,找到类:org.apache.catalina.startup包中的Bootstrap类。
run as:在Arguments的VM arguments中设置
-Dcatalina.home="d:\output\build"
参考:《查看tomcat启动文件都干点啥---Bootstrap.java》http://www.cnblogs.com/fantiantian/p/3638016.html
在此文中我们得出在(tomcat7.0版本中):
(1)Bootstrap中如何通过创建的commonLoader=catalinaLoader=sharedLoader来加载类。
(2)在Bootstrap中使用反射机智来加载来调用catalinaDaemon中的方法。
(3)如何获取catalina.properties配置文件。
==========================================
在这里我们知道TOMCAT启动过程,但是这里并没有解答tomcat作为容器是如何工作的,在了解这个问题之前,我们先来了解下容器的作用,如此再回来带着目标看tomcat的源码。