02. Tomcat 请求流程解析
2022-03-20 13:56:15 0 举报
AI智能生成
为你推荐
查看更多
Tomcat是一个用于部署Web应用的Web服务器和Servlet容器。当客户端发送请求到Tomcat服务器时,它会按照以下流程进行处理: 1. 客户端向Tomcat服务器发送HTTP请求。 2. Tomcat服务器接收到请求后,会先检查请求的资源是否存在。如果不存在,则返回404错误。 3. 如果请求的资源存在,则Tomcat服务器会将请求交给对应的Servlet来处理。Servlet会根据请求的内容生成响应,并将响应发送回客户端。 4. Tomcat服务器还会负责管理Servlet的生命周期,包括初始化、运行和销毁等阶段。
作者其他创作
大纲/内容
endpoint.serverSocketAccept()调用 NIO 的方法获取 serverSocket 对象这个方法是阻塞的
nioChannels.pop()获取 channel 对象
包装成 socketWrapper 对象
poller.register(socketWrapper)调用注册方法
events.offer(event)注意它是一个 SynchronizedQueue 同步阻塞队列
addEvent(event)添加事件到队列中
endpoint.setSocketOptions(socket)处理请求
Acceptor一直接收 8080 端口的请求
events.poll()从队列中获取数据
getExecutor()获取 worker 线程池
executor.execute(sc)处理 SocketProcessorBase
events()死循环消费数据
Poller消费队列
getHandler()获取 handler 处理器这里是【AbstractProtocol.ConnectionHandler】对象
getProtocol().createProcessor()创建 processor 处理器这里是【Http11Processor】对象
prepareRequest()校验请求头相关的参数
service(socketWrapper)继续调用
doRun()在 run() 方法里调用它处理
SocketProcessorBase它实现了 Runnable 接口
把 coyote 的 Request 转成 Servlet 规范的 Request并完成初始化赋值
把 coyote 的 Response 转成 Servlet 规范的 Response并完成初始化赋值
loadServlet()利用反射创建好 Servlet 对象
initServlet(servlet)完成 Servlet 的初始化工作就是调用 init() 方法
wrapper.allocate()使用 wrapper 创建一个 Servlet 对象
service()真正的处理请求逻辑
CoyoteAdapter将请求与 Tomcat 自己的处理流程标准适配
Tomcat 处理请求流程
0 条评论
回复 删除
下一页