Tomcat分析

Tomcat顶层结构及启动过程

tomcat最顶层的容器叫Server,代表整个服务器,一个tomcat只有一个。由org.apache.catalina.startup.Catalina管理(整个tomcat的管理类。其中的load()用于根据conf/server.xml创建Server并调用Server的init方法进行初始化;start()方法调用Server的start()用于启动服务器,stop()用于调用Server的stop()停止服务器.以上三个方法会逐层调用相应的方法;如Server的start()会调用Service的start(),Service的start()会调用其包含的Connectors和Container的start()方法,从而启动整个服务器)

Catalina中的await()方法直接调用Server的await方法,进入一个循环,让主线程不会退出。

Server中最少包含一个Service(可以有多个),用于具体提供服务

Service主要包含Connector(处理连接相关,并提供Socket与request、response的转换,一个Service可以有多个连接,如同时提供http和https连接或提供相同协议不同端口的连接)和Container(用于封装和管理Servlet以及具体的request请求,一个service只有一个容器)

 

 

tomcat的入口main()方法在org.apache.catalina.startup.Bootstrap中(作用类似一个CatalinaAdaptor,具体处理过程由Catalina完成)

Container(四个子接口:Engine Host Context Wrapper和一个默认实现类ContainerBase)是tomcat中容器的接口,通常Servlet就封装在其子接口Wrapper中. Container接口继承Lifecyle接口(默认实现LifecyleBase,管理生命周期的类)

Engine Host Context Wrapper都是一个容器,都由一个对应的实现类StandardXXX并extends ContainerBase.

四个子容器是逐层包含的关系(下图是最简化的情况):

 

 

 Engine和Host配置在conf/server.xml中,直接使用Engine和Host标签。Host标签的name属性代表域名,appBase属性指定站点位置(如默认的webapp目录),unpackWARs属性表示自动解压war文件;autoDeploy=true则tomcat在运行过程中在webapps目录中加入新的应用会自动部署并启动。Host的Alias子标签用来定义别名(可以设置多个域名访问同一站点)

Context有三种配置方法

1.通过文件配置(有5个位置可以配置:a.conf/server.xml的Context标签. b.conf/[enginename]/[hostname]下添加以应用命名的xml文件. c.应用自己的/META-INF/context.xml文件. d.conf/context.xml文件. e. conf/[enginename]/[hostname]/context.xml.default文件其中前三个用于配置单独的应用,后两个是共享的,d在整个tomcat中是共享的,e在对应的站点(Host)中共享. 另外conf/server.xml文件需要tomcat重启才能生效)

2.将WAR应用直接放到Host目录下,tomcat会自动查找并添加到Host中

3.将应用的文件夹放到Host目录中

Wrapper的配置就是在web.xml中配置Servlet,一个Servlet对应一个Wrapper;也可以在conf/web.xml文件中配置全局的Wrapper,处理Jsp的JspServlet就配置在这里。

 

同一个Service下的所有站点共享Connector,所以监听的端口一样,如想添加监听不同端口的站点,可以通过不同的Service来配置(在conf/server.xml中配置)

 

转载于:https://www.cnblogs.com/code2038/p/9739685.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值