Tomcat功能及架构分析
静下来的时间,不想折腾了,安静下来,做自己吧!
打理生活,看看书,喝喝茶,留时间给自己,余生不长,善待自己才是最重要的。
Tomcat 相信做java的小伙伴一定不陌生,如今微服务容器盛行的时代,spring-boot内嵌了tomcat,让技术人更专注业务的实现,却也屏蔽了好多实现的细节。今天呢就带大家一起来探讨下tomcat的架构。
Tomcat功能
我们先来分析下tomcat有哪些功能?
Tomcat两个非常重要的功能:
Http服务器功能:Socket通信(TCP/IP)、解析Http报文;
Servlet容器功能:有很多servlet,处理具体的业务逻辑;
Tomcat架构
为了实现上述功能,tomcat进行了很多的设计封装,封装出了很多组件(所谓的组件在java源码中体现的就是具体的java类),组件与组件的关系就构成了所谓的tomcat架构。接下来就一起来欣赏下tomcat有哪些组件及其架构:
所谓容器(Container),并不是常说的用来存储数据结构的类,比如Collection、Set、List等,而是专指tomcat和spring mvc中用来对功能和结构进行分层抽象的概念(类或者接口)。tomcat的基本容器结构如图所示:
tomcat最顶层的容器Server,代表整个tomcat服务器,一个Server可以包含一个或者多个Service。一个Service包含一个或者多个Connetor,但是只能包含一个Container。Connector主要用来处理连接相关的事,比如网络套接字Socket的监听、请求request的接收和应答response的发送。这里的Container是一个抽象的概念,一个接口。其实是指一个Service只能包含一个Engine–Engine继承自Container。Engine容器结构如图所示:
其中Engine、Host、Context和Wrapper都继承自Container。
Engine用来管理多个站点,即可以有多个Host。Host代表一个站点,其实是一个虚拟主机。Context,上下文,代表一套应用程序,一套应用程序总是有相同的应用上下文配置。最后是Wrapper,每个wrapper只有一个Servlet,而每个Servlet即对应每个开发的spring mvc服务程序。所以我们开发的spring mvc服务程序都是通过Wrapper加载到tomcat中。在上一篇 已经介绍过。接下来的几篇中会通过源码调试及启动和请求流程来分析tomcat的实现原理。
最后以tomcat的整体架构图先从宏观上了解其实现,几年前看过一本书
《how tomcat works》推荐给大家,带你一步步从零实现一个tomcat,让你真正的了解tomcat的工作原理。
长按关注,欢迎一起探讨技术