tomcat-源码流程
2022-05-29 19:24:45 26 举报
tomcat的源码流程
作者其他创作
大纲/内容
accept()
构建这个责任链
NioEndPoint
StanderService
广义Connector
init
StandServer
catalina
new poller[0].start
加载servlet
new AsyncTimeout守护线程().start()
Warrer
tomcat启动结束后,accept()进行接收请求,然后把请求注册到poller上,poller进行select(),接收到key后提交给worker进行processKey,也就是把线程形成一个processor进行后提交给worker线程池,在里面执行processor.process(),在process里调用service(),在里面调用连接器适配器CoyoteAdapter.service(),然后执行connector.getService().getContainer().getPipeline().getFirst().invoke(),在invoke()里最后一句又调用host.getPipeline().getFirst().invoke(),在他的最后一句又context.get.....,又调用wrapper.getPipeline()...wrapper.allocate()得到servlet,
while(1){serverSocket.accept() }
3.初始化socket Connector.init()
Host
Context
public Poller() { this.selector = Selector.open(); } Poller的构造方法里面会有选择器
(处理连接请求)
start
bootstrap
NioEndpoint.Acceptor
Mapper
invoke
for services.init
NioEndpoint
创建server
StandardContextValve
执行filter
init()创建catalina对象
AbstractProcessorLight
线程池--处理连接请求和事件请求
CoyoteAdapter
getPoller0()
listenerStart()
start之前会给在poller构造器中Selector.open()
Container
setSocketOptions
ProtocolHandler
new Poller[ 2]守护线程数组处理io读写事件
register
1.font color=\"#ff0000\
service
children
1.调用Engine.init()
load加载xml
Engine
Mapper组件根据请求行的URL值和请求头的Host值匹配由哪个Host容器、Contex容器、Wrapper容器处理请求。
CoyoteAdaptor组件负责将Connector组件和Engine容器关联起来,把生成的 Request对象和响应对象Response传递到Engine容器中,调用 Pipeline。
getAdapter().service
acceptor[0].start
Server
StandardWrapperValve
EndPointEndpoint中的Acceptor监听客户端套接字连接并接收Socket。
用户
new poller[1].start....
从缓冲弄中拿processor或new
Connector
processSocket
FilterChain
servlet
路径映射
解析conf/server.xml
load
new ThreadPoolExecutor
NioEndpoint.SocketProcessor
StandardHostValve
Executor
Service
Context容器的管道开始处理,流程类似,最后执行 Wrapper容器的Pipeline。
doRun()方法
(处理事件请求)
Http11Processor
执行ServletContextListener(springmvc启动)
去线程池中执行processor.doRun
NioEndpoint.Poller
new Acceptor[1]只有一个
Process读取消息报文,解析请求行、请求体、请求头,封装成Request对象
用户请求
EndPoint
AbstractEndpoint
while(1)遍历selector,有事件就processorKey
StandardEngineValve
代码没看到调用
AbstractProtocol.ConnectionHandler
Servlet
2.初始化线程池 Executor
Wrapper容器的管道开始处理,流程类似,最后执行 Wrapper容器对应的Servlet对象 的 处理方法。
Host容器的管道开始处理,流程类似,最后执行 Context容器的Pipeline。
filterStart初始化filter
process()
Engine容器的管道开始处理,管道中包含若干个Valve、每个Valve负责部分处理逻 辑。执行完Valve后会执行基础的 Valve--StandardEngineValve,负责调用Host容器的 Pipeline。
processKey
getHandler().process
processor.process
用户请求访问流程
ContainerBase(父类)
这里Executor就是<Service>中自定义的<Executor>
0 条评论
下一页