tomcat源码阅读之部署器
我们知道web应用是用Context实例表示的,而Context是部署到Host实例中的,因此tomcat的部署器是关联的Host实例。Context实例可以用WAR文件部署,也可以把整个web应用的文件夹复制到webapp目录下,而部署器在部署时会扫描webapp目录下的web应用程序,并且还会启动一个监控线程定期扫描webapp目录下的web应用是否发生了更新,如果有更新则重新部署更新的web应用;
一、UML图:

1、部署器的接口是Deployee,其中install方法可以安装一个web应用,findDeployedApp可以查找已经安装到Host中的web应用程序,start方法启动指定的Context,stop方法关闭指定的Context;
2、StandardHost类和StandardHostDeployer类均实现了Deployer接口,StandardHost类的install方法都是委托给StandardHostDeployer类实现的,而StandardHostDeployer的install方法又会调用StandardHost类的addChild方法将Context的name和对象实例保存到Hash表中,代码如下:

3、HostConfig类作为Host实例的监听器,在Host实例启动时会发出一个START_EVENT事件,HostConfig实例在收到START_EVENT事件时会调用start方法,在start方法中会去扫描webapp目录下的应用程序并安装到Host中,然后启动这些Context应用,同时会启动一个线程在后台定时扫描webapp目录下的Context应用是否有发生更新,扫描更新时调用的checkWebXmlLastModified方法检查web应用是否有更新,如果有更新则重新安装并启动Context;

deployApps方法会扫描webapp目录下的web应用并安装启动,threadStart方法会启动一个线程,在线程的run方法中定期扫描webapp目录下web应用是否有更新并重新发布Context应用(默认是间隔15秒扫描一次):

4、deployApps会扫描webapp目录下的xml文件、WAR文件和web应用目录:

安装web应用目录时,会创建StandardContext实例,并设置其Path和DocBase属性,安装WAR文件时也是先将WAR文件解压到webapp目录下,然后用与安装目录同样的方式安装Context应用;

而安装xml文件的方法则web应用可以不在webapp目录下,只需要在xml文件中配置Context元素,并且指定Context元素的DocBase属性,这样在扫描到Context元素时就能创建Context实例并设置其DocBase属性(DocBase属性可以指向其他路径下的web应用),如下:


5、HostConfig类的实例并没有直接的代码去创建,而是通过xml文件配置,Digester对象扫描xml文件时生成HostConfig对象并添加到Host实例的监听器中:

二、部署web应用流程:

1、当StandardHost的start方法被调用时会发出START_EVENT事件,HostConfig作为StandardHost的监听事件也会收到这个事件,然后会调用HostConfig.start方法;
2、HostConfig.start方法中会调用deployApps发布web应用,deployApps会扫描webapp目录下的xml描述文件、WAR文件和web应用目录并分别发布;
3、在发布指定的应用时调用Host.install方法,Host.install又委托给StandardHostDeployer类的实例的install方法;
4、StandardHostDeployer.install方法发布web应用时,如果是xml描述应用,则使用Digester扫描xml,生成Context对象并设置属性;如果是WAR文件或者目录形式的web应用时,会根据web应用路径生成StandardContext实例;然后调用Host.addChild方法将生成的Context实例和Context名称属性添加到一个Hash表中,这样在Host实例中根据名称就能查找到对应的Context实例;
tomcat源码阅读之部署器的更多相关文章
- tomcat源码阅读之载入器(Loader)
一.Java类的载入器: 双亲委派模型: 1.JVM提供了三种类型的类加载器:引导类载入器(bootstrap class loader).扩展类载入器(extension class loader) ...
- SpringMVC源码阅读:拦截器
1.前言 SpringMVC是目前J2EE平台的主流Web框架,不熟悉的园友可以看SpringMVC源码阅读入门,它交代了SpringMVC的基础知识和源码阅读的技巧 本文将通过源码(基于Spring ...
- Tomcat源码阅读(二)初始化
近来,我开始阅读tomcat的源码,感觉还挺清晰易懂:为了方便理解,我参考了网上的一些文章,把tomcat的组成归纳一下:整个tomcat的组成如下图所示: Tomcat在接收到用户请求时,将会通过以 ...
- tomcat源码阅读
1 工具准备 需要SVN.Maven.JDK.Eclipse.Eclipse M2插件 2 下载源码及发布包 源码在这里:http://svn.apache.org/repos/a ...
- tomcat源码阅读之过滤器
一.Servlet过滤器: 1.介绍: Servlet过滤器本身并不生成请求和响应对象,它只提供过滤作用. Servlet过滤器能够在Servlet被调用之前检查Request对象,修改Request ...
- tomcat源码阅读之SingleThreadModel
一.接口简介: 实现了SingleThreadModel接口的servlet类只能保证在同一时刻,只有一个线程执行该servlet实例的service方法,在tomcat实现中会创建多个servlet ...
- tomcat源码阅读之session管理器(Manager)
一.UML图分析: (一) Session: Session保存了一个客户端访问服务器时,服务器专门为这个客户端建立一个session用来保存相关的会话信息,session有一个有效时间,这个时间默认 ...
- tomcat源码阅读之BackupManager
一. 配置: <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOpti ...
- tomcat源码阅读之集群
一. 配置: 在tomcat目录下的conf/Server.xml配置文件中增加如下配置: <!-- Cluster(集群,族) 节点,如果你要配置tomcat集群,则需要使用此节点. clas ...
随机推荐
- 现在转战c++的领域,纯幼儿园
C++中: 如果你用#include<iostream.h>就不需写这句话(旧标准).但是如果你用#include<iostream>就必须要写.但是在VS2010中就出现错误 ...
- 利用nodeJs anywhere搭建本地服务器环境
1.npm install anywhere -g 如果是mac系统会提示你权限不够,需要在代码前加上 sudo获取管理员权限.即sudo npm install anywhere -g. 2.安装完 ...
- 操作系统错误 5:"5(拒绝访问。)
------------------------------ 无法打开物理文件 "G:/QGJX.mdf".操作系统错误 5:"5(拒绝访问.)". (Micr ...
- OC MRC之多对象之间管理(代码分析)
#import <Foundation/Foundation.h> @interface Book : NSObject { int _price; } - (void)setPrice: ...
- html form表单提交后处理返回数据
上传如果通过form提交并且需要处理返回值.(其实用ajax上传方式刚好,看需要) 可以这么做: <form id="importBookForm" action=" ...
- hadoop redis install (4)
reference: http://dblab.xmu.edu.cn/blog/131/ https://github.com/dmajkic/redis https://blog.csdn ...
- 8 标准库C文件
使用标准C库时,下面哪个选项使用只读模式打开文件. A fopen("foo.txt","r");//r 打开只读文件 B fopen("foo.tx ...
- vue项目启动
这篇文章主要用于有源码vue项目安装: 1.安装node.js环境(npm包管理器)前面博客有写到如何安装: 2.vue-cli 脚手架构建工具前面博客有写到如何安装: 3.cnpm npm的淘宝镜 ...
- Effective C++阅读笔记
条款1:视C++为一个语言联邦:C.Object-Oriented C++.Template C++.STLC++高效编程守则视情况而变化,取决于使用C++的哪一个部分 条款2:尽量以const,en ...
- L212
Just 33 minutes into the New Year, NASA's New Horizons probe made space exploration history, flying ...