Tomcat 服务器启动及请求处理流程
2021-09-19 15:42:32 1 举报
Tomcat 服务器关键组件的启动及其请求处理源码流程
作者其他创作
大纲/内容
反射调用 setServer()
9. connector.init()
Acceptor
SocketProcessorBase
30. addEvent()
16. deployDirectories()
9. processor.process()
子类实现
30. configureStart()
Tomcat
15. 子类实现 bind()
DeployDirectory
32. 开启每秒1次的定时任务,检查等待处理的 Processor 是否超时,此处是异步请求超时处理的关键
反射创建对象
new NioSocketWrapper()
findChildren()
31. getUtilityExecutor().scheduleWithFixedDelay()
15. 加载指定目录下的文件,创建 Context
ApplicationFilterFactory
NioSocketWrapper
8. engine.init()
23. 父类实现start()
NioEndpoint
26. host.addChild()
NioSocketWrapper
回调监听器
36. 至此,tomcat 的 4 层容器全部启动
反射调用 addService()
6. getServer().init()
24. filterChain.doFilter()
Acceptor 死循环处理 socket 连接接收
7. getHandler().process()
Connector
run()
Http11InputBuffer
32. configureContext()
Digester
17. getAdapter().service()
26. 父类实现 startAcceptorThread()
7. services[i].init()
24. endpoint.start()
父类 start()
5. digester.parse()
super.startInternal()
StandardEngineValve
SocketProcessor
11. setSocketWrapper()
CoyoteAdapter
10. server.start()
initInternal()
AbstractProcessorLight
子类 initInternal()
12. 解析HTTP 请求的请求行,此步骤为组装底层的 Request/Response 对象
19. host.getPipeline().getFirst().invoke()
Catalina
1. main()
StandardWrapperValve
12. endpoint.init()
new StandardWrapperValve()
13. child.start()
HttpServlet
23. ApplicationFilterFactory.createFilterChain()
子类 startInternal()
26. servlet.service()
14. setState()
10. service()
new PollerEvent()
18. 此处进入Container 容器处理流程
fireLifecycleEvent()
AbstractHttp11Protocol
HostConfig
Http11NioProtocol
9. start()
FrameworkServlet
NioChannel
36. startInternal()
DispatcherServlet
21. connector.start()
ApplicationFilterChain
new SocketProcessor()
ConnectionHandler
34. 解析 web.xml 文件获得的 Servlet 包装在 StandardWrapper 中
20. startInternal()
6. executor.execute(sc)
10.2 protocolHandler.setAdapter()
AbstractEndpoint
28. endpoint.setSocketOptions()
27. endpoint.serverSocketAccept()
1. 发出请求
StandardHostValve
父类实现
25. internalDoFilter()
父类 init()
31. webConfig()
PollerEvent
LifecycleBase
28. startInternal()
StandardEngine
27. doGet()
3. catalina.load()
34. wrapper.setServletClass()
AbstractProtocol
19. services[i].start()
StandardWrapper
setStateInternal()
child.start()
创建 StandardWrapper
doRun()
StandardContext
super.addChild()
子类实现 startInternal()
32. startAsyncTimeout()
StandardServer
Poller
2. init()
5. createSocketProcessor()
4. processSocket()
14. socketWrapper.read()
ContextConfig
18. connector.getService().getContainer().getPipeline().getFirst().invoke()
new NioEndpoint()
父类实现 start()
new StandardHostValve()
StandardService
13. 父类实现 init()
2. run()
35. context.addChild()
父类实现 init()
new Acceptor()
10.1 new CoyoteAdapter()
Poller 死循环监听 socket,处理socket 注册及读写事件
8. getProtocol().createProcessor()
21. wrapper.getPipeline().getFirst().invoke
29. listener.lifecycleEvent()
13. fill()
new DeployDirectory()
StandardContextValve
service()
startInternal()
addChildInternal()
12. inputBuffer.parseRequestLine()
11. protocolHandler.init()
4. createStartDigester()
15. deployApps()
15. fillReadBuffer()
25. new Poller()
doService() 子类实现
processRequest()
22. wrapper.allocate()
4. 创建一个处理 xml 的工具对象,在处理 server.xml 文件时完成对象创建及属性赋值5. 此处会创建 Tomcat 关键对象,StandardServer、StandardService、Container,并完成属性注入
start()
ContainerBase
25. 加载目录中的文件,反射创建 StandardContext/ContextConfig
22.startInternal()
new Http11Processor()
Http11Processor
StandardHost
17. start()
父类 run()
33. context.createWrapper()
context.findFilterMaps()
protocolHandler.start()
17. config.deployDirectory()
27. child.start()
18. server.start()
14. bindWithCleanup()
new StandardContextValve()
11. services[i].start()
context.addLifecycleListener()
12. engine.start()
29. poller.register()
new StandardEngineValve()
GenericServlet
3. processKey()
4. 创建一个处理 xml 的工具对象,在处理 server.xml 文件时完成对象创建及属性赋值5. 此处会创建 Tomcat 关键对象,StandardServer、StandardService、Connector,并完成属性注入
16. initServerSocket()
20. context.getPipeline().getFirst().invoke()
0 条评论
下一页