转载请注明出处:http://blog.csdn.net/linxdcn/article/details/73321304
1 组件与框架介绍
Server:代表整个Catalina Servlet容器,可以包含一个或多个Service
Service:包含Connector和Container的集合,Service用适当的Connector接收用户的请求,再发给相应的Container来处理
Connector:实现某一协议的连接器,用来处理客户端发送来的协议,如默认的实现协议有HTTP、HTTPS、AJP
Engine:接到来自不同Connector请求,处理后将结果返回给Connector。Engine是一个逻辑容器
Host:虚拟主机,即域名或网络名,一个Engine可以包含多个Host。
Context:部署的具体Web应用的上下文,每个请求都在是相应的上下文里处理,如一个war包
Wrapper:对应定义的Servlet
由上可知,Catalina中有两个主要的模块:连接器(Connector)和容器(Container)
2 组件功能
2.1 Server
Server为定义的接口,默认实现是StandardServer,主要作用有
- 定义了 Servlet 容器的相关配置,即
server.xml
中的配置 - 启动
Server
将启动所有的Tomcat组件,关闭Server
将关闭所有组件
Server接口中重要的方法如下:
public interface Server extends Lifecycle {
public int getPort();
public void setPort(int port);
public String getAddress();
public void setAddress(String address);
public String getShutdown();
public void setShutdown(String shutdown);
public void addService(Service service);
public Service findService(String name);
public Service[] findServices();
public void removeService(Service service);
}
2.2 Service
Service为定义的接口,默认实现是StandardService,主要作用有
- 逻辑上包含Connector和Container
Service接口中重要的方法如下:
public interface Service extends Lifecycle {
public Engine getContainer();
public void setContainer(Engine engine);
public String getName();
public void setName(String name);
public Server getServer();
public void setServer(Server server);
public void addConnector(Connector connector);
public Connector[] findConnectors();
public void removeConnector(Connector connector);
}
2.3 Connector
Connector为定义的连接器类,默认实现的协议有http、https、AJP,主要作用有
- 根据不同的协议解析客户端的请求
- 将解析完的请求转发给Connector关联的Engine容器处理
Connector默认支持的协议如下:
/**
* Defaults to using HTTP/1.1 NIO implementation.
*/
public Connector() {
this("org.apache.coyote.http11.Http11NioProtocol");
}
public Connector(String protocol) {
boolean aprConnector = AprLifecycleListener.isAprAvailable() &&
AprLifecycleListener.getUseAprConnector();
if ("HTTP/1.1".equals(protocol) || protocol == null) {
if (aprConnector) {
protocolHandlerClassName = "org.apache.coyote.http11.Http11AprProtocol";
} else {
protocolHandlerClassName = "org.apache.coyote.http11.Http11NioProtocol";
}
} else if ("AJP/1.3".equals(protocol)) {
if (aprConnector) {
protocolHandlerClassName = "org.apache.coyote.ajp.AjpAprProtocol";
} else {
protocolHandlerClassName = "org.apache.coyote.ajp.AjpNioProtocol";
}
} else {
protocolHandlerClassName = protocol;
}
// Instantiate protocol handler
ProtocolHandler p = null;
try {
Class<?> clazz = Class.forName(protocolHandlerClassName);
p = (ProtocolHandler) clazz.getConstructor().newInstance();
} catch (Exception e) {
log.error(sm.getString(
"coyoteConnector.protocolHandlerInstantiationFailed"), e);
} finally {
this.protocolHandler = p;
}
}
2.4 Engine
Engine为定义的接口,默认实现是StandardEngine,主要有以下模块:
- Cluster:实现tomcat管理
- Realm:实现用户权限管理模块
- Pipeline和Valve:处理Pipeline上的各个Valve,是一种责任链模式。只是简单的将Connector传过来的变量传给Host容器
2.5 Host
Host为定义的接口,默认实现是StandardHost,主要有以下模块:
- Cluster:实现tomcat管理
- Realm:实现用户权限管理模块
- Pipeline和Valve:处理Pipeline上的各个Valve,是一种责任链模式
2.6 Context
Context为定义的接口,默认实现是StandardContext,主要有以下模块:
- Realm:实现用户权限管理模块
- Pipeline和Valve:处理Pipeline上的各个Valve,是一种责任链模式
- Manager: 它主要是应用的session管理模块
- Resources: 它是每个web app对应的部署结构的封装
- Loader:它是对每个web app的自有的classloader的封装
- Mapper:它封装了请求资源URI与每个相对应的处理wrapper容器的映射关系
2.7 Wrapper
Wrapper为定义的接口,默认实现是StandardWrapper,主要有以下模块:
- Pipeline和Valve:处理Pipeline上的各个Valve,是一种责任链模式
- Servlet和Servlet Stack:保存Wrapper包装的Servlet
转载请注明出处:http://blog.csdn.net/linxdcn/article/details/73321304