最近有了点空闲,看tomcat的书和相关的网上资料,总是有点模模糊糊的,于是就有了要读一读源码的想法,经过一天的阅读,目前整理了一个小流程,当然,其中很多的配置文件的加载和解析,没有在这里写。
1、先从Bootstrap.java的main函数开始运行,然后进行各种参数的初始化,最后运行到41行的 daemon.start();这个方法,这个方法是正式开始进行运行的,这个方法会调用到Catalina.java中的start方法,
2、进入到Catalina.start方法中,重点是 ((Lifecycle) getServer()).start()这个方法,进行了启动,前面的都是为了start的准备
3、然后进入到StandardServer这个类的start方法中进行初始化的一些操作,然后进行操作
4、 StandardServer这个类的 ((Lifecycle) services[i]).start();748行的地方,这个地方是Server开始运行service,然后进入到StandardService类中,找到start方法
5、查看StandardService的start方法, ((Lifecycle) connectors[i]).start();第536行的地方,进行连接的启动
6、进入到Connector这个类中,查看start()这个方法, protocolHandler.start();第1099行的地方,进行各种协议的连接的处理,因为是通过反射的,因此,如果是调用了http协议进行的操作,那就会调用到Http1Protocol
7、此处Http1Protocol的start方法,会进行一个 endpoint.start();第203行的调用,就是一个启用新的线程的操作,跳转到JIoEndpoint.java中的start()方法
8、查看start方法,是一个多线程的类,因此看352行 Socket socket = serverSocketFactory.acceptSocket(serverSocket); //这里是监听http请求的地方 serverSocketFactory.initSocket(socket);
9、连接会阻塞在这里,等待有连接来,可以打上断点,此时可以输入http://localhost:8080/这个网址,可以看到建立连接了,后面怎么处理请求的问题,以后有空再进入下一步研究
另外,源码里面的基本上都是用的接口反射进行调用,写的确实不错,
********************************欢迎各位大拿拍砖********************************************