仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 517|回复: 11
打印 上一主题 下一主题

[学习教程] 发布一篇检察tomcat启动文件都干点啥:Bootstrap.java

[复制链接]
兰色精灵 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:00:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
C#是盗用了Java的源代码,仿照开发的,原因是Java是开源的啊,盗了也白盗,还有一点,开发C#语言的团队是就是开发Java语言的团队,是微软重金挖过去的啊
在上一章检察tomcat启动文件都干点啥---catalina.bat,说了在catalina.bat中都走了甚么流程,最主要的是,我们得出了以下这段命令:
  1. _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办法中完成的内容:
  1. if(daemon==null){
  2. //Dontsetdaemonuntilinit()hascompleted
  3. Bootstrapbootstrap=newBootstrap();
  4. try{
  5. bootstrap.init();
  6. }catch(Throwablet){
  7. handleThrowable(t);
  8. t.printStackTrace();
  9. return;
  10. }
  11. daemon=bootstrap;
  12. }else{
  13. //Whenrunningasaservicethecalltostopwillbeonanew
  14. //threadsomakesurethecorrectclassloaderisusedtoprevent
  15. //arangeofclassnotfoundexceptions.
  16. Thread.currentThread().setContextClassLoader(daemon.catalinaLoader);
  17. }
  18. try{
  19. Stringcommand="start";
  20. if(args.length>0){
  21. command=args[args.length-1];
  22. }
  23. if(command.equals("startd")){
  24. args[args.length-1]="start";
  25. daemon.load(args);
  26. daemon.start();
  27. }elseif(command.equals("stopd")){
  28. args[args.length-1]="stop";
  29. daemon.stop();
  30. }elseif(command.equals("start")){
  31. daemon.setAwait(true);
  32. daemon.load(args);
  33. daemon.start();
  34. }elseif(command.equals("stop")){
  35. daemon.stopServer(args);
  36. }elseif(command.equals("configtest")){
  37. daemon.load(args);
  38. if(null==daemon.getServer()){
  39. System.exit(1);
  40. }
  41. System.exit(0);
  42. }else{
  43. log.warn("Bootstrap:command""+command+""doesnotexist.");
  44. }
  45. }catch(Throwablet){
  46. //UnwraptheExceptionforclearererrorreporting
  47. if(tinstanceofInvocationTargetException&&
  48. t.getCause()!=null){
  49. t=t.getCause();
  50. }
  51. handleThrowable(t);
  52. t.printStackTrace();
  53. System.exit(1);
  54. }
复制代码
能够看出main办法次要完成了两个功效:
(1)初始化一个保卫历程变量。
(2)加载参数,剖析命令,并实行。
上面是初始化保卫历程的实行历程:
  1. if(daemon==null){
  2. //Dontsetdaemonuntilinit()hascompleted
  3. Bootstrapbootstrap=newBootstrap();
  4. try{
  5. bootstrap.init();
  6. }catch(Throwablet){
  7. handleThrowable(t);
  8. t.printStackTrace();
  9. return;
  10. }
  11. daemon=bootstrap;
  12. }else{
  13. //Whenrunningasaservicethecalltostopwillbeonanew
  14. //threadsomakesurethecorrectclassloaderisusedtoprevent
  15. //arangeofclassnotfoundexceptions.
  16. Thread.currentThread().setContextClassLoader(daemon.catalinaLoader);
  17. }
复制代码
能够看到在bootstrap.init()办法中对bootstrap变量举行初始化,然后将了局前往给daemon。上面看一下init办法中的完成:
  1. publicvoidinit()
  2. throwsException
  3. {
  4. //SetCatalinapath
  5. setCatalinaHome();
  6. setCatalinaBase();
  7. initClassLoaders();
  8. Thread.currentThread().setContextClassLoader(catalinaLoader);
  9. SecurityClassLoad.securityClassLoad(catalinaLoader);
  10. //Loadourstartupclassandcallitsprocess()method
  11. if(log.isDebugEnabled())
  12. log.debug("Loadingstartupclass");
  13. Class<?>startupClass=
  14. catalinaLoader.loadClass
  15. ("org.apache.catalina.startup.Catalina");
  16. ObjectstartupInstance=startupClass.newInstance();
  17. //Setthesharedextensionsclassloader
  18. if(log.isDebugEnabled())
  19. log.debug("Settingstartupclassproperties");
  20. StringmethodName="setParentClassLoader";
  21. Class<?>paramTypes[]=newClass[1];
  22. paramTypes[0]=Class.forName("java.lang.ClassLoader");
  23. ObjectparamValues[]=newObject[1];
  24. paramValues[0]=sharedLoader;
  25. Methodmethod=
  26. startupInstance.getClass().getMethod(methodName,paramTypes);
  27. method.invoke(startupInstance,paramValues);
  28. catalinaDaemon=startupInstance;
  29. }
复制代码
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好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
老尸 该用户已被删除
5#
发表于 2015-3-4 05:17:03 | 只看该作者
是一种为 Internet发展的计算机语言
简单生活 该用户已被删除
6#
发表于 2015-3-11 17:29:20 | 只看该作者
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
小魔女 该用户已被删除
7#
发表于 2015-3-19 03:40:00 | 只看该作者
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
小妖女 该用户已被删除
8#
发表于 2015-3-27 07:08:16 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
再见西城 该用户已被删除
9#
发表于 2015-3-27 07:08:16 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
admin 该用户已被删除
10#
发表于 2015-3-27 07:08:17 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
冷月葬花魂 该用户已被删除
11#
发表于 2015-3-27 07:08:18 | 只看该作者
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
小女巫 该用户已被删除
12#
发表于 2015-3-27 07:08:19 | 只看该作者
是一种为 Internet发展的计算机语言
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-16 03:31

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表