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
分享到:
相关推荐
Tomcat 6.0.18虽然相比更现代的版本可能缺少一些特性,但它仍然是学习Java Web基础和理解Servlet/JSP工作原理的好选择。同时,对于那些依赖旧版Java API的项目,保持使用旧版本的Tomcat可以确保兼容性。 总之,...
【标题】"Tomcat6.0.18 解压缩版" 涉及的主要知识点是Apache Tomcat服务器的6.0.18版本,这是一个开源的、基于Java Servlet和JavaServer Pages (JSP) 技术的应用服务器。Tomcat是Java EE Web应用程序部署的最常用...
本文主要针对`tomcat_6.0.18_配置[文].pdf`文档中的内容进行详细解读,帮助读者理解如何配置Apache Tomcat 6.0.18,并通过实例演示如何搭建一个基本的JSP应用。 #### 二、环境准备 **1. 下载与选择版本** - **JDK...
Apache Tomcat 6.0.18 是一个广泛使用的开源软件,主要作为Java Servlet和JavaServer Pages (JSP) 的容器。它实现了Java EE的Web应用程序部署规范,是开发和运行Java Web应用的重要平台。Tomcat是Apache软件基金会的...
【标题】"绿色免安装Tomcat6.0.18"是针对Java应用程序服务器Tomcat的一个特殊版本,它不需要通过传统的方式进行安装,比如运行安装程序。这种版本通常是为了方便用户快速部署和运行,尤其适合那些对系统环境要求不高...
标题“tomcat6.0.18”指的是Apache Tomcat服务器的一个特定版本,6.0.18。Tomcat是一款开源的Java Servlet容器,主要用于运行Java Web应用程序,它实现了Java Servlet和JavaServer Pages (JSP) 规范。这个版本是在...
尽管后续有更高版本的Tomcat发布,但6.0.18仍被一些开发者用于维持老项目或者作为学习基础。 【压缩包子文件的文件名称列表】"apache-tomcat-6.0.18" 指的是Tomcat的完整源代码和二进制文件的打包。这个压缩包内...
标题“tomcat_6.0.18(免安装 解压即可使用)”指的是Apache Tomcat 6.0.18版本,这是一个轻量级、开源的Java应用服务器,主要用于部署和运行Java Servlets和JavaServer Pages (JSP)。这个版本的Tomcat是免安装的,...
【标题】"Tomcat 6.0.18 for Windows" Tomcat 6.0.18 是一个基于Apache Software Foundation的开源项目,是Java Servlet和JavaServer Pages(JSP)技术的开源Web应用服务器。它主要实现了Java EE中的Web容器部分,...
【标题】"Tomcat 6.0.18" 是一款经典的开源Java Servlet容器,由Apache软件基金会开发。这个版本是6系列中的一个重要更新,它提供了对Servlet 2.5和JSP 2.1规范的支持,使得开发者能够在Java平台上构建和部署Web应用...
Apache Tomcat 6.0.18是一款广泛应用的开源Java Servlet容器,主要负责执行Java Web应用程序,特别是那些基于Servlet和JavaServer Pages (JSP) 技术的应用。它以其轻量级、高效和稳定性著称,是开发和部署Java Web...
**Apache Tomcat 6.0.18:下载与安装指南** Apache Tomcat 是一个流行的开源Web应用服务器,专门用于部署Java Servlet和JavaServer Pages(JSP)应用程序。在这个指南中,我们将详细介绍如何下载和安装Tomcat ...
Apache Tomcat 6.0.18 是一个广泛使用的开源软件,它是一个符合Java Servlet和JavaServer Pages(JSP)规范的应用服务器,主要用于部署和运行Java Web应用程序。这个版本是解压缩版,意味着用户下载后无需进行编译,...
这个版本发布于2009年,虽然现在已经有了更现代的版本,但对于学习和一些旧项目的维护,Tomcat 6.0.18仍然是一个实用的选择。 首先,让我们深入了解一下Tomcat的核心功能。Tomcat是基于Java Servlet和JavaServer ...
Apache Tomcat 6.0.18 是一个广泛使用的开源软件,它是一个符合Java Servlet和JavaServer Pages(JSP)规范的应用服务器,主要用于部署和运行Java Web应用程序。这个版本是免安装的开发版,意味着你可以直接解压使用...
Apache Tomcat 6.0.18 是一个广泛使用的开源Java Servlet容器,它实现了Java EE的Servlet和JSP规范,使开发者能够部署和运行Java Web应用程序。Tomcat以其轻量级、高效能和稳定性著称,是许多小型到中型企业首选的...
### Tomcat 6.0.18 配置详解 #### 一、环境准备与配置 **1. 下载 JDK 和 Tomcat** - **JDK**: 推荐使用 JDK 1.6.10 或更高版本。 - **Tomcat**: 推荐使用 Tomcat 6.0 或更高版本。 **2. 安装 JDK 和 Tomcat** -...