兰色精灵 发表于 2015-1-18 11:00:08

发布一篇检察tomcat启动文件都干点啥:Bootstrap.java

C#是盗用了Java的源代码,仿照开发的,原因是Java是开源的啊,盗了也白盗,还有一点,开发C#语言的团队是就是开发Java语言的团队,是微软重金挖过去的啊
在上一章检察tomcat启动文件都干点啥---catalina.bat,说了在catalina.bat中都走了甚么流程,最主要的是,我们得出了以下这段命令:

_EXECJAVA=start"Tomcat""E:ProgramFilesJavajdk1.7.0_40injava"JAVA_OPTS=-Djava.util.logging.config.file="F:apache-tomcat-7.0.8conflogging.properties"-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManagerCATALINA_OPTS=DEBUG_OPTS=-Djava.endorsed.dirs="F:apache-tomcat-7.0.8endorsed"-classpath"F:apache-tomcat-7.0.8inootstrap.jar;F:apache-tomcat-7.0.8in        omcat-juli.jar"-Dcatalina.base="F:apache-tomcat-7.0.8"-Dcatalina.home="F:apache-tomcat-7.0.8"-Djava.io.tmpdir="F:apache-tomcat-7.0.8        emp"MAINCLASS=org.apache.catalina.startup.BootstrapCMD_LINE_ARGS=ACTION=start
个中很主要的一个属性是:MAINCLASS=org.apache.catalina.startup.Bootstrap,Bootstrap在bootstrap.jar中,我们看一下Bootstrap的类图:

从每一个变量和办法的名字的字面上也能也许看出来变量大概办法的感化。
很明显,程序走到Bootstrap的时分起首挪用main办法,main办法是经由过程剧本启动tomcat的出口,我们看一下main办法中完成的内容:

if(daemon==null){
//Dontsetdaemonuntilinit()hascompleted
Bootstrapbootstrap=newBootstrap();
try{
bootstrap.init();
}catch(Throwablet){
handleThrowable(t);
t.printStackTrace();
return;
}
daemon=bootstrap;
}else{
//Whenrunningasaservicethecalltostopwillbeonanew
//threadsomakesurethecorrectclassloaderisusedtoprevent
//arangeofclassnotfoundexceptions.
Thread.currentThread().setContextClassLoader(daemon.catalinaLoader);
}

try{
Stringcommand="start";
if(args.length>0){
command=args;
}

if(command.equals("startd")){
args="start";
daemon.load(args);
daemon.start();
}elseif(command.equals("stopd")){
args="stop";
daemon.stop();
}elseif(command.equals("start")){
daemon.setAwait(true);
daemon.load(args);
daemon.start();
}elseif(command.equals("stop")){
daemon.stopServer(args);
}elseif(command.equals("configtest")){
daemon.load(args);
if(null==daemon.getServer()){
System.exit(1);
}
System.exit(0);
}else{
log.warn("Bootstrap:command""+command+""doesnotexist.");
}
}catch(Throwablet){
//UnwraptheExceptionforclearererrorreporting
if(tinstanceofInvocationTargetException&&
t.getCause()!=null){
t=t.getCause();
}
handleThrowable(t);
t.printStackTrace();
System.exit(1);
}能够看出main办法次要完成了两个功效:
(1)初始化一个保卫历程变量。
(2)加载参数,剖析命令,并实行。
上面是初始化保卫历程的实行历程:

if(daemon==null){
//Dontsetdaemonuntilinit()hascompleted
Bootstrapbootstrap=newBootstrap();
try{
bootstrap.init();
}catch(Throwablet){
handleThrowable(t);
t.printStackTrace();
return;
}
daemon=bootstrap;
}else{
//Whenrunningasaservicethecalltostopwillbeonanew
//threadsomakesurethecorrectclassloaderisusedtoprevent
//arangeofclassnotfoundexceptions.
Thread.currentThread().setContextClassLoader(daemon.catalinaLoader);
}能够看到在bootstrap.init()办法中对bootstrap变量举行初始化,然后将了局前往给daemon。上面看一下init办法中的完成:

publicvoidinit()
throwsException
{

//SetCatalinapath
setCatalinaHome();
setCatalinaBase();

initClassLoaders();

Thread.currentThread().setContextClassLoader(catalinaLoader);

SecurityClassLoad.securityClassLoad(catalinaLoader);

//Loadourstartupclassandcallitsprocess()method
if(log.isDebugEnabled())
log.debug("Loadingstartupclass");
Class<?>startupClass=
catalinaLoader.loadClass
("org.apache.catalina.startup.Catalina");
ObjectstartupInstance=startupClass.newInstance();

//Setthesharedextensionsclassloader
if(log.isDebugEnabled())
log.debug("Settingstartupclassproperties");
StringmethodName="setParentClassLoader";
Class<?>paramTypes[]=newClass;
paramTypes=Class.forName("java.lang.ClassLoader");
ObjectparamValues[]=newObject;
paramValues=sharedLoader;
Methodmethod=
startupInstance.getClass().getMethod(methodName,paramTypes);
method.invoke(startupInstance,paramValues);

catalinaDaemon=startupInstance;

}init办法中对classLoader举行了初始化,设置了援用的catalinaDaemon变量。
<p>
你说是sun公司对她研究的透还是微软?针对自己工具开发的.net性能上肯定会站上风的。

只想知道 发表于 2015-1-20 12:31:59

你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?

金色的骷髅 发表于 2015-2-5 23:56:32

我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。

蒙在股里 发表于 2015-2-14 09:28:11

我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。

老尸 发表于 2015-3-4 05:17:03

是一种为 Internet发展的计算机语言

简单生活 发表于 2015-3-11 17:29:20

Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台

小魔女 发表于 2015-3-19 03:40:00

应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展

小妖女 发表于 2015-3-27 07:08:16

Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。

再见西城 发表于 2015-3-27 07:08:16

任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言

admin 发表于 2015-3-27 07:08:17

是一种语言,用以产生「小应用程序(Applet(s))

冷月葬花魂 发表于 2015-3-27 07:08:18

应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展

小女巫 发表于 2015-3-27 07:08:19

是一种为 Internet发展的计算机语言
页: [1]
查看完整版本: 发布一篇检察tomcat启动文件都干点啥:Bootstrap.java