Tomcat作为Servlet容器的基本功能
1、Servlet规范规定,Servlet容器响应客户请求访问特定Servlet的流程如下:
Servlet,顾名思义,是运行在服务器端的小插件。
a. 客户端发出请求访问特定Servlet;
b. Servlet容器接收到客户端请求,对其解析;
c. Servlet容器创建一个ServletRequest对象/实例,包含了如请求头、请求消息体等;
d. Servlet容器创建一个ServletResponse对象;
e. Servlet容器调用客户端所请求的service()服务方法,并且把ServletRequest对象和ServletResponse对象作为参数传递给该service()方法;
f. Servlet从ServletRquest对象中获取客户端的请求信息;
g. Servlet利用ServletResponse对象生成响应结果;
h. Servlet容器把Servlet生成的响应结果发送给客户端。
2、Tomcat的组成结构
Tomcat本身由一些列可配置的组件构成,其核心组件是Servlet容器组件,它是所有其他Tomcat组件的顶层容器。
注意:此部分与Servlet规范无关,不同的Web容器厂商可以以不同的方式来实现符合Servlet规范的Servlet容器。
Tomcat各个组件在conf/server.xml
文件中进行配置,每个Tomcat组件在server.xml
文件中对应一种配置元素。
xml文件中Tomcat组件元素可以分为4类:
a. 顶层类元素,包括<Server>
和<Service>
;
b. 连接器类元素, 即<Connector>
,代表介于客户端和服务器之间的通信接口,负责转发消息;
c. 容器类元素, 代表处理客户请求并生成响应结果的组件,有4种容器类元素,分别为<Engine>
、<Host>
、<Context>
、<Cluster>
。
Engine组件为特定的Service组件处理所有客户端请求;
Host组件为特定的虚拟机处理所有客户端请求;
Context组件为特定的Web应用处理所有客户端请求;
Cluster组件负责为Tomcat集群系统进行会话复制、Context组件的属性复制,以及集群范围内WAR文件的发布;
d. 嵌套类元素,代表可以嵌入到容器中的组件,如<Valve>
和<Realm>
等。
3、Tomcat各元素/组件之间的关系
a. <Server>
元素,Tomcat顶层元素。包含一或多个<Service>
元素;
b. <Service>
包含一个<Engine>
,一对一,以及一个或多个<Connector>
;
<Engine>
元素在同一个<Service>
中所有<Connector>
元素接收到的客户端请求;
c. <Host>
,包含一个或多个Web应用;一个<Engine>
可以包含多个<Host>
;
d. <Context>
元素,使用最频繁的元素。每个<Context>
代表了运行在虚拟机上的单个Web应用。一个<Host>
可以包含多个<Context>
元素。
Tomcat自带了一个名为“Catalina”的Engine组件。
小结
1、Tomcat是符合SUN的Servlet规范的优秀Servlet容器。Servlet规范为Servlet容器与JavaWeb应用之间协作制定了标准接口,其中最重要的接口就是Servlet。
2、Tomcat自身的实现由一系列可配置的组件构成,用户可以在server.xml配置文件中对这些组件进行配置。
3、Tomcat本身是Java程序,需要通过JDK提供的JVM才能运行。运行在JVM进程中。运行Tomcat要配置JAVA_HOME
环境变量。特殊情况下,还要配置CATALINA_HOME
环境变量。
参考《Tomcat与Java Web开发技术详解》第2版第2章