tomcat学习

从官网下载tomcat源码

导入:创建Project选择Java Project from Existing Ant buildfile,然后引入tomcat源码

依赖包:ant.jar jaxrpc.jar org.eclipse.jdt.core_3.3.1.v_780_R33x.jar(此包在myeclipse)wsdl4j-1.5.1.jarjdk6

运行: org.apache.catalina.startup.Bootstrap类

<!--[if !supportLists]-->1.       <!--[endif]-->运行时配置参数start

<!--[if !supportLists]-->2.       <!--[endif]-->添加VM参数-Dcatalina.home="E:\Program Files\Apache Software Foundation\Tomcat 6.0"tomcat的安装地址。

      setCatalinaHome();//设置系统属性值catalia.home,在开始运行Bootstrap时,就添加了此值。设置当前的工作路径。
setCatalinaBase();//设置catalia.base值
initClassLoaders();//初始化commonLoader,catalinaLoader,sharedLoader三大加载器
//在当前线程中设置catalinaLoader
Thread.currentThread().setContextClassLoader(catalinaLoader);
//securityClassLoad中加载一些相关的类
SecurityClassLoad.securityClassLoad(catalinaLoader);
//…利用反射调用Catalina类的setParentClassLoader
//至此初始化完成
  catalia.homecatalia.base 的区别 : http://txy821.iteye.com/blog/557584

catalina.homecatalina.base这两个属性仅在你需要安装多个Tomcat实例而不想安装多个软件备份的时候使用,这样能节省磁盘空间。Tomcat目录下只有 bin lib 目录可以被多个实例共用,其它目录conflogstempwebappswork每个Tomcat实例必须拥有其自己独立的备份。

catalina.home指向公用信息的位置,就是binlib的父目录。
catalina.base
指向每个Tomcat目录私有信息的位置,就是conflogstempwebappswork的父目录。
仅运行一个Tomcat实例时,这两个属性指向的位置是相同的。

tomcat多实例运行介绍: http://blog.csdn.net/hansoft/article/details/647060

 

initClassLoaders:先得介绍CatalinaProperties类,此类有个loadProperties方法,方法中加载属性文件catalina.properties中的内容,添加到系统属性中。方法在类的静态代码块中被调用。调用createClassLoader方法创建加载器,首先通过catalinaProperties取得配置文件中的相关属性值(即lib存放的位置),然后由ClassLoaderFactory工厂创建。在此工厂中创建该加载器的classpath,最后通过StandardClassLoader(此类为ClassLoader的间接子类)创建一实例加载器。initClassLoaders()载入tomcat安装目录下,子目录common/libserver/libshared/lib下的jar运行时库文件,并创建对应的三个classloadercommonLoadercatalinaLoadersharedLoader,并且commonLoadercatalinaLoadersharedLoader的父节点。Tomcat5是这样的结构,但在tomcat6中结构发生改,查看catalinaProperties文件可以看见server.loadershared.loader都是为空的。

 

start启动时先初始化相应参数和目录,创建一个Digester用于解析server.xml,最后创建一个新的server并进行初始化(standardServer中的initialize方法)。最后调用Catalina中的start(),通过反射调用Lifecycle中的start方法。Lifecycle为一接口,定义Tomcat生命周期的相关内容,而StandardService为实现Lifecycle的子类。

Start方法中主要实现:1.修改生命周期状态 2.触发开始前的相关事件 3.开始定义的容器 4.开始定义的连接器 5.触发开始后的相关事件

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值