`
wym0291
  • 浏览: 19219 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

Tomcat6.0.18学习笔记_Classloader

阅读更多

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

 

分享到:
评论

相关推荐

    apache-tomcat-6.0.18.rar_apache tomcat_tomact_tomcat 6.0.18

    Tomcat 6.0.18虽然相比更现代的版本可能缺少一些特性,但它仍然是学习Java Web基础和理解Servlet/JSP工作原理的好选择。同时,对于那些依赖旧版Java API的项目,保持使用旧版本的Tomcat可以确保兼容性。 总之,...

    tomcat6.0.18 解压缩版

    【标题】"Tomcat6.0.18 解压缩版" 涉及的主要知识点是Apache Tomcat服务器的6.0.18版本,这是一个开源的、基于Java Servlet和JavaServer Pages (JSP) 技术的应用服务器。Tomcat是Java EE Web应用程序部署的最常用...

    tomcat_6.0.18_配置[文].pdf

    本文主要针对`tomcat_6.0.18_配置[文].pdf`文档中的内容进行详细解读,帮助读者理解如何配置Apache Tomcat 6.0.18,并通过实例演示如何搭建一个基本的JSP应用。 #### 二、环境准备 **1. 下载与选择版本** - **JDK...

    apache-tomcat-6.0.18

    Apache Tomcat 6.0.18 是一个广泛使用的开源软件,主要作为Java Servlet和JavaServer Pages (JSP) 的容器。它实现了Java EE的Web应用程序部署规范,是开发和运行Java Web应用的重要平台。Tomcat是Apache软件基金会的...

    绿色免安装tomcat6.0.18

    【标题】"绿色免安装Tomcat6.0.18"是针对Java应用程序服务器Tomcat的一个特殊版本,它不需要通过传统的方式进行安装,比如运行安装程序。这种版本通常是为了方便用户快速部署和运行,尤其适合那些对系统环境要求不高...

    tomcat6.0.18

    标题“tomcat6.0.18”指的是Apache Tomcat服务器的一个特定版本,6.0.18。Tomcat是一款开源的Java Servlet容器,主要用于运行Java Web应用程序,它实现了Java Servlet和JavaServer Pages (JSP) 规范。这个版本是在...

    tomcat 6.0.18

    尽管后续有更高版本的Tomcat发布,但6.0.18仍被一些开发者用于维持老项目或者作为学习基础。 【压缩包子文件的文件名称列表】"apache-tomcat-6.0.18" 指的是Tomcat的完整源代码和二进制文件的打包。这个压缩包内...

    tomcat_6.0.18(免安装 解压即可使用)

    标题“tomcat_6.0.18(免安装 解压即可使用)”指的是Apache Tomcat 6.0.18版本,这是一个轻量级、开源的Java应用服务器,主要用于部署和运行Java Servlets和JavaServer Pages (JSP)。这个版本的Tomcat是免安装的,...

    tomcat6.0.18 windows

    【标题】"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

    【标题】"Tomcat 6.0.18" 是一款经典的开源Java Servlet容器,由Apache软件基金会开发。这个版本是6系列中的一个重要更新,它提供了对Servlet 2.5和JSP 2.1规范的支持,使得开发者能够在Java平台上构建和部署Web应用...

    tomcat-6.0.18绿色版

    Apache Tomcat 6.0.18是一款广泛应用的开源Java Servlet容器,主要负责执行Java Web应用程序,特别是那些基于Servlet和JavaServer Pages (JSP) 技术的应用。它以其轻量级、高效和稳定性著称,是开发和部署Java Web...

    tomcat-6.0.18 下载及安装

    **Apache Tomcat 6.0.18:下载与安装指南** Apache Tomcat 是一个流行的开源Web应用服务器,专门用于部署Java Servlet和JavaServer Pages(JSP)应用程序。在这个指南中,我们将详细介绍如何下载和安装Tomcat ...

    apache-tomcat-6.0.18.rar

    Apache Tomcat 6.0.18 是一个广泛使用的开源软件,它是一个符合Java Servlet和JavaServer Pages(JSP)规范的应用服务器,主要用于部署和运行Java Web应用程序。这个版本是解压缩版,意味着用户下载后无需进行编译,...

    tomcat6.0.18.rar

    这个版本发布于2009年,虽然现在已经有了更现代的版本,但对于学习和一些旧项目的维护,Tomcat 6.0.18仍然是一个实用的选择。 首先,让我们深入了解一下Tomcat的核心功能。Tomcat是基于Java Servlet和JavaServer ...

    apache-tomcat6.0.18免安装开发版

    Apache Tomcat 6.0.18 是一个广泛使用的开源软件,它是一个符合Java Servlet和JavaServer Pages(JSP)规范的应用服务器,主要用于部署和运行Java Web应用程序。这个版本是免安装的开发版,意味着你可以直接解压使用...

    apache-tomcat-6.0.18.zip

    Apache Tomcat 6.0.18 是一个广泛使用的开源Java Servlet容器,它实现了Java EE的Servlet和JSP规范,使开发者能够部署和运行Java Web应用程序。Tomcat以其轻量级、高效能和稳定性著称,是许多小型到中型企业首选的...

    tomcat_6.0.18_配置

    ### Tomcat 6.0.18 配置详解 #### 一、环境准备与配置 **1. 下载 JDK 和 Tomcat** - **JDK**: 推荐使用 JDK 1.6.10 或更高版本。 - **Tomcat**: 推荐使用 Tomcat 6.0 或更高版本。 **2. 安装 JDK 和 Tomcat** -...

Global site tag (gtag.js) - Google Analytics