Jetty9架构解析-Jetty配置及部署(二)

2.2. Jetty配置方式

除了Jetty配置及部署(一)介绍的命令行参数、ini和XML(Jetty IoC)文件的默认配置方式外,Jetty也为我们提供了其它灵活的配置方案。
由于Jetty的服务器对象(如Server、链接器、Context等)都是POJO,因此从理论上讲,我们可以采用编程的方式配置Jetty,这便是嵌入式Jetty所完成的工作。不仅如此,我们还可以采用其它IoC框架配置Jetty服务器。例如官方即支持通过Spring容器进行配置及实例化Jetty服务器。只要启动模块中包含了spring(模块名),我们就可以直接使用Spring的Bean配置文件来替代Jetty IoC文件。在讲解Web应用部署时,你将会看到一个采用Spring进行部署配置的示例。
总之,Jetty对IoC框架集成的机制非常灵活,只要愿意,我们可以非常容易的实现自己的替代方案,具体实现方式可以参见“扩展篇”。

注意:与Tomcat相比,Jetty的可扩展性做的非常出色。除了它的模块化架构,各个组件的可扩展性也充分说明了这一点。这也是Jetty进行嵌入式开发如此便捷的原因,而Tomcat的服务器生命周期处理,有部分是与其Catalina容器配置解析耦合在一起的,因此如果要进行嵌入式开发,则需要做额外的适配工作。

2.3. Jetty配置方式

本节主要讲解Jetty相关的启动配置,包括加载规则和常见的启动参数。

2.3.1. 加载规则

