官方的启动说明文档位置 :Tomcat.x.x.x/webapps/docs/architecture/startup 目录下
我这里查看的是Tomecat7 的 Tomcat 5 Startup Sequence 文档如下点击打开链接 在Eclipse中的类加载日志如下点击打开链接
核心类
1:org.apache.catalina.startup.Bootstrap
2:org.apache.catalina.startup.Catalina
文档中显示大体分为两步
1:当接受到启动命令时 初始化类加载器 初始化核心类的 init()
2:初始化Tomcat 的信息 加载资源 等待请求的到来
当接受到启动命令时 详细动作(第一步)
在 org.apache.catalina.startup.Bootstrap 类的 init() 方法中
1:装配类加载器 commonLoader / sharedLoader / catalinaLoader
2:
加载启动管理类 org.apache.catalina.startup.Catalina
第二步又分多小步
1:初始化Tomcat 信息
1) 设置等待参数为true
2) 初始化堆栈/读取配置/启动监听/初始化多个结果集/输出加载信息/初始化以及注册所有对象为JMX代理
(在这一步中设置了单一的入口链接 http://127.0.0.1:8080)
2:Catalina 的初始化
1)首先是加载服务StandardService -> starts Engine (ContainerBase ->Logger,Loader,Realm,Cluster etc)类的加载与初始化 / 开启线程上下文/加载需要部署的项目寻找路径是(webapps & conf/Catalina/localhost/*.xml) 然后加载处理应用的web.xml
2)启动一个线程来监听context/web.xml 如果更改就重新加载
3:当接收到请求 (会一直调用协议处理器)
1)单独开启的一个线程 等待接受请求的到来
2)获取到一个请求时分配一个TCP链接来处理请求(提供了一个容器)
(HTTP 请求在一个内部缓冲区中解析 [请求行/标头] 并将结果存储在结果集中 request )
3)解析完请求之后会将参数绑定到线程/并装载要使用的类以及实例的编译JSP
4)调用Servlet
PS:
1:以上内容简化了很多的步骤 更为详细可以参考官方的文档
2:在类加载日志中打印的是Tomcat启动后的所有类的加载 包含了JDK 中的
434行加载了类
org.apache.catalina.startup.Bootstrap
然后加载
日志相关类
498行加载了类
org.apache.catalina.startup.CatalinaProperties
819行加载了类
org.apache.catalina.startup.Catalina