![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
tomcat
文章平均质量分 97
jchen104
芝兰生于幽谷,不以无人而不芳
展开
-
Tomcat源码:CoyoteAdapter、Valve#invoke、ApplicationFilterChain
在前文中,我们介绍了Processor如何接收来自EndPoint的Socket,读取字节流解析成 Tomcat Request 和 Response 对象,最后将请求传递给了Adapter做进一步的处理。本文我们就来介绍下一个请求是如何从连接器被转发到容器中并由相应的servlet处理的。目录前言一、CoyoteAdapter2、service3、invoke二、Valve#invoke1、invoke三、ApplicationFilterChain2、doFilter。原创 2023-09-11 10:03:17 · 363 阅读 · 0 评论 -
Tomcat源码:SocketProcessor、ConnectionHandler与Http11Processor
前文中我们介绍了Acceptor与Poller,其中Acceptor负责监听socket连接,并将请求转交到Poller中调用processSocket方法处理。结合我们之前介绍连接器时的讲解,EndPoint 接收到 Socket 连接后,生成一个 SocketProcessor 任务提交到线程池去处理,SocketProcessor 的 Run 方法会调用 Processor 组件去解析应用层协议,这一操作的起点就是processSocket方法,下面我们就从该方法开始讲起。原创 2023-06-02 11:05:47 · 1066 阅读 · 0 评论 -
Tomcat源码:Acceptor与Poller、PollerEvent
前文中我们介绍到NioEndpoint的start方法启动了Acceptor与Poller这两个异步线程来处理连接请求,本文我们就来接着介绍这两个组件。目录前言一、Acceptor1、构造方法2、run方法LimitLatchNioChannel二、Poller与PollerEvent2、pollerregisterruneventsprocessKey。原创 2023-05-25 21:42:03 · 1532 阅读 · 0 评论 -
Tomcat源码:ProtocolHandler与Endpoint
前文中我们介绍了连接器与其入口Connector以及线程池Executor,而在Connector中则是通过protocolHandler的init与start启动了整个连接器,本文我们就来介绍下protocolHandler与其关键组件Endpoint的内容,以及线程池Executor是如何发挥其作用的。目录前言一、ProtocolHandler1、构造方法1.1、Http11NioProtocol与其抽象父类1.2、 AbstractProtocol与成员变量的赋值2、生命周期方法2.1、init方法。原创 2023-05-19 13:19:19 · 1090 阅读 · 0 评论 -
Tomcat源码:连接器与Executor、Connector
在前面得文章中,我们介绍了Tomcat中得容器是如何从service启动到具体得servlet包装类wrapper得。servlet容器启动后就可以为我们提供访问服务了吗?答案是否定得,因为servlet只规定了如何处理请求,但没有实现请求得分发,这个功能是由tomcat得另一部分连接器来完成得。(图片来源《Tomcat连接器》,左侧为连接器,右侧为容器)连接器的启动点为connector组件,在前文《Tomcat源码:StandardServer与StandardService》原创 2023-05-10 23:00:25 · 1542 阅读 · 0 评论 -
Tomcat源码:Pipeline与Valve
在前文中,我们介绍了tomcat容器部分中的Engine、Host、Context、Wrapper,截止Wrapper中loadOnStartup=1的servelt启动后整个tomcat的启动就算完成了,不过除了容器tomcat还有连接器的部分,即如何将请求发给对应的servlet来进行处理。连接器的内容我们会在后续的文章中进行介绍。原创 2023-04-26 21:26:46 · 863 阅读 · 0 评论 -
Tomcat源码:StandardEngine、StandardHost、StandardContext、StandardWrapper
在前文中,我们介绍了容器组件的公共接口Container接口,这个接口的抽象实现类ContainerBase实现了initInternal、startInternal这两个生命周期,规定了子容器中的大部分行为,本文我们就来继续深入到各个子容器中进行源码的分析。目录前言一、StandardEngine二、StandardHost三、HostConfig生命周期监听器的添加生命周期监听器的执行start与deployAppsdeployWARs四、StandardContext触发事件监听器。原创 2023-04-16 14:12:24 · 670 阅读 · 0 评论 -
Tomcat源码:Container接口
前文中我们介绍了StandServer与StandService的init与start方法,本文我们接着介绍以Engine为首的子容器。由下图可以看出Engine、Host、Context、Wrapper等容器组件都继承了Container接口,从而间接继承了Lifecycle接口,而其抽象实现类ContainerBase又继承了LifecycleMBeanBase类,本文我们就介绍下Container这个接口。目录前言一、Container接口1、父子容器交互2、事件监听。原创 2023-04-11 12:59:28 · 795 阅读 · 0 评论 -
Tomcat源码:StandardServer与StandardService
在前文中我们介绍了tomcat启动类的加载,在Catalina初始化时加载了server.xml,并调用了getServer().init()方法加载server接口的实现类standserver。另外还介绍了以standserver为代表的容器组件共同继承的用于管理生命周期的抽象类LifecycleBase。本文我们接着前文的内容继续介绍standserver与standservice。目录前言一、StandardServer1、init2、Start二、StandService1、init。原创 2023-04-09 12:33:37 · 511 阅读 · 0 评论 -
Tomcat源码:容器的生命周期管理与事件监听
在前文中我们介绍了tomcat的启动类加载,最后介绍到了getServer().init(),这里的getServer()就是获取加载server.xml时创建的StandardServer对象,StandardServer对象即server接口的实现。原创 2023-04-08 17:34:46 · 665 阅读 · 0 评论 -
Tomcat源码:启动类Bootstrap与Catalina的加载
本文开始我们将会介绍tomcat的源码,整个流程会按照tomcat的启动顺序来开展,在此之前建议先阅读下前文理清servlet与servlet容器之间的关系。传送门在tomcat的bin目录下有两个启动tomcat的文件, 一个是startup.bat, 它用于windows环境下启动tomcat;另一个是startup.sh, 它用于linux环境下tomcat的启动. 两个文件中的逻辑是一样的, 我们只分析其中的startup.bat。原创 2023-03-22 09:18:31 · 1041 阅读 · 0 评论 -
Tomcat:servlet与servlet容器
在介绍Tomcat之前,我们首先需要了解它的作用,简单的说,tomcat就是一个servlet容器。因此,本文首先从Web 应用程序开始讲起,逐步介绍servlet。Web即表示网页的意思,它用于表示 Internet 主机上供外界访问的资源。Web 应用程序是一种可以通过 Web 访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件。静态 web 资源:指 web 页面中供人们浏览的数据始终是不变。原创 2022-11-30 09:22:41 · 1410 阅读 · 0 评论 -
tomcat结构与servel.xml的对应关系
参考文章:《Tomcat架构解析》刘光瑞著写在开头:本文为学习后的总结,可能有不到位的地方,错误的地方,欢迎各位指正。一、tomcat的基本结构 一、连接器(connect)与容器(containor) 在tomcat中,为了实现功能的解耦,将开启socket并监听客户端请求、返回数据的功能与具体的请求处理进行了拆分,这两者分别是连接器connect和容器containor,一个server可以拥有多个connect和containor。 ...原创 2021-10-31 18:55:57 · 249 阅读 · 0 评论