`

tomcat common.loader&server.loader&shared.loader

阅读更多

${catalina.home}/conf/catalina.properties文件可以用来配置tomcat内置classloader的load范围,一般默认情况如下

# List of comma-separated paths defining the contents of the "common"
# classloader. Prefixes should be used to define what is the repository type.
# Path may be relative to the CATALINA_HOME or CATALINA_BASE path or absolute.
# If left as blank,the JVM system loader will be used as Catalina's "common"
# loader.
# Examples:
#     "foo": Add this folder as a class repository
#     "foo/*.jar": Add all the JARs of the specified folder as class
#                  repositories
#     "foo/bar.jar": Add bar.jar as a class repository
common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar

#
# List of comma-separated paths defining the contents of the "server"
# classloader. Prefixes should be used to define what is the repository type.
# Path may be relative to the CATALINA_HOME or CATALINA_BASE path or absolute.
# If left as blank, the "common" loader will be used as Catalina's "server"
# loader.
# Examples:
#     "foo": Add this folder as a class repository
#     "foo/*.jar": Add all the JARs of the specified folder as class
#                  repositories
#     "foo/bar.jar": Add bar.jar as a class repository
server.loader=

#
# List of comma-separated paths defining the contents of the "shared"
# classloader. Prefixes should be used to define what is the repository type.
# Path may be relative to the CATALINA_BASE path or absolute. If left as blank,
# the "common" loader will be used as Catalina's "shared" loader.
# Examples:
#     "foo": Add this folder as a class repository
#     "foo/*.jar": Add all the JARs of the specified folder as class
#                  repositories
#     "foo/bar.jar": Add bar.jar as a class repository
# Please note that for single jars, e.g. bar.jar, you need the URL form
# starting with file:.
shared.loader=

下面两个方法都是copy自/Tomcat 6.0/java/org/apache/catalina/startup/Bootstrap.java,tomcat的启动类

    //下面三个classloader创建好,上面配置文件指定了load path,注意classpath下面并没有tomcat的自身类,所以 

    //appclassloader是加载不到的
 

    private void initClassLoaders() {
        try {
            commonLoader = createClassLoader("common", null);
            if( commonLoader == null ) {
                // no config file, default to this loader - we might be in a 'single' env.
                commonLoader=this.getClass().getClassLoader();
            }
            catalinaLoader = createClassLoader("server", commonLoader);
            sharedLoader = createClassLoader("shared", commonLoader);
        } catch (Throwable t) {
            log.error("Class loader creation threw exception", t);
            System.exit(1);
        }
    }
 

   

 public void init()
        throws Exception
    {

        // Set Catalina path
        setCatalinaHome();
        setCatalinaBase();

        initClassLoaders();

        Thread.currentThread().setContextClassLoader(catalinaLoader);
        //tomcat的启动类是在classpath下面的,由appclassloader加载,然后接下来的各个tomcat自身类由catalinaLoader加载,由于classloader的传递特性
        //due to the classloader here, so the later classloader will be catalinaLoader
        Class startupClass =
            catalinaLoader.loadClass
            ("org.apache.catalina.startup.Catalina");
        Object startupInstance = startupClass.newInstance();
 
        Method method =
            startupInstance.getClass().getMethod(methodName, paramTypes);
        method.invoke(startupInstance, paramValues);

        catalinaDaemon = startupInstance;

    }
 
分享到:
评论

相关推荐

    tomcat类加载器

    例如,可以通过修改`common.loader`、`shared.loader`和`context.loader`属性来改变类的加载顺序和来源。 在深入研究"DevLoader"之前,需要查看压缩包内的具体文件,例如org目录下可能包含与DevLoader相关的源代码...

    tomcat下载、安装、环境配置,在myeclipse中配置、启动

    若要更改此路径,需修改`conf/catalina.properties`文件,将`shared.loader`和`common.loader`中的路径设置为你想要的自定义路径。 ### 四、在MyEclipse中配置Tomcat 1. 打开MyEclipse,选择`Window` -> `...

    Tomcat 5.0.18 ClassLoader source code insight

    例如,当我们需要自定义类加载顺序时,可以通过修改`catalina.properties`文件中的`common.loader`、`server.loader`和`shared.loader`属性,或者在Web应用的`WEB-INF/web.xml`中设置`loader`元素。 总的来说,深入...

    tomcat内存溢出问题.doc

    可以考虑使用`shared.loader`或者`common.loader`属性来共享某些类库,减少重复加载。 总之,解决Tomcat内存溢出问题,尤其是PermGen空间溢出,主要通过调整JVM的内存参数和优化类加载策略。同时,监控系统的内存...

    tomcat集群配置文件

    8. **共享目录**:在集群中,可能需要共享某些目录,比如`shared.loader`或`common.loader`在`$CATALINA_BASE/conf/catalina.properties`中配置的类加载器路径,以确保所有节点都能访问相同的应用组件。 9. **故障...

    Tomcat启动顺序

    总结来说,Tomcat的启动顺序是一个自底向上,从核心到应用的过程,依次加载Bootstrap、System、Common、Shared和WebApp类加载器,确保了服务的正确初始化和Web应用程序的隔离运行。理解这一启动流程对于调试、优化和...

    apache-tomcat-7.0.86下载

    同时,确保`conf/catalina.properties`中的`common.loader`、`server.loader`和`shared.loader`属性正确指定了类路径。 3. **部署应用**:将你的Web应用程序(WAR文件)放入`webapps`目录下,Tomcat会自动解压并...

    apache-tomcat-8.0.44与jdk1.8.0_77的jre集成

    在Tomcat的`conf`目录下,有一个名为`catalina.properties`的文件,这里可以设置`java.endorsed.dirs`属性来加载Java Endorsed Standards Override Mechanism,以及`common.loader`, `server.loader`和`shared....

    java类加载器-tomcat中的类加载器

    3. Shared ClassLoader:用于多个Web应用共享的类,加载`shared.loader`属性指定的类,减少重复类的内存占用。 4. Catalina ClassLoader:加载Tomcat自身的类,不直接参与Web应用的类加载。 Tomcat类加载器的特性:...

    Tomcat7 负载Jar包

    1. **server.xml**:这是Tomcat的主要配置文件,包含了Server、Service、Connector和Engine等元素的配置。在这里,你可以调整类加载器的设置,例如增加或修改`<Loader>`标签。 2. **context.xml**:此文件用于配置...

    ofbiz12发布tomcat6

    - **catalina.properties** 文件中修改 `shared.loader` 配置,该配置指定 Tomcat 加载的 Java 类及 JAR 包的位置。例如: ```properties shared.loader=C:/Users/CQ/workspace/ofbiz/bin,C:/Users/CQ/workspace/...

    Tomcat启动springboot项目war包报错:启动子级时出错的问题

    检查`catalina.properties`文件中的`shared.loader`或`common.loader`配置,避免类加载问题。 6. **异常处理**: - 在Tomcat的日志中,异常堆栈跟踪会提供更详细的信息。仔细分析这些信息,找出具体哪个类或方法抛...

    带注释的Bootstrap.java

    //catalina.properties内common.loader="${catalina.base}/lib", //"${catalina.base}/lib/*.jar","${catalina.home}/lib","${catalina.home}/lib/*.jar" //读取common.loader String value = ...

    Tomcat 类加载器的实现方法及实例代码

    - Catalina类加载器:父加载器为Common,加载catalina.properties配置文件中指定的server.loader资源,通常用于Tomcat内部组件。 - Shared类加载器:同样以Common为父加载器,根据shared.loader配置加载资源,供所有...

Global site tag (gtag.js) - Google Analytics