Server配置解析
简介
Server配置文件位于tomcat/conf/目录下,这个配置文件在tomcat启动的时候会使用Digester技术解析这个XML文件,创建一个Server实例。那么解读配置的时候,可以将这个配置文件看作一个对象,层级关系表示他们的从属关系。标签的属性就是对象的属性。
1. Server标签
Server对象初始化后,作为Catalina的属性,那么在Catalina中,Server对象的默认实现为org.apache.catalina.core.StandardServer类,如果想替换这个实现类,可以通过className属性指定自己的实现类。在这个对象创建完毕后,调用Catalina的setServer方法设置。
2. Server/Listener标签
Listener标签主要是配置Server的监听器,默认配置了5个监听器,如下:
<Listener className="org.apache.catalina.startup.VersionLoggerListener" /> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> |
监听器作用
类 |
描述 |
AprLifecycleListeners |
是Server初始化之前加载APR库,并且在Server停止后销毁 |
VersionLoggerListener |
在Server初始化之前打印操作系统/JVM以及服务器的版本信息 |
JreMemoryLeakPreventionListener |
在Server初始化之前调用,解决单例对象创建导致的JVM内存泄露问题以及锁文件问题 |
GlobalResourcesLifecycleListener |
在Server启动的时候,将JNDI资源注册为MBean进行管理 |
ThreadLocalLeakPreventionListenerss’s |
用于在Context停止时重建Executor池中的线程,避免导致内存泄露 |
3. Server/ GlobalNamingResources标签
这个标签主要是定义Server对象的全局属性。
4. Server/Service标签
Service主要定义项目启动时候的服务配置,例如端口,连接方式是单机还是集群等。Catalina也提供了默认的Service实现:org.apache.catalina.core.StandardService类。当然如果觉得这个实现不符合你的需求,可以使用className属性设置自己认为合适的实现。具体的实现可以看tomcat的API文档说明。
5. Service/ Executor标签
Executor标签默认是注释的,该类的默认实现为:org.apache.catalina.core.StandardThreadExecutor类,当然也是通过通过className配置自己认为的类。这个类主要是定义线程池的,如果链接器(Connector标签)需要使用线程池,就可以通过这个配置线程池的实现。
6. Service/Connector标签
Connector标签是配置tomcat的连接方式的,默认是使用Http1.1协议,端口为8080,连接超时时间为20000,重定向端口为8443。
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> |
Tomcat还提供了AJP协议的连接方式。
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> |
在tomcat中8.5之后还支持HTTP2.0协议,其它连接配置如下(也可以通过server配置文件阅读,配置英文说明有道就可以翻译):
<!-- A "Connector" using the shared thread pool--> <!-- <Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> --> <!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443 This connector uses the NIO implementation. The default SSLImplementation will depend on the presence of the APR/native library and the useOpenSSL attribute of the AprLifecycleListener. Either JSSE or OpenSSL style configuration may be used regardless of the SSLImplementation selected. JSSE style configuration is used below. --> <!-- <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true"> <SSLHostConfig> <Certificate certificateKeystoreFile="conf/localhost-rsa.jks" type="RSA" /> </SSLHostConfig> </Connector> --> <!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443 with HTTP/2 This connector uses the APR/native implementation which always uses OpenSSL for TLS. Either JSSE or OpenSSL style configuration may be used. OpenSSL style configuration is used below. --> <!-- <Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol" maxThreads="150" SSLEnabled="true" > <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" /> <SSLHostConfig> <Certificate certificateKeyFile="conf/localhost-rsa-key.pem" certificateFile="conf/localhost-rsa-cert.pem" certificateChainFile="conf/localhost-rsa-chain.pem" type="RSA" /> </SSLHostConfig> </Connector> --> |
7. Engine标签
Engine(引擎)作为Service的属性,在解析的时候会默认为Engine添加一个生命周期的监听器:EngineConfig类,这个类是默认添加的,并不是通过server.xml配置实现,该监听器还用于打印Engine的启动和停止日志。如果还需要配置额外的监听器,可以使用Listener标签配置。
8. Host标签
Host是Engine的域名配置,默认是localhost。Catalina默认实现org.apache.catalina.core.StandardHost。同样还默认添加了生命周期的监听器HostConfig。这个监听器不是通过server.xml配置的。通过Alias标签还可以为Host配置别名。