tomcat学习之二:tomcat的结构

1、从server.xml看tomcat的结构

      tomcat的结构可以从server.xml文件看出一二,例如server包含service,而service包含engine,engine中包含host。 去除监听器、用户登录等配置,server.xml如下:

<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
  <Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost">
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
		<Context path = "/word" docBase = "G:\java\web\hello" />
      </Host>
    </Engine>
  </Service>
</Server>
转换成图如下图所示:

        各个结构含义如下:

              server:代表一个tomcat实例,同时所有的配置都应该在server标签之间,经过解析后,server标签会生成对应的org.apache.catalina.Server对象。

              service:代表一个服务,同样解析后会生成对应的org.apache.catalina.Service。

              connector:连接器,作用是监听端口,接收socket请求,并交由容器处理。较老版本的tomcat会生成org.apache.catalina.Connector对象,这是一个接口,新版本的会生成对应的org.apache.catalina.connector.Connector对象,这是一个类。如上图,一个Service是可以有多个connector的,只要监听的端口不同。

        容器:

              Engine:引擎,一个引擎可以包含多个Host,解析后会生成对应的org.apache.catalina.Engine对象。

              Host:主机,例如访问的localhost就是tomcat的默认配置。解析后会生成对应的org.apache.catalina.Host对象。

              Context:应用上下文,具体部署的服务。解析后会生成对应的org.apache.catalina.Conext对象。

        其他组件:

              Valve:阈,在容器处理请求前,会由一个叫做Pipeline的组件调用Valve,容器可以有多个Valve,在tomcat4.x和5.x,是使用Valve数组的形式来循环遍历调用的,但tomcat7之后是基于链的形式调用的。 解析后会生成相应的org.apache.catalina.Valve对象。

             Listener:监听器,tomcat在启动、停止等生命周期的相应操作。解析后会生成org.apache.catalina.LifecycleListener对象。

        以上就是基本可以从server.xml文件中读出的配置,但还有一些其他组件配置,例如Host中的Realm。

2、从源码看tomcat的结构

        先从 tomcat官方网址下载源码解压后将java文件夹的代码导入到IDE中,再将servlet-api的依赖加入到项目中。
        ps : 如果IDE提示无法导入,可以在IDE新建一个project,然后将java中的代码拷贝过去。
       在查看源码前,先牢记一点:
                如果遇到类XXXBase,则表示该类为XXX接口的基本实现,如果遇到类StandardXXX,则表示该类为XXX接口的标准实现。
2.1、 Server组件
       tomcat的启动类为org.apache.catalina.startup.BootStrap,该类会在init方法中启动Catalina类,会在Catalina的load()方法中解析server.xml,生成Catalina类持有的Server对象。可以认为Server代表tomcat,点开Server,可以发现Server继承了Lifecycle接口。如图:
public interface Server extends Lifecycle {
	//接口方法略
}
        编写Servlet应该知道,Servlet有初始化、销毁、服务的生命周期。在tomcat中,用org.apache.catalina.Lifecycle来表示生命周期,用org.apache.catalina.LifecycleListener接口表示生命周期监听器,用org.apache.catalina.LifecycleEvent表示生命周期的各个事件,比如启动、停止、销毁、启动前等事件。同时tomcat还添加了许多XXSuport类来简化组件处理监听器事件和生命周期事件。

       编写servlet时,servlet的初始化以及销毁将由tomcat来调用相应方法完成,具体一点应该为servlet的父容器来调用。tomcat内部就是采用这种方式
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值