`
phipray
  • 浏览: 64599 次
  • 性别: 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

 

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

 

 

第四部分:字符缓存设置

 

分享到:
评论

相关推荐

    3-7Tomcat中自定义类加载器的使用与源码实现(1).mp4

    3-7Tomcat中自定义类加载器的使用与源码实现(1).mp4

    tomcat 类加载机制 —— ClassLoader

    NULL 博文链接:https://yjhexy.iteye.com/blog/668334

    Tomcat 5.0.18 ClassLoader source code insight

    NULL 博文链接:https://davyjones2010.iteye.com/blog/2226286

    ClassFinal字节码加密工具-其他

    ClassFinal是一款Java class文件安全加密工具,支持直接加密jar包或war包,无需修改任何项目代码,兼容spring-framework,可避免源码泄漏或字节码被反编译。项目模块说明:classfinal-core:ClassFinalde的核心模块...

    Java类加密2.0版本,无限制

    有的保护工具甚至能生成部分废代码(垃圾代码),使得反编译后的源码在重新编译时出现编译错误,不能直接生成CLASS文件。这种方法具有一定的效果,但是不能彻底保护您的JAVA源代码。 JAVA CLASS文件加密工具对...

    高级java笔试题-itresource:程序开发技术资源集合

    heavyz的Tomcat学习笔记(包括启动流程分析、启动脚本分析) ] () [ java8 新特性讲解系列文章 ] () [ Java 从Jar文件中动态加载类 ] () [ Java并发源码分析 - ThreadPoolExecutor ] () [ java ClassLoader 基本原理 ]...

    Java类加密程序

    有的保护工具甚至能生成部分废代码(垃圾代码),使得反编译后的源码在重新编译时出现编译错误,不能直接生成CLASS文件。这种方法具有一定的效果,但是不能彻底保护您的JAVA源代码。 &lt;br&gt;JAVA CLASS文件加密工具...

    java 面试题 总结

    抽象包括两个方面,一是过程抽象,二是数据抽象。 2.继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类...

    超级有影响力霸气的Java面试题大全文档

    抽象包括两个方面,一是过程抽象,二是数据抽象。 2.继承:  继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承...

Global site tag (gtag.js) - Google Analytics