> 技术文档 > Java面试——Tomcat_tomcat 面试

Java面试——Tomcat_tomcat 面试

优质博文:IT_BLOG_CN

一、Tomcat 顶层架构

Java面试——Tomcat_tomcat 面试

Tomcat中最顶层的容器是Server,代表着整个服务器,从上图中可以看出,一个Server可以包含至少一个Service,用于具体提供服务。Service主要包含两个部分:ConnectorContainer。从上图中可以看出Tomcat的心脏就是这两个组件,他们的作用如下:
【1】Connector用于处理连接相关的事情,并提供SocketRequestResponse相关的转化;
【2】Container用于封装和管理Servlet,以及具体处理Request请求;

一个Tomcat中只有一个Server,一个Server可以包含多个Service,一个 Service只有一个Container,但是可以有多个Connectors,这是因为一个服务可以有多个连接,如同时提供HttpHttps链接,也可以提供向相同协议不同端口的连接,示意图如下(EngineHostContext下边会说到):
Java面试——Tomcat_tomcat 面试

多个Connector和一个Container就形成了一个Service,有了Service就可以对外提供服务了,但是Service还要一个生存的环境,必须要有人能够给她生命、掌握其生死大权,那就非Server莫属了!所以整个Tomcat的生命周期由 Server控制。另外,上述的包含关系或者说是父子关系,都可以在tomcatconf目录下的 server.xml 配置文件中看出。

二、简要解释下 server.xml 配置文件的信息

server.xmlTomcat中最重要的配置文件,server.xml的每个元素都对应了 Tomcat中的一个组件;通过对xml文件中元素的配置,可以实现对Tomcat中各个组件的控制。

<Server port=\"8005\" shutdown=\"SHUTDOWN\"> <Listener className=\"org.apache.catalina.startup.VersionLoggerListener\"/> <Listener SSLEngine=\"on\" className=\"org.apache.catalina.core.AprLifecycleListener\"/> <Listener className=\"org.apache.catalina.core.JasperListener\"/> <Listener className=\"org.apache.catalina.core.JreMemoryLeakPreventionListener\"/> <Listener className=\"org.apache.catalina.mbeans.GlobalResourcesLifecycleListener\"/> <Listener className=\"org.apache.catalina.core.ThreadLocalLeakPreventionListener\"/> <GlobalNamingResources> <Resource auth=\"Container\"  description=\"User database that can be updated and saved\" factory=\"org.apache.catalina.users.MemoryUserDatabaseFactory\"  name=\"UserDatabase\" pathname=\"conf/tomcat-users.xml\"  type=\"org.apache.catalina.UserDatabase\"/> </GlobalNamingResources> <Service name=\"Catalina\"> <Connector port=\"8080\" protocol=\"HTTP/1.1\" connectionTimeOut=\"20000\" redirectPort=\"8443\"/> <Connector port=\"8009\" protocol=\"AJP/1.3\" redirectPort=\"8443\"/> <Engine defaultHost=\"localhost\" name=\"Catalina\"> <Realm className=\"org.apache.catalina.realm.LockOutRealm\"> <Realm className