主要流程

bootstrap main

                    |

                init (初始化三个classloader(包括common、server、shared,其中common是后面两个的父类加载器,common主要用于tomcat相关类的加载,应该是catalina与用户应用公用的一些类,server主要用于catalina相关类的加载,而shared主要是用户应用相关类得的加载,实现了catalina相关类与用户类的隔离),并用server加载类catalina类, 这就是为什么bootstrap这样一个类来启动而不是直接用catalina的原因,类隔离!!!)

                    |

                 根据命令行参数执行相应动作,其实就是调用catalina的方法,这里启动的话应是start方法

                    

catalina start

                |

             load (这里是解析server.xml,创建server对象并初始化)

                |

             StandardServer.init  (包括其内部services、containers(engine(只能有一个)、host 、context、wrapper)、executor、connectors的初始化 )

                |

             StandardServer.start(调用上面组件的start方法)


connector init

                    |

                 protocolHandler.init   (protocolHandler是一个对象引用,这个对象的类是由server.xml中connector元素中的protocol属性定义的,项目中常用Http11NioProtocol)

                    |

                Http11NioProtocol.init

                    | 

                NioEndpoint.init

                   |

               NioEndpoint.bind(创建serversocketchannel)