深度剖析应用服务器Tomcat - 架构设计

大名鼎鼎的应用服务器Tomcat相信所有人都知道,今天来扒开tomcat这层神秘的面纱

首先看看tomcat的架构设计

Server:指Tomcat本身

深度剖析应用服务器Tomcat - 架构设计 - Seans Blog - Seans Blog
 

从上图看,Server是最外层元素,在Service中通过不同的Connector来连接Engine。Engine中包括多个Host,而Host又可以配置多个Context。

1.Server:该元素是server.xml中最重要的元素,他代表了整个JVM,也代表了Tomcat服务器,启动后将在端口8005出等待关闭命令,如果收到“SHUTDOWN”字符串,则关闭服务器

在server.xml代码如下:

         <Server port=”8005” shutdown=”SHUTDOWN” debug=”0”>…</Server>

2. Service:该元素包含一个Engine元素以及一个或多个Connector元素。Tomcat安装后Service默认的名称为:Catalina,此外还可以配置一个与Apache联合的Service

在server.xml代码如下:

         <Service name=”Catalina”>…</Service>

         <Service name=”Apache”>…</Service>

Catalina处理所有直接从Tomcat服务器接收的Web请求

Apache处理所有有Apache服务器转发过来的Web请求

3.  Connector:表示客户端和Service之间的链接。Connector的主要功能是接受、响应用户请求。常用的Connector有HTTP/1.1 Connector和AJP Connector,AJP Connector主要使用AJP协议和Web Connector通信,通常用于集群中。

HTTP/1.1 Connector的实例监听在用户配置的端口上,当应用服务器启动时,HTTP/1.1 Connector负责创建若干线程,用于处理用户请求,创建的线程数目取决于用户配置的minThreads值,默认为5,当有更多的用户请求到来时,HTTP/1.1 Connector将会创建更多的线程用于处理请求,创建线程的最大值由maxThreads定义,默认值为20,当所有的线程都在忙于处理用户请求时,新到来的请求将会放入HTTP/1.1 Connector创建的Socket队列中,队列的长度由
acceptCount
属性定义,当等待队列也被占用满了,新来的用户请求将会收到connection refused错误。

3.1.HTTP/1.1 Connector: 会创建处理客户端请求的线程池,下限minProcessors,上限               maxProcessors属性中配置

3.1.1.non-SSL HTTP Connector:非安全的HTTP连接器,能够执行servlet和jsp,监听端口8080

                  3.1.2.SSL HTTP Connector:安全的HTTP连接器,采用RSA加密,监听端口8443

                  3.1.3.Prox HTTP Connector:代理HTTP连接器,监听端口8082

3.2.JK 2 Connector:和其他Web Connector通过AJP协议通信。可以将tomcat和apache集成,使用apache处理静态文件,支持均衡负载。

                   在server.xml代码如下:

         <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

         Connector常用属性

属性

连接器

解释

默认值

必有

enableLookups

HTTP,JK

调用request.getRemoteHost()方法时获取到客户端的机器

True

RedirectPort

HTTP,JK

如果Connector的配置是支持非SSL的请求,当一个SSL请求到来时,服务器会自动的将请求重定位到redirectPort

8443

acceptCount

HTTP

等待队列的长度,默认值是10

100

maxThreads

HTTP

用于处理用户请求的最大线程数

20

port

HTTP,JK

监听端口

Debug

HTTP,JK

输出日志,数字越大,日志越详细

0

3. Engine:每个Service只能有一个Engine,处理同一个Service的所有Connector接收到的客户请求。

在server.xml代码如下:

<Engine name="Catalina" defaultHost="localhost">…</Engine>

Engine重要配置属性:

jvmRoute:指定名字是apache认识的唯一表示,使得在集群中他们的的session是共享的

4. Host:一个Engine可以包含多个Host,每个Host代表一个虚拟主机,他包含一个或多个Web应用。

在server.xml 代码如下

<Host name=”localhost” debug=”0” appBase=”webapps”

unpackWARs=”true” autoDeploy=”true”>…</Host>

         Host常用属性:

                   appBase:虚拟主机目录,默认为webapps

                   alias:指定虚拟主机别名,可以指定多个别名

                   代码如下

                   <Host name=”localhost”>

                            …

                            <Alias>www.mycompany.com</Alias>

                            <Alias>www.company.com</Alias>

                            …

                   </Host>

         则可以通过localhost、www.mycompany.com、www.company.com访问该虚拟主机下的Web应用,为了使这个策略生效,所有域名必须在DNS服务器等级,并指向运行Catalina实例的同一个主机

5. Context:表示一个Web应用

Context常用属性:

path:指定访问Web的URL入口,写作”/myweb”,这样的请求url为:http://localhost:8080/myweb/***,默认为””,既可以不需要

         docBase:应用程序的路径,可以使绝对路径,默认“ROOT“

6. (嵌套组件)Valve:管道过滤器

a)         访问日志Valve:AccessLogValve

代码如下:

         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="common " />

主要属性:

         Directory:日志保存路径

         Prefix:log文件前缀,如access_log.

         Suffix:log文件后缀,如.txt

         Pattern:日志格式

b)         远端地址过滤器:RemoteAddrValve

将发起请求的客户端的IP地址和一个或多个正则表达式进行比较,以决定或拒绝这个请求

代码如下:

<Context path=”/admin”>

       <Valve className=”org.apache.catelina.valves.RemoteAddrValve” allow=”127.0.0.1”/>

</Context>

        

c)         单次登录Valve:SingleSignOnValve

如果希望用户可以登录到虚拟主机中的任意一个web应用,而且登录以后所有其他的web应用都能使用用户的身份(即不需要重新登录),就可以使用单次登录

8.(嵌套组件)Listener

         用于创建一个LifecycleListener对象,监视所在容器的创建和销毁。可以出现在Server、Engine、Host、Context中

         代码如下

         <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

9.(嵌套组件)Cluster

         未Host配置集群服务,以提高更高的服务性能,他可以出现在Host元素中、

小结

1.  顶层元素

a)         Server

b)         Service:包含多个Connector和一个Engine

2.  连接器元素

a)         HTTP Connector:Tomcat服务连接器

b)         JK Connector:与Apache等外部服务器连接的连接器

3.  容器元素

a)         Engine:包含多个Host

b)         Host:包含多个Context

c)         Context:Web应用配置容器

4.  嵌套组件

a)         Logger:为Server、Engine、Host、Context提供日志功能

b)         Valve:为Engine、Host、Context提供过滤功能

c)         Listener:为Server、Engine、Host、Context提供监听功能

d)         Cluster:为Host提供集群功能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值