1 - Tomcat Server的组成部分
1.1 - Server
A Server element represents the entire Catalina servlet container. (Singleton)
1.2 - Service
A Service element represents the combination of one or more Connector components that share a
single Engine
Service是这样一个集合:它由一个或者多个Connector组成,以及一个Engine,负责处理所有Connector所获得的客户请求
1.3 - Connector
一个Connector将在某个指定端口上侦听客户请求,并将获得的请求交给Engine来处理,从Engine处获得回应并返回客户
TOMCAT有两个典型的Connector,一个直接侦听来自browser的http请求,一个侦听来自其它WebServer的请求
Coyote Http/1.1 Connector 在端口8080处侦听来自客户browser的http请求
Coyote JK2 Connector 在端口8009处侦听来自其它WebServer(Apache)的servlet/jsp代理请求
1.4 - Engine
Engine下可以配置多个虚拟主机Virtual Host,每个虚拟主机都有一个域名
当Engine获得一个请求时,它把该请求匹配到某个Host上,然后把该请求交给该Host来处理Engine有一个默认虚拟主机,当请求无法匹配到任何一个Host上的时候,将交给该默认Host来处理
1.5 - Host
代表一个Virtual Host,虚拟主机,每个虚拟主机和某个网络域名Domain Name相匹配
每个虚拟主机下都可以部署(deploy)一个或者多个Web App,每个Web App对应于一个Context,有一个Context path
当Host获得一个请求时,将把该请求匹配到某个Context上,然后把该请求交给该Context来处理
匹配的方法是“最长匹配”,所以一个path==""的Context将成为该Host的默认Context
所有无法和其它Context的路径名匹配的请求都将最终和该默认Context匹配
1.6 - Context
一个Context对应于一个Web Application,一个Web Application由一个或者多个Servlet组成
Context在创建的时候将根据配置文件$CATALINA_HOME/conf/web.xml和$WEBAPP_HOME/WEB-INF/web.xml载入Servlet类
当Context获得请求时,将在自己的映射表(mapping table)中寻找相匹配的Servlet类
如果找到,则执行该类,获得请求的回应,并返回
2 - Tomcat Server的结构图
3 - 配置文件$CATALI
NA_HOME/conf/server.xml的说明
1<!-- 启动Server 在端口8005处等待关闭命令 如果接受到"SHUTDOWN"字符串则关闭服务器 -->
2
3<Server port="8005" shutdown="SHUTDOWN" debug="0">
4
5 <!-- Listener ??? 目前没有看到这里 -->
6
7 <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" debug="0"/>
8
9 <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" debug="0"/>
10
11
12
13 <!-- Global JNDI resources ??? 目前没有看到这里,先略去 -->
14
15 <GlobalNamingResources>
16
17
18
19 </GlobalNamingResources>
20
21
22
23 <!-- Tomcat的Standalone Service
24
25 Service是一组Connector的集合 它们共用一个Engine来处理所有Connector收到的请求 -->
26
27 <Service name="Tomcat-Standalone">
28
29 <!-- Coyote HTTP/1.1 Connector
30
31 className : 该Connector的实现类是org.apache.coyote.tomcat4.CoyoteConnector
32
33 port : 在端口号8080处侦听来自客户browser的HTTP1.1请求
34
35 minProcessors : 该Connector先创建5个线程等待客户请求,每个请求由一个线程负责
36
37 maxProcessors : 当现有的线程不够服务客户请求时,若线程总数不足75个,则创建新线程来处理请求
38
39 acceptCount : 当现有线程已经达到最大数75时,为客户请求排队
40
41 当队列中请求数超过100时,后来的请求返回Connection refused错误
42
43 redirectport : 当客户请求是https时,把该请求转发到端口8443去
44
45 其它属性略 -->
46
47 <Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
48
49 port="8080" minProcessors="5" maxProcessors="75" acceptCount="100"
50
51 enableLookups="true" redirectPort="8443" debug="0" connectionTimeout="20000"
52
53 useURIValidationHack="false" disableUploadTimeout="true" />
54
55 <!-- Engine用来处理Connector收到的Http请求
56
57 它将匹配请求和自己的虚拟主机,并把请求转交给对应的Host来处理 默认虚拟主机是localhost -->
58
59<Engine name="Standalone" defaultHost="localhost" debug="0">
60
61<!-- 日志类,目前没有看到,略去先 -->
62
63 <Logger className="org.apache.catalina.logger.FileLogger" />
64
65 <!-- Realm,目前没有看到,略去先 -->
66
67 <Realm className="org.apache.catalina.realm.UserDatabaseRealm" />
68
69 <!-- 虚拟主机localhost
70
71 appBase : 该虚拟主机的根目录是webapps/
72
73 它将匹配请求和自己的Context的路径,并把请求转交给对应的Context来处理
74