`
phipray
  • 浏览: 65814 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

tomcat源码阅读 二--------隐藏的ClassLoader

 
阅读更多

        在看tomcat源码是发现了一个比较有趣的配置文件-------catalina.properties

         这个配置文件分为四部分

 

第一部分:安全设置

 

 

第二部分:类加载设置

common.loader

通常情况下,common.loader是已经设置好的,不需要修改。

common.loader包括以下路径:

  • unpacked classes and resources in  $CATALINA_BASE/lib
  • JAR files in  $CATALINA_BASE/lib
  • unpacked classes and resources in  $CATALINA_HOME/lib
  • JAR files in  $CATALINA_HOME/lib
和默认的一些jar包:
  • annotations-api.jar  — JavaEE annotations classes.
  • catalina.jar  — Implementation of the Catalina servlet container portion of Tomcat.
  • catalina-ant.jar  — Tomcat Catalina Ant tasks.
  • catalina-ha.jar  — High availability package.
  • catalina-tribes.jar  — Group communication package.
  • ecj-*.jar  — Eclipse JDT Java compiler.
  • el-api.jar  — EL 2.2 API.
  • jasper.jar  — Tomcat Jasper JSP Compiler and Runtime.
  • jasper-el.jar  — Tomcat Jasper EL implementation.
  • jsp-api.jar  — JSP 2.2 API.
  • servlet-api.jar  — Servlet 3.0 API.
  • tomcat-api.jar  — Several interfaces defined by Tomcat.
  • tomcat-coyote.jar  — Tomcat connectors and utility classes.
  • tomcat-dbcp.jar  — Database connection pool implementation based on package-renamed copy of Apache Commons Pool and Apache Commons DBCP.
  • tomcat-i18n-**.jar  — Optional JARs containing resource bundles for other languages. As default bundles are also included in each individual JAR, they can be safely removed if no internationalization of messages is needed.
  • tomcat-jdbc.jar  — An alternative database connection pool implementation, known as Tomcat JDBC pool. See  documentation  for more details.
  • tomcat-util.jar  — Common classes used by various components of Apache Tomcat.

这些都是系统和工具类,比如数据库的驱动类库、log 类库可以放到此处,web应用的jar 不要放到common.loader 中。

 

server.loader 和 shared.loader 

在common.loader 加载完后,tomcat启动程序会检查 catalina.properties文件中配置的server.loader和shared.loader是否设置

如果设置,读取 tomcat下对应的server和shared这两个目录的类库。

server和shared是对应tomcat目录下的两个目录,默认的Tomcat7 下这两个目录是没有的。

设置方法:

server.loader=${catalina.base}/server/classes,${catalina.base}/server/lib/*.jar

shared.loader=${catalina.base}/server/classes,${catalina.base}/server/lib/*.jar

同时需要在tomcat目录下创建 server和shared目录结构并将公用的、应用类放到里面。

Bootstrap--->System--->/WEB-INF/classes---> /WEB-INF/lib/*.jar---> Common --->Server --->Shared

 

 

  catalinaLoader = createClassLoader("server", commonLoader);
  sharedLoader = createClassLoader("shared", commonLoader);

------------------------------------------------------------------------------------
public void init() throws Exception {

        initClassLoaders();

        Thread.currentThread().setContextClassLoader(catalinaLoader);

        SecurityClassLoad.securityClassLoad(catalinaLoader);

        // Load our startup class and call its process() method
        if (log.isDebugEnabled())
            log.debug("Loading startup class");
        Class<?> startupClass =
            catalinaLoader.loadClass
            ("org.apache.catalina.startup.Catalina");
        Object startupInstance = startupClass.newInstance();

        // Set the shared extensions class loader
        if (log.isDebugEnabled())
            log.debug("Setting startup class properties");
        String methodName = "setParentClassLoader";
        Class<?> paramTypes[] = new Class[1];
        paramTypes[0] = Class.forName("java.lang.ClassLoader");
        Object paramValues[] = new Object[1];
        paramValues[0] = sharedLoader;
        Method method =
            startupInstance.getClass().getMethod(methodName, paramTypes);
        method.invoke(startupInstance, paramValues);
        //初始化tomcat的守护进程
        catalinaDaemon = startupInstance;

    }


 

源码在tomcat启动时基本是采用catalinaLoader来加载tomcat自身相关的jar,但catalinaLoader的父Loader就是commonLoader,而且org.apache.catalina.startup.Catalina这个类其实就在common文件夹下面,而在catalina.properties文件中serverLoader配置默认为空,所以我基本任务这里的catalinaLoader就是commonLoader

 

第三部分:不需要扫描的类设置

 

 

第四部分:字符缓存设置

 

分享到:
评论

相关推荐

    apache-tomcat-7.0.81-src 源码免费下载

    Apache Tomcat 7.0.81 源码分析 Apache Tomcat 是一个流行的开源软件,用Java语言编写,是实现Java Servlet和JavaServer Pages(JSP)规范的应用服务器,广泛用于Web应用的开发和部署。源码的下载对于开发者来说...

    apache-tomcat-源码-lib包

    源码中,ClassLoader的实现(例如`org.apache.catalina.loader.WebappClassLoaderBase`)值得深入研究。 5. **部署和配置**:Tomcat支持多种方式部署Web应用,如WAR文件、目录结构或者通过管理接口。源码中,你可以...

    apache-tomcat-7.0.40-src

    Apache Tomcat 7.0.40 是一个广泛使用的开源软件,它是一个实现了Java Servlet、JavaServer Pages(JSP)和Java EE的Web应用程序容器。...对于Java Web开发人员来说,深入学习和理解Tomcat源码是提升技能的重要步骤。

    tomcat源码学习

    【描述】中的“深入剖析Tomcat”是一本引导读者进行Tomcat源码阅读的书籍,通过这本书,你可以了解到Tomcat是如何处理HTTP请求,如何管理Web应用,以及如何进行线程调度等核心功能的。这本书的推荐表明,作者认为它...

    Tomcat:apache-tomcat-6.0.18

    5. **ClassLoader机制**:Tomcat使用自定义的ClassLoader来加载Web应用程序的类,确保不同应用之间的类隔离,防止冲突。 Tomcat 6.0.18版的特性包括: 1. **性能优化**:相对于之前的版本,6.0.18进行了性能调优,...

    tomcat-4.1.40-src

    《深入剖析Tomcat 4.1.40源码》 Apache Tomcat 是一款广泛应用的开源Java Servlet容器,它实现了Java EE的Web应用程序规范。在本文中,我们将深入探讨Tomcat 4.1.40的源代码,揭示其内部工作原理,帮助开发者更好地...

    apache-tomcat-9.0.11源码

    了解并研究Tomcat源码对于深入理解Web服务器的工作原理,优化应用程序性能,以及解决可能出现的技术问题都具有重要意义。 1. **Servlet与JSP**: - **Servlet**:Servlet是Java编程语言中的一个接口,它定义了Web...

    tomcat8源码的maven项目

    在这个项目中,开发者可能已经配置了相关的Maven插件和目标,以便于编译、测试和打包Tomcat源码。 【标签】: 1. **Tomcat8**:Tomcat 8是Tomcat服务器的第8个主要版本,它支持Java Servlet 3.1、JavaServer Pages...

    tomcat 6 源码

    通过研究Tomcat源码,开发者可以学习到如何构建一个高性能的Servlet容器,掌握Java Web应用的核心运行机制,这对于提升Java EE开发能力大有裨益。同时,如果你遇到Tomcat的使用问题或者想要进行定制化开发,源码分析...

    Tomcat 5.0.18 ClassLoader source code insight

    《深入理解Tomcat 5.0.18 ClassLoader源码》 Tomcat作为一个流行的开源Java应用服务器,其内部机制的探究对于Java开发者而言具有重要的价值。尤其在类加载(Class Loading)机制方面,它是Java应用程序运行的基础,...

    Tomcat6的源码

    【标题】"Tomcat6的源码"涵盖了Java Web服务器Apache Tomcat的第六个主要版本的源代码。这个版本在2005年发布,它为开发者提供了深入了解Servlet和JSP容器工作原理的机会,同时也支持Java EE 5规范。Tomcat6是开源...

    tomcat8源码

    《深入剖析Tomcat8源码》 Tomcat8是一款广泛使用的开源Java Servlet容器,它实现了Java EE中的Web应用规范,包括Servlet、JSP和EL...对于Java EE开发者来说,掌握Tomcat源码无疑能够增强对整个Web栈的掌控力。

    深入剖析Tomcat 随书 源码

    总的来说,《深入剖析Tomcat源码》这本书将带领我们探索Tomcat的每一个角落,从基础架构到高级特性,全面解析其设计思想和实现细节,帮助开发者更好地理解和优化自己的Java Web应用。通过学习和研究Tomcat源码,我们...

    tomcat 类加载机制 —— ClassLoader

    《Tomcat类加载机制——ClassLoader详解》 在Java Web开发中,Tomcat作为最常用的Servlet容器,其类加载机制对于...通过阅读和研究Tomcat源码,我们可以更深入地了解这一机制,从而更好地驾驭这个强大的Web服务器。

Global site tag (gtag.js) - Google Analytics