1.组件定义
Tomcat中只有一个Server,一个Server可以用多个Service,一个Service可以有多个Connector和一个Container。
Server掌握着整个Tomcat的生死大权。
Service是对外提供服务的。一个Server可以有多个Service,只不过Cataina中只添加了一个,这一个就代表了Tomcat的所有服务。
Connector用于接收请求并将请求封装成Request和Response来具体处理
Container用于封装和管理Servlet,以及具体处理reqeust请求

如上图,一个Service包含多个Connector和一个Engine,两者的关联关系使用Mapper来做映射,还有一个可选的线程池Executor。
2.属性
先把Service的属性代码摆出来:
/**
* service的名称
*/
private String name = null;
/**
* Service所属的Server
*/
private Server server = null;
/**
* 组件对属性改变的支持
*/
protected final PropertyChangeSupport support = new PropertyChangeSupport(this);
/**
* 跟这个Service相关联的Connector集合
*/
protected Connector connectors[] = new Connector[0];
/**
* Connector的锁
*/
private final Object connectorsLock = new Object();
/**
* 线程池
*/
protected final ArrayList<Executor> executors = new ArrayList<>();
/**
* Servlet的引擎
*/
private Engine engine = null;
/**
* 类加载器
*/
private ClassLoader parentClassLoader = null;
/**
* Mapper.
*/
protected final Mapper mapper = new Mapper();
/**
* Mapper 监听器
*/
protected final MapperListener mapperListener = new MapperListener(this);
解释一下这里面关键的几个点:
Connector connectors[]:多个连接器,一个Servlet服务接受两个不同的协议连接,只不过不同的协议通过对应的Connector都被处理成了一个Request对象,这样对于Engine来说,都是一样的请求。
Engine engine:Servlet引擎,就是专门用来处理请求的,其他的都不管。
Mapper mapper:mapper保存了一个映射关系,不同请求路径对应哪一个Servlet的API。
PropertyChangeSupport support:JDK自带的观察者模式,主要是观察Java Bean对象的属性更改的,等会拿出来单独说。
在Service属性中,主要就是这四个东西,主要的架构关系,在上面的图中有解析,就不再多介绍。
3.动作
Service的方法比较简单,因为只是包装,自己没有太多的一个功能,所有主要功能有:1.监听Service属性变化,2.启动,3.关闭。没了,就这三个,其他的都是对属性的setter和getter的具体实现,就不管了。
3.1.启动
在Server组件的分析中,我们已经知道了Server会调用Service的init()方法和start()方法来完成启动操作,那我们分别来看一下Service组件的init()和start()。
首先是init()方法:
protected void initInternal() throws LifecycleException {
//1.父类执行init
super.initInternal();
//2.执行servlet的引擎engine的init
if (engine != null) {
engine.init()

本文介绍了Tomcat中的Service组件,包括其组件定义、属性、启动、关闭和监听属性变化的过程。Service作为对外提供服务的组件,包含多个Connector和一个Container。在启动和关闭过程中,Service主要负责调用子组件的相关方法。同时,文章提到了使用PropertyChangeSupport进行属性监听的机制。
最低0.47元/天 解锁文章
1212

被折叠的 条评论
为什么被折叠?