从前面的讲解我们知道,Jetty有三种方式添加命令行启动参数:命令行添加、start.ini、start.d/*.ini(大多数情况下,start.ini和start.d不必两者都保留,只需要两者择其一即可)。对于这三种方式,如果存在重复的配置,Jetty将自行进行覆盖。其具体规则是命令行的优先级最高,start.d目录次之,start.ini文件最低。这也符合我们对配置灵活性的要求,保证最灵活的方式优先级最高。

2.3.2. 常见启动参数

下面我们整理了部分常用的Jetty启动参数及其用途说明,你可以根据需要采用任意一种方式配置使用,如表2-1所示。

注意:所有JVM相关的参数也可以直接通过ini文件设置,此处不再赘述。

表2-1 Jetty常见启动参数

参数 所属模块 说明
jetty.http.host http HTTP链接器绑定的主机地址,默认本机所有有效IP地址。
jetty.http.port http HTTP链接器监听的端口号,默认为8080。
jetty.http.idleTimeout http HTTP链接的最大空闲时间,单位为毫秒,默认为30000。
jetty.http.soLingerTime http HTTP链接器Socket Linger时间,默认为-1,即禁用。
jetty.http.acceptors http HTTP链接器用于接收请求的线程数量,默认为-1,Jetty基于处理器核数选择一个值,具体规则是低于16核为1,低于24核为2,低于32核为3,32核以上为4。
jetty.http.selectors http Socket selector的数量,默认为-1,Jetty基于处理器核数选择一个值,具体规则是低于4核为1,低于8核为3,8核以上为4。
jetty.http.acceptorQueueSize http 用于设置ServerSocket绑定时的backlog值,输入连接指示(对连接的请求)的最大队列长度。如果队列满时收到连接指示,则拒绝该连接。
jetty.threadPool.minThreads server Jetty线程池最小线程数,默认为10。
jetty.threadPool.maxThreads server Jetty线程池最大线程数,默认为200。
jetty.threadPool.idleTimeout server Jetty线程池线程空闲超时时间,单位为毫秒,默认为60000。
jetty.httpConfig.secureScheme server HTTP安全重定向时,URI的Scheme,默认为https。
jetty.httpConfig.securePort server HTTP安全重定向端口,默认为8443。
jetty.httpConfig.outputBufferSize server HTTP响应内容缓冲大小,单位为字节,默认为32768。
jetty.httpConfig.outputAggregationSize server 可以缓冲的响应内容最大写入长度,单位为字节,默认为8192。
jetty.httpConfig.requestHeaderSize server HTTP请求头的最大值,单位为字节,默认为8192。
jetty.httpConfig.responseHeaderSize server HTTP响应头的最大值,单位为字节,默认为8192。
jetty.server.stopAtShutdown server 在控制台按下ctrl+c停止Jetty服务器。
jetty.server.stopTimeout server Jetty优雅停止的超时时间,单位为毫秒,默认5000。
jetty.server.dumpAfterStart server Jetty启动之后,输出服务器、组件以及Web应用的状态。
jetty.server.dumpBeforeStop server Jetty关闭之前,输出服务器、组件以及Web应用的状态。
jetty.ssl.host ssl TLS/SSL链接器绑定的主机地址,默认本机所有有效的IP地址。
jetty.ssl.port ssl TLS/SSL链接器监听的端口,默认为8443。
jetty.ssl.idleTimeout ssl TLS/SSL链接器空闲超时时间,单位为毫秒,默认30000。
jetty.ssl.soLingerTime ssl TLS/SSL链接器Socket Linger时间,默认为-1,即禁用。
jetty.ssl.acceptors ssl TLS/SSL链接器用于接收请求的线程数量。
jetty.ssl.selectors ssl TLS/SSL链接器Socket selector的数量。
jetty.ssl.acceptorQueueSize ssl 设置TLS/SSL链接器ServerSocket绑定时的backlog值
jetty.ssl.sniHostCheck ssl 是否检查请求主机名是否匹配SNI 名称。
jetty.ssl.stsMaxAgeSeconds ssl 设置Strict-Transport-Security 响应头的过期时间,单位为秒,默认为3153600。
jetty.sslContext.keyStorePath ssl 密钥库文件路径,相对于$JETTY_BASE。
jetty.sslContext.trustStorePath ssl 信任库文件路径,相对于$JETTY_BASE。
jetty.sslContext.keyStorePassword ssl 密钥库密码。
jetty.sslContext.keyStoreType ssl 密钥库类型(JCEKS、JKS、DKS、PKCS11、PKCS12)。
jetty.sslContext.keyStoreProvider ssl 密钥库提供者。
jetty.sslContext.keyManagerPassword ssl KeyManager密码。
jetty.sslContext.trustStorePassword ssl 信任库密码。
jetty.sslContext.trustStoreType ssl 信任库类型(JCEKS、JKS、DKS、PKCS11、PKCS12)。
jetty.sslContext.trustStoreProvider ssl 信任库提供者。
jetty.sslContext.needClientAuth ssl 是否要求客户端证书认证,如果为true并且客户端选择不提供自身的验证信息,则协商将会停止。
jetty.sslContext.wantClientAuth ssl 是否请求客户端证书认证,如果为true并且客户端选择不提供其自身的验证信息,则协商将会继续。
jetty.sslContext.sslSessionCacheSize ssl SSL会话缓存大小。
jetty.sslContext.sslSessionTimeout ssl SSL会话缓存超时时间,单位为秒。
jetty.gzip.minGzipSize ssl 指定一个HTTP响应内容长度的限制,当超过该值时,Jetty启动GZIP压缩。
jetty.gzip.compressionLevel ssl GZIP压缩级别。
jetty.gzip.excludedUserAgent ssl 正则表达式,用于指定禁用GZIP的User Agent。如果请求的User Agent匹配该表达式,则将不启用GZIP压缩。默认为.MSIE.6.0.,即IE6不支持GZIP压缩。
jetty.deploy.monitoredDir deploy Jetty部署模块监控目录,相对于$JETTY_BASE,用于热部署监控文件变更。
jetty.deploy.monitoredPath deploy Jetty部署模块监控路径(绝对目录),用于热部署监控文件变更。
jetty.deploy.defaultsDescriptorPath deploy Web应用使用的默认部署描述文件,该文件中的配置信息将会被所有Web应用继承,默认为/etc/webdefault.xml。
jetty.deploy.scanInterval deploy Jetty部署模块扫描监控目录的时间间隔,单位为秒,默认为1秒。
jetty.deploy.extractWars deploy 是否解压WAR包,默认为true。
jetty.jmxremote.rmihost jmx-remote JMX远程访问绑定的RMI主机地址。
jetty.jmxremote.rmiport jmx-remote JMX远程访问RMI监听的端口,默认为1999。

Jetty在启动时,会自动获取参数的键值对,并在加载各个模块时,将参数值以IoC的方式注入到各个组件对象。这是Jetty与Tomcat在参数处理方面的一大区别,Tomcat参数均以硬编码的方式进行读取,即便我们可以通过参数去控制Tomcat组件的行为,但是对于参数本身我们却无法控制。而Jetty则是在用IoC的方式构造组件对象时动态注入,因此方案更加灵活。我们完全可以通过更改IoC文件来增加、修改甚至删除相关参数,Tomcat则无法做到这一点。

注意:将参数读取加载与IoC框架结合的优势就是,在支持IoC框架的可替代性的同时,又不会降低系统的可配置性。针对Jetty的参数处理方式,相信熟悉Spring的读者会非常容易找到替代方案。


新书上市
《Tomcat架构解析》

《Tomcat架构解析》

猜你喜欢

转载自blog.csdn.net/elinespace/article/details/72864550