Tomcat6.0.18与Tomcat5的类加载机制有所不同,在5版本时,如下图:
Bootstrap
|
System
|
Common
/ \
Catalina Shared
/ \
Webapp1 Webapp2
在Tomcat5.5/server\lib\catalina.jar中,查看org\apache\catalina\startup\catalina.properties文件,从中可以看到上图中的3个classloader的加载项定义:
common.loader
=${catalina.home}/common/classes,${catalina.home}/common/i18n/*.jar,${catalina.home}/common/endorsed/*.jar,${catalina.home}/common/lib/*.jar
server.loader
=${catalina.home}/server/classes,${catalina.home}/server/lib/*.jar
shared.loader
=${catalina.base}/shared/classes,${catalina.base}/shared/lib/*.jar
同时,tomcat的安装目录下也存在上述server和shared文件夹,用于存放相关的jar。
在web app中的class加载时的搜索顺序如下:
Bootstrap--->System--->/WEB-INF/classes--->
/WEB-INF/lib/*.jar--->
Common---->Shared
初始化这几个类加载器的代码在org.apache.catalina.startup.Bootstrap.initClassLoaders(),代码都很简单,一看即知。
Tomcat6.0.18时,类加载机制已经变成如下图:
Bootstrap
|
System
|
Common
/ \
Webapp1 Webapp2 ...
所有的jar文件存放路径也改变了,都存放在apache-tomcat-6.0.18\lib目录下。这点从catalina.properties文件中也可以看出,在Tomcat6.0.18的catalina.properties文件中,“server.loader”和“shared.loader”已经为空了。
实际初始化类加载器时,源码(org.apache.catalina.startup.Bootstrap.createClassLoader)中有如下代码:
//此行取出catalina.properties中定义的“server.loader”和“shared.loader”的值
String value = CatalinaProperties.getProperty(name + ".loader");
//如果值为空,则返回parent,此时,parent即commonLoader,加载项对应common.loader的值
if ((value == null) || (value.equals("")))
return parent;
由此可见,在Tomcat6.0.18中,5版本中使用的"server"和"shared"2个类加载器默认情况没有任何作用,都变成了common类加载器。从Tomcat6.0.18的安装目录中也可以看到,没有了server"和"shared"2个文件夹。而在web app中的class加载时的搜索顺序改变成如下:
Bootstrap--->System--->/WEB-INF/classes--->
/WEB-INF/lib/*.jar--->
Common
同时,在源码中还有另2行相关的类加载器初始化代码需要关注:
Thread.currentThread().setContextClassLoader(catalinaLoader);
SecurityClassLoad.securityClassLoad(catalinaLoader);
Thread.currentThread().setContextClassLoader(catalinaLoader);的原理很简单,当前能获得的类加载器层次过高,无法加载一些额外的class,此时可为线程关联一个指定的类加载器,用于加载一些自己的class。
SecurityClassLoad.securityClassLoad(catalinaLoader);源码很清楚的指出,当启动了SecurityManager时,为避免触发AccessControlException,预先加载一些类。在catalina.bat中存在如下定义:
SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy
分享到:
相关推荐
这是关于Java服务器的一个很好的用例,或许你到今天还在为如何使用tomcat发愁,那么下载一下他,安装完成后,你会发现很简单。
tomcat_6.0.18_配置[文].pdf
解压完即可用,不用安装,可以直接在myeclipse里配置即可
JAVA web 应用 一些技术服务器搭建 都可以应用 非常强大的服务软件工具 网络转载 不能使用时,请及时联系
tomcat6.0.18目前最新版2009.5.27/18.48
tomcat6.0.18 适用于windows平台。
tomcat_6.0.18_基础配置: 第一步:下载jdk和tomcat:JDK下载 Tomcat下载; 第二步:安装和配置你的jdk和tomcat; 第三步:建立自己的jsp app目录 ; 第四步:建立自己的Servle; 第五步:建立自己java Bean; 第六...
tomcat-6.0.18 安装版 tomcat-6.0.18 安装版tomcat-6.0.18 安装版
解压密码:123456 貌似5.0和7.0的资源忘记备注解压密码了,都是123456.
Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with ... The ASF licenses this file to You under the Apache License, ...
APACHE 2.2.9+TOMCAT6.0.18配置 APACHE 2.2.9+TOMCAT6.0.18配置
tomcat 6.0.18 最新 安装版
apache-tomcat6.0.18免安装开发版
tomcat6.0.18.rar,开源服务器软件,适用于windows xp/2000系统
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。
Tomcat服务器apache-tomcat-6.0.18版
资源包括了linux下java开发的常用工具,jdk,tomcat,mysql,ant等,不用您去官方上一个一个下载,这里就有了
基于LINUX的TOMCAT6 apache-tomcat-6.0.18-src.tar.gz