Tomcat—— 6.Connector组件

1.Connector工作模式

Connector是客户端连接到Tomcat容器的服务点,它为引擎提供协议服务来将引擎与客户端各种协议隔离开来,如HTTP、HTTPS、AJP协议。Tomcat有两种可配的工作模式:独立模式或在同一web服务器中共享模式。

1.1独立模式在这里插入图片描述

一个Connecter将在某个指定的端口上侦听客户请求,接收浏览器的发过来的 tcp 连接请求,创建一个 Request 和 Response 对象分别用于和请求端交换数据,然后会产生一个线程来处理这个请求并把产生的 Request 和 Response 对象传给处理Engine(Container中的一部分),从Engine出获得响应并返回客户。
在独立模式下,Tomcat会配置HTTP和HTTPS连接器,这可以使Tomcat看起来更像完整的web服务器以处理静态请求内容同时还委托Catalina引擎来处理动态内容。发布时,Tomcat为这种运作模式提供了3种可能实现,即HTTP、HTTP1.1以及HTTPS。Tomcat中最常见的连接器为标准连接器,也就是通过java标准I/O实现的Coyote连接器。可以使用一些技术实现,这其中就包括使用Java1.4中引入的非阻塞特性NIO,另一方面可能是通过APR充分利用本地代码来优化特定的操作系统。 Connector和Engine不仅运行在同一个JVM中,而且还运行在同一个Tomcat服务实例中。

1.2共享模式:在这里插入图片描述

在共享模式中,Tomcat扮演着对web服务器如Apache httpd、Nginx和微软的IIS支撑的角色。这里web服务器充当客户端通过Apache模块或者通过dll格式ISAPI模块来和Tomcat通信。当该模块判定一个请求需要传入Tomcat处理时,它将使用AJP协议来与Tomcat通信,该协议为二进制协议,在web服务器和Tomcat通信时比基于文本的Http协议更高效。
在Tomcat端,通过AJP连接器来接收web服务器的请求,并将请求解释为Catalina引擎可处理的格式。这种模式下Tomcat作为来自web服务器的单独进程运行在自身独立的JVM中。
不论在哪种模式中,Connector的基本属性都是它所需要监听的IP地址及端口号,以及所支持的协议。还有一个关键属性就是并发处理传入请求的最大线程数。一旦所有的处理线程都忙,那么传入的请求都将被忽略,直到有线程空闲为止。
默认情况下,连接器会监听指定物理机器上的所有IP(address属性默认值为0.0.0.0);但也可以配置为只监听某一个IP,这将限制它只接收指定ip的连接请求。
任意一个连接器接收到的请求都会被传入单一的服务引擎中,而这个引擎,就是众所周知的catalina,它负责处理请求并生成响应结果。
引擎将生成的结果返回给连接器,连接器再通过指定的协议将结果回传至客户端。Connector关键的有 连接器(HTTP HTTPS HTTP1.1 AJP SSL proxy)、运行模式(BIO NIO NIO2/AIO APR)、多线程/线程池。  在这里插入图片描述

2.ProtocolHandler

Connector就是使用ProtocolHandler来处理请求的,不同的ProtocolHandler代表不同的连接类型,比如:Http11Protocol使用的是普通Socket来连接的,Http11NioProtocol使用的是NioSocket来连接的。其中ProtocolHandler由包含了三个部件:Endpoint、Processor、Adapter。
Endpoint用来处理底层Socket的网络连接,Processor用于将Endpoint接收到的Socket封装成Request,Adapter用于将Request交给Container进行具体的处理。
Endpoint由于是处理底层的Socket网络连接,因此Endpoint是用来实现TCP/IP协议的,而Processor用来实现HTTP协议的,Adapter将请求适配到Servlet容器进行具体的处理。
Endpoint的抽象实现AbstractEndpoint里面定义的Acceptor和AsyncTimeout两个内部类和一个Handler接口。Acceptor用于监听请求,AsyncTimeout用于检查异步Request的超时,Handler用于处理接收到的Socket,在内部调用Processor进行处理。

3.Connector配置

Connector的主要功能,是接收连接请求,创建Request和Response对象用于和请求端交换数据;然后分配线程让Engine来处理这个请求,并把产生的Request和Response对象传给Engine。
进入Tomcat的请求可以根据Tomcat的工作模式分为如下两类:Tomcat作为应用程序服务器:请求来自于前端的web服务器,这可能是Apache, IIS, Nginx等;Tomcat作为独立服务器:请求来自于web浏览器;Tomcat应该考虑工作情形并为相应情形下的请求分别定义好需要的连接器才能正确接收来自于客户端的请求。一个引擎可以有一个或多个连接器,以适应多种请求方式。定义连接器可以使用多种属性,有些属性也只适用于某特定的连接器类型。一般说来,常见于server.xml中的连接器类型通常有4种: HTTP连接器、 SSL连接器 、AJP 1.3连接器 、 proxy连接器;Tomcat 支持三种协议:HTTP/1.1、HTTP/2.0、AJP。

3.1 BIO HTTP/1.1 Connector配置
<Connector  port=”8080”  protocol=”HTTP/1.1”  maxThreads=”150”  conn ectionTimeout=”20000”   redirectPort=”8443” />

acceptCount : 接受连接request的最大连接数目,默认值是10
address : 绑定IP地址,如果不绑定,默认将绑定任何IP地址
allowTrace : 如果是true,将允许TRACE HTTP方法
compressibleMimeTypes : 各个mimeType, 以逗号分隔,如text/html,text/xml
compression : 如果带宽有限的话,可以用GZIP压缩
connectionTimeout : 超时时间,默认为60000ms (60s)
maxKeepAliveRequest : 默认值是100
maxThreads : 处理请求的Connector的线程数目,默认值为200

SSL配置

<Connector port="8181" protocol="HTTP/1.1" SSLEnabled="true" 
    maxThreads="150" scheme="https" secure="true" 
    clientAuth="false" sslProtocol = "TLS" 
    address="0.0.0.0" 
    keystoreFile="E:/java/jonas-full-5.1.0-RC3/conf/keystore.jks" 
    keystorePass="changeit" />

keystoreFile:证书位置
keystorePass:证书密码

3.2 NIO HTTP/1.1 Connector配置
<Connector port=”8080” protocol=”org.apache.coyote.http11.Http11NioProtocol” maxThreads=”150” connectionTimeout=”20000” redirectPort=”8443”/>
3.3 Native APR Connector配置

ARP是用C/C++写的,对静态资源(HTML,图片等)进行了优化。在server.xml中要配置一个Listener。这个配置tomcat是默认配好的。

<!--APR library loader. Documentation at /docs/apr.html --> 
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
配置使用APR connector
<Connector port=”8080” protocol=”org.apache.coyote.http11.Http11AprProtocol” 
maxThreads=”150” connectionTimeout=”20000” redirectPort=”8443”/>

如果配置成功,启动tomcat,会看到如下信息: org.apache.coyote.http11.Http11AprProtocol init

3.4 AJP Connector配置
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
3.5 Coyote HTTP/1.1 Connector

在独立模式下,Tomcat会配置HTTP和HTTPS连接器,这可以使Tomcat看起来更像完整的web服务器以处理静态请求内容同时还委托Catalina引擎来处理动态内容。

<Connector 
port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false"
redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" />

port : 在端口号8080处侦听来自客户browser的HTTP1.1请求.如果把8080改成80,则只要输入http://localhost/即可
protocol:设定Http协议,默认值为HTTP/1.1,如果使用AJP处理器,该值必须为AJP/1.3.
minSpareThreads: 该Connector先创建5个线程等待客户请求,每个请求由一个线程负责
maxSpareThreads:设定在监听端口的线程的最大数目,这个值也决定了服务器可以同时响应客户请求的最大数目.默认值为200
acceptCount : 当现有线程已经达到最大数75时,为客户请求排队.当队列中请求数超过100时,后来的请求返回Connection refused错误
redirectport : 当客户请求是https时,把该请求转发到端口8443去,若连接器不支持SSL,如收到SSL请求,Catalina容器将会自动重定向到指定的端口号,让其处理。
enableLookups:若设为true,表示支持域名解析,把IP地址解析为主机名,false返回IP地址.WEB应用中调用request.getRemoteHost方法执行DNS查询返回客户机主机名.默认值为true。
connectionTimeout:定义建立客户连接超时的时间,以毫秒为单位,默认为60000=60秒,如果为-1,表示不限制建立客户连接的时间
allowTrace:是否允许HTTP的TRACE方法,默认为false
emptySessionPath:如果设置为true,用户的所有路径都将设置为/,默认为false。
maxPostSize:指定POST方式请求的最大量,没有指定默认为2097152。
proxyName:如这个连接器正在一个代理配置中被使用,指定这个属性,在request.getServerName()时返回
scheme:设置协议的名字,在request.getScheme()时返回,SSL连接器设为”https”,默认为”http”
secure:在SSL连接器可将其设置为true,默认为false
URIEncoding:用于解码URL的字符编码,没有指定默认值为ISO-8859-1
useBodyEncodingForURI:主要用于Tomcat4.1.x中,指示是否使用在contentType中指定的编码来取代URIEncoding,用于解码URI查询参数,默认为false
xpoweredBy:为true时,Tomcat使用规范建议的报头表明支持Servlet的规范版本,默认为false
bufferSize:设由连接器创建输入流缓冲区的大小,以字节为单位。默认情况下,缓存区大的大小为2048字节
compressableMimeType:MIME的列表,默认以逗号分隔。默认值是text/html,text/xml,text/plain
compression:指定是否对响应的数据进行压缩。off:表示禁止压缩、on:表示允许压缩(文本将被压缩)、force:表示所有情况下都进行压缩,默认值为off
disableUploadTimeOut:允许Servlet容器,正在执行使用一个较长的连接超时值,以使Servlet有较长的时间来完成它的执行,默认值为false
maxHttpHeaderSize:HTTP请求和响应头的最大量,以字节为单位,默认值为4096字节
maxKeepAliveRequest:服务器关闭之前,客户端发送的流水线最大数目。默认值为100
socketBuffer:设Socket输出缓冲区的大小(以字节为单位),-1表示禁止缓冲,默认值为9000字节
toNoDelay:为true时,可以提高性能。默认值为true
threadPriority:设JVM中请求处理线程优先级。默认值为NORMAL-PRIORITY

3.6 AJP连接器

用于将Apache与Tomcat集成在一起,当Apache接收到动态内容请求时,通过在配置中指定的端口号将请求发送给在此端口号上监听的AJP连接器组件。在共享模式中,Tomcat扮演着对web服务器如Apache httpd、Nginx和微软的IIS支撑的角色。这里web服务器充当客户端通过Apache模块或者通过dll格式ISAPI模块来和Tomcat通信。当该模块判定一个请求需要传入Tomcat处理时,它将使用AJP协议来与Tomcat通信,该协议为二进制协议,在web服务器和Tomcat通信时比基于文本的Http协议更高效。

<!—Define an AJP1.3 Connector on port 8089-->
<Connector port="8080" maxThread="50" minSpareThreads="25" maxSpareThread="75" enableLookups="false" redirectPort="8443" 
acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" />
<Connection port="8009" enableLookups="false" redirectPort="8443" debug="0" protocol="AJP/1.3" />

backlog:当所有可能的请求处理线程都在使用时,队列中排队的请求最大数目。默认为10,当队列已满,任何请求都将被拒绝
maxSpareThread:允许存在空闲线程的最大数目,默认值为50
maxThread:支持的最大并发连接数,默认值为200
minSpareThreads:设当连接器第一次启动时创建线程的数目,确保至少有这么多的空闲线程可用,默认值为4
port:服务端套接字的TCP端口号,默认值为8089(必须)
topNoDelay:为true时,可以提高性能,默认值为true
soTimeout:超时值

3.7 SSL连接器

下面定义了一个多属性的SSL连接器:debug=“0” 不启动调试模式 ;其中,keystoreFile为证书位置,keystorePass为证书密码。

<Connector port="8443" maxThreads="150" minSpareThreads="25" maxSpareThread="75" enableLookups="false"
    acceptCount="100" debug="0" scheme="HTTPs" secure="true" clientAuth="false" sslProtocol="TLS"/>
<Connector port="8181" protocol="HTTP/1.1" SSLEnabled="true" 
    maxThreads="150" scheme="https" secure="true" 
    clientAuth="false" sslProtocol = "TLS" 
    address="0.0.0.0" 
    keystoreFile="E:/java/jonas-full-5.1.0-RC3/conf/keystore.jks" 
    keystorePass="changeit" />

acceptCount : 当最大请求连接maxConnections满时的最大排队大小,默认100。注意此属性和Executor中属性maxQueueSize的区别,这个指的是请求连接满时的堆栈大小,Executor的maxQueueSize指的是处理线程满时的堆栈大小
connectionTimeout:定义建立客户连接超时的时间,以毫秒为单位,默认为60000=60秒,如果为-1,表示不限制建立客户连接的时间
executor:指定配置的线程池名称
keepAliveTimeout:keeAlive超时时间,默认值为connectionTimeout配置值.-1表示不超时
maxConnections:最大连接数,连接满时后续连接放入最大为acceptCount的队列中. 对 NIO和NIO2连接,默认值为10000;对 APR/native,默认值为8192
maxThreads:支持的最大并发连接数,如果指定了Executor, 此属性忽略;否则为Connector创建的内部线程池最大值,默认200
minSpareThreads:如果指定了Executor, 此属性忽略;否则为Connector创建线程池的最小活跃线程数,默认10
processorCache:协议处理器缓存Processor对象的大小,-1表示不限制,当不使用servlet3.0的异步处理情况:如果配置Executor,配置为Executor的maxThreads;否则配置为Connnector的maxThreads。如果使用Serlvet3.0异步处理, 取maxThreads和maxConnections的最大值

————Blueicex 2020/2/28 12:27 blueice1980@126.com

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: org.apache.tomcat.util.modeler是一个Java类库,用于管理和监控Tomcat服务器的运行状态。它提供了一组工具和API,可以让开发人员更方便地管理Tomcat服务器的配置和运行。该类库包含了一些核心类,如ModelMBean、ManagedBean、MBeanServer等,这些类可以帮助开发人员实现自定义的MBean,并将其注册到MBeanServer中,从而实现对Tomcat服务器的监控和管理。 ### 回答2: org.apache.tomcat.util.modeler是Apache Tomcat中的一个工具类库,用于管理和操作Java对象的模型。它提供了一套API和工具,可以用于创建、注册、查询和管理Java对象的模型和元数据。 org.apache.tomcat.util.modeler主要有以下几个功能: 1. 创建模型:通过使用ModelMBean接口和相关类,可以创建一个JavaBean对象的模型。这个模型可以包含一些属性、操作和事件,用于描述JavaBean的各种行为和特征。 2. 注册模型:通过使用ModelMBeanRegistration接口和相关类,可以将一个JavaBean对象的模型注册到Tomcat的模型管理器中。注册后,可以通过唯一的ObjectName标识符来访问和操作模型。 3. 查询模型:通过使用ModelMBeanInfo接口和相关类,可以查询模型的元数据信息,包括模型的属性、操作、事件等详细信息。这些信息可以用于动态管理和操作JavaBean对象。 4. 管理模型:通过使用ModelMBean接口和相关类,可以对模型进行一些管理操作,如属性值的设置和获取、操作的调用等。这些操作可以通过Java代码或JMX控制台来执行。 org.apache.tomcat.util.modeler的主要目的是提供一种简单、灵活且可扩展的方式来管理和操作Java对象的模型。它可以广泛应用于Tomcat服务器的管理和监控系统中,也可以作为独立的工具类库在其他Java应用程序中使用。通过使用org.apache.tomcat.util.modeler,开发人员可以更方便地管理和操作Java对象,提高系统的可管理性和可维护性。 ### 回答3: org.apache.tomcat.util.modeler是一个Apache Tomcat服务器的模块,用于管理和操作Java管理扩展(MBeans)。MBeans是一种Java对象,用于管理和监控Java应用程序的运行时行为。 org.apache.tomcat.util.modeler提供了一个框架,可以通过注解或XML配置文件定义MBeans,来监控和管理Java应用程序的各种方面。它通过使用Java动态代理和反射机制来实现动态生成和管理MBeans对象。 通过org.apache.tomcat.util.modeler,可以将Java应用程序的各种组件(如连接池、Servlet、JSP引擎等)以MBeans的形式暴露出来,从而可以通过标准的Java管理扩展API(JMX API)对其进行监控和管理。这些组件的属性和操作可以通过MBeans的属性和方法来获取和设置。 除了管理和监控外,org.apache.tomcat.util.modeler还提供了一些其他功能,例如:描述和验证MBeans的模型,自动生成MBeans的XML描述文件,支持运行时动态加载和卸载MBeans等。 总之,org.apache.tomcat.util.modeler是一个帮助开发人员实现和管理MBeans的工具,为Java应用程序提供了一种方便的方式来监控、管理和诊断运行时行为。它为Apache Tomcat服务器的开发和管理提供了强大的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值