最近把设计模式看了,并进行了实践和初步的理解。 不得不说,有朋友将是否会设计模式作为java程序员的判别标准。这个真的是有一定道理的。 以前尽管想看jdk的源码也好,想看tomcat或者其他开源框架的源码也好,根本无从下手 。。。 就算勉强看下去,最多也就看一两个简单的类。 稍微复杂一点的就game over了。 我想这也是自学java或者很多同学碰到的一个所谓瓶颈吧。在学校反正我们老师是不会交了。 所幸这个假期看了并做了一些粗陋的理解。
不知道我这个死脑筋怎么回事,每接受一个事物,尤其是抽象的比如tcp/ip 的5层模型,tomcat容器,spring框架的运行原理等,教科书或者网上都有相应的解释,以及一些运行的模型图。 自己虽然看了,也知道了这个知识点。 可是心里还是有一种将信将疑的感觉,关键是这种知识当时记住了,不久又给忘了。 真的很苦恼,不知道是不是强迫症。 所以这就让我没有办法只有去看源码,发现了它的运行过程之后,你才从心底里感觉你确实学会了它。
世界之大,我们想做的很多事情可能已经有前辈做过。 看了一个大牛的博客写的一系列关于tomcat启动过程的源码,网址是: 结合自己的理解,对于以前已经看了无数遍的tomcat容器的启动进行一波整理。
首先我们知道tomcat要在java环境下运行。 下载好tomcat之后,启动它的 startup.bat 这里面其实是一些doc命令,它会启动catelina.bat,运行一些命令,之后会新开一个窗口,名字叫做Tomcat,使用java.exe程序调用org.apache.catalina.startup.Bootstrap类,里面包含了入口方法main();
前面就是一些jvm的启动加载机制之类的,前面已经了解过。这里到了main方法里面。 在分为两大部分。一部分主要为了初始化。一部分为了完成tomcat的启动以及退出。 注意在初始化阶段,Bootsrap类的初始化时设置了一些自定义类加载器,分别为commonClassLoader,calatinaClassLoader,shareClassLoader。 之后就是从bootstrap 到 StandardServer 到 service 到 connector 到 wrapper一路init 或者load。
完后就是start,之后就是stop。 原来中途还有一个异常退出的监听线程,叫做shutDownHook,以前从来没听说过。 非常有趣。