03. Tomcat 请求流程图
2022-03-20 13:56:43 0 举报
Tomcat 请求流程图
作者其他创作
大纲/内容
Host
创建 Servlet 对象初始化 Servlet 对象 准备 filter 链调用 chain.doFilter()调用 servlet.service()
1. Acceptor 一直接收 8080 端口的请求,会尝试从 endpoint.serverSocketAccept() 获取 socket 对象2. 将 socket 对象封装成 socketWrapper3. 调用 poller.register(socketWrapper) 注册到 eventCache 中(创建 PollerEvent 添加到事件队列 SynchronizedStack<PollerEvent>)
getContext
Engine Pipline(定义了一系列 Valve)
Context Pipline(定义了一系列 Valve)
1. 通过 getHandler() 获取到对应的协议处理器【Http11NioProtocol】2. 调用 protocol 的 process() 方法处理请求3. 交给 CoyoteAdapter 的 service() 方法处理4. 经过 Engine -> Host -> Context pipline 的一系列 Valve 处理后,交给 Wrapper 处理5. 构造 Servlet 对象,初始化过滤器链,先调用 chain.doFilter(),再调用 servlet.service()
NonLoginAuthenticator
events queue它是 SynchronizedQueue 同步阻塞队列
Host Pipline(定义了一系列 Valve)
Worker
SocketProcessor
getHost
遵循了 Servlet 规范的生命周期
NioChannel
ErrorReportValve
Wrapper Pipline(定义了一系列 Valve)
Wrapper本质就是 Servlet 的包装类
getContainer
把 coyote 的 Request 转成 Servlet 规范的 Request把 coyote 的 Response 转成 Servlet 规范的 Response将用户请求与 Tomcat 底层组件进行适配
Acceptor
PollerEvent
Poller
StandardEngineValve
Engine
StandardContextValve
Context
1. Poller 一直用 events.poll() 拉取数据2. 读取 socket 的内容并包装成 SocketProcessorBase3. 获取 worker 线程池,交给它处理
getWrapper
CoyoteAdapter.service()处理请求
StandardHostValve
AccessLogValve
0 条评论
下一页