Tomcat源码阅读之StandardService与MapperListener分析

而Service可以有多个connector对象,但是只能有一个container(一般就是engine对象)对象。。所以分析各个不同的container对象的入口就在于service对象。。。而在tomcat中一般都是用StandardService这个类型。。。先来看看一个初略的继承结构吧:
摘要由CSDN通过智能技术生成

前面的文章分析了在tomcat中的container与pipeline的设计。。。我们知道Server是Service对象的容器,

而Service可以有多个connector对象,但是只能有一个container(一般就是engine对象)对象。。

所以分析各个不同的container对象的入口就在于service对象。。。而在tomcat中一般都是用StandardService这个类型。。。

先来看看一个初略的继承结构吧:



这里其实StandardService算是比较简单的了,首先它继承了LifecycleMBeanBase,这说明这个对象在启动之后将会被注册到JMX上去。。。同时它实现了service接口。。。这里就先来看看这个接口的定义吧:

package org.apache.catalina;

import org.apache.catalina.connector.Connector;
import org.apache.catalina.mapper.Mapper;

public interface Service extends Lifecycle {

    public Container getContainer();   //获取拥有的container,service对象只拥有一个container

    public void setContainer(Container container);   //设置拥有的container

    public String getName();  //service的名字

    public void setName(String name);

    public Server getServer();  //返回所属的server对象

    public void setServer(Server server);

    public ClassLoader getParentClassLoader();   //获取parentClassLoader

    public void setParentClassLoader(ClassLoader parent);

    public String getDomain();   //在jmx注册在哪个domain下面

    public void addConnector(Connector connector);   //添加一个connector

    public Connector[] findConnectors();  //返回所有的connector

    public void removeConnector(Connector connector);  // 移除一个connecter

    public void addExecutor(Executor ex);   //添加一个executor

    public Executor[] findExecutors();   //返回所有的executor

    public Executor getExecutor(String name);  //根据名字获取executor

    public void removeExecutor(Executor ex);     //移除一个executor

    Mapper getMapper();   //用于请求的map
}

上面接口的定义其实也还挺简单的,无非首先拥有的container对象的管理,另外这里会管理容纳多个connector对象,同时还有executor对象,在以前分析connector部分的时候,我们知道在connector的创建的时候可以指定executor对象,这里指定的executor就是定义在servie对象里面的,当然如果没有指定的话,那么将会创建默认的executor、。、、、

同时这里还有一个非常重要的值得注意的东西,那就是mapper,他将会具体的负责请求的路由。。。

好啦,那么接下来来看看StandardService类型的属性的定义吧:

    private String name = null;

    private static final StringManager sm =
        StringManager.getManager(Constants.Package);

    private Server server = null;   //所属的server对象

    protected final PropertyChangeSupport support = new PropertyChangeSupport(this);   //用于支持监听属性的修改

    protected Connector connectors[] = new Connector[0];    //connector的数组
    private final Object connectorsLock = new Object();  //当修改connector时候用到的锁

    protected final ArrayList<Executor> executors = new ArrayList<>();   //所有定义的executor,connector可以用这个里面定义的executor

    protected Container container = null;  //关联的container

    private ClassLoader parentClassLoader = null;   //classLoader

    protected final Mapper mapper = new Mapper();  //用于请求的map,host的map,warpper,context的map啥的

这里具体每个属性是干嘛用的注释应该说的蛮清楚的吧。。。接下来来看看StandardService启动吧:

    //启动
    protected void startInternal() throws LifecycleExc
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值