精华内容
下载资源
问答
  • Tomcat加载Class过程

    2010-09-03 11:40:29
    Tomcat加载class的过程(以Tomcat5.5为例)   如下图:       注意 :在各个jar中的\META-INF\MAINFEST.MF文件里Class-Path键值对,也会提供jar的加载优先顺序。 例如某jar的MAINFEST.MF内容如下: ...

     

    Tomcat加载class的过程(以Tomcat5.5为例)

     

    如下图:

     

     

     

    注意 :在各个jar中的\META-INF\MAINFEST.MF文件里Class-Path键值对,也会提供jar的加载优先顺序。
    例如某jar的MAINFEST.MF内容如下:
    Manifest-Version: 1.0
    Class-Path: commons-beanutils.jar
    Class-Path: commons-collections.jar
    那么在加载这个jar的时候,会先在此jar所在目录下依次先加载commons-beanutils.jar,commons-collections.jar,....等jar文件。

     

    在不同的地方放置jar和class可能会产生意想不到的后果,,尤其是不同版本的jar文件,因此在实际应用部署web应用时候要特别留心。

     

     

    展开全文
  • 前言在《通过tomcat源码查看其如何实现应用相互隔离》中,我介绍了在Bootstrap的init方法中,其中有关类加载器的执行有3步: 初始化commonLoader、...这篇博客就是介绍如何tomcat线程安全的加载class。安全加载C

    前言

    《通过tomcat源码查看其如何实现应用相互隔离》中,我介绍了在Bootstrap的init方法中,其中有关类加载器的执行有3步:

    1. 初始化commonLoader、catalinaLoader和sharedLoader;
    2. 将catalinaLoader设置为Tomcat主线程的线程上下文类加载器;
    3. 线程安全的加载class。

    这篇博客就是介绍如何tomcat线程安全的加载class。

    安全加载CLASS分析

    首先来看Bootstrap的init方法,见代码清单1

                                代码清单1
        /**
         * Initialize daemon.
         */
    
    
         public void init()
            throws Exception
        {
    
            // Set Catalina path
            setCatalinaHome();
            setCatalinaBase();
    
            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);
    
            catalinaDaemon = startupInstance;
    
        }

    其中SecurityClassLoad.securityClassLoad(catalinaLoader)的作用就是线程安全的加载class,该方法代码见代码清单2。

                                代码清单2
        public static void securityClassLoad(ClassLoader loader)
            throws Exception {
    
            if( System.getSecurityManager() == null ){
                return;
            }
    
            loadCorePackage(loader);
            loadLoaderPackage(loader);
            loadSessionPackage(loader);
            loadUtilPackage(loader);
            loadJavaxPackage(loader);
            loadCoyotePackage(loader);       
            loadTomcatPackage(loader);
        }

    securityClassLoad方法主要负责加载Tomcat容器所需的class,包括:

    • Tomcat核心class,即org.apache.catalina.core路径下的class;
    • org.apache.catalina.loader.WebappClassLoader$PrivilegedFindResourceByName;
    • Tomcat有关session的class,即org.apache.catalina.session路径下的class;
    • Tomcat工具类的class,即org.apache.catalina.util路径下的class;
    • javax.servlet.http.Cookie;
    • Tomcat处理请求的class,即org.apache.catalina.connector路径下的class;
    • Tomcat其它工具类的class,也是org.apache.catalina.util路径下的class;

    以加载Tomcat核心class的loadCorePackage方法为例(见代码清单3),查看其实现。

                                代码清单3
        private final static void loadCorePackage(ClassLoader loader)
            throws Exception {
            String basePackage = "org.apache.catalina.";
            loader.loadClass
                (basePackage +
                "core.ApplicationContextFacade$1");
            loader.loadClass
                (basePackage +
                "core.ApplicationDispatcher$PrivilegedForward");
            loader.loadClass
                (basePackage +
                "core.ApplicationDispatcher$PrivilegedInclude");
            loader.loadClass
                (basePackage +
                "core.AsyncContextImpl");
            loader.loadClass
                (basePackage +
                "core.AsyncContextImpl$AsyncState");
            loader.loadClass
                (basePackage +
                "core.AsyncContextImpl$DebugException");
            loader.loadClass
                (basePackage +
                "core.AsyncContextImpl$1");
            loader.loadClass
                (basePackage +
                "core.AsyncContextImpl$2");
            loader.loadClass
                (basePackage +
                "core.AsyncListenerWrapper");
            loader.loadClass
                (basePackage +
                "core.ContainerBase$PrivilegedAddChild");
            loader.loadClass
                (basePackage +
                "core.DefaultInstanceManager$1");
            loader.loadClass
                (basePackage +
                "core.DefaultInstanceManager$2");
            loader.loadClass
                (basePackage +
                "core.DefaultInstanceManager$3");
            loader.loadClass
                (basePackage +
                "core.DefaultInstanceManager$4");
            loader.loadClass
                (basePackage +
                "core.DefaultInstanceManager$5");
            loader.loadClass
                (basePackage +
                "core.ApplicationHttpRequest$AttributeNamesEnumerator");
        }

    其余的与此类似。这样就将tomcat的class加载进来了

    展开全文
  • Tomcat 设置 加载class

    2009-11-30 10:09:48
    Tomcat 设置不加载class,在taomcat运行时间,更新class,必须重启才能更新class.默认是自动更新的.设置: &lt;Host name="www.abc.com" appBase="webapps" unpackWARs="true" ...

    Tomcat 设置不加载class,在taomcat运行时间,更新class,必须重启才能更新class.默认是自动更新的.设置:

    <Host name="www.abc.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
    <Context path="" reloadable="false" docBase="/opt/abc" crossContext="true" />
    </Host>

     

    reloadable="false" 默认 true 设置false 即可

    展开全文
  • Tomcatclass加载的优先顺序一:1.最先是$JAVA_HOME/jre/lib/ext/下的jar文件。 2.环境变量CLASSPATH中的jar和class文件。 3.$CATALINA_HOME/common/classes下的class文件。 4.$CATALINA_HOME/commons/endorsed下的...

    Tomcat的class加载的优先顺序一:
    1.最先是$JAVA_HOME/jre/lib/ext/下的jar文件。
    2.环境变量CLASSPATH中的jar和class文件。
    3.$CATALINA_HOME/common/classes下的class文件。
    4.$CATALINA_HOME/commons/endorsed下的jar文件。
    5.$CATALINA_HOME/commons/i18n下的jar文件。
    6.$CATALINA_HOME/common/lib 下的jar文件。
    (JDBC驱动之类的jar文件可以放在这里,这样就可以避免在server.xml配置好数据源却出现找不到JDBC Driver的情况。)
    7.$CATALINA_HOME/server/classes下的class文件。
    8.$CATALINA_HOME/server/lib/下的jar文件。
    9.$CATALINA_BASE/shared/classes 下的class文件。
    10.$CATALINA_BASE/shared/lib下的jar文件。
    11.各自具体的webapp /WEB-INF/classes下的class文件。

    12.各自具体的webapp /WEB-INF/lib下的jar文件
    ---------------------
    作者:sunlight0000000
    来源:CSDN
    原文:https://blog.csdn.net/bestxiaok/article/details/78133284
    版权声明:本文为博主原创文章,转载请附上博文链接!

    转载于:https://www.cnblogs.com/jimcsharp/p/9995643.html

    展开全文
  • 来源:https://bbs.csdn.net/topics/80459833Tomcatclass加载的优先顺序一览 最先是$JAVA_HOME/jre/lib/ext/下的jar文件。环境变量CLASSPATH中的jar和class文件。\$CATALINA_HOME/common/classes下的class文件。\$...
  • 完全相同(同包同名)的class如何加载2. 完全相同的class如果在不同war包里如何加载印象中应该是不同war包各自加载自己的, 猜测是因为会启动各自的application级别classloader, 稍微调查之后发现自己原来的认...
  • Tomcatclass加载顺序

    2017-10-18 17:10:21
    2.环境变量CLASSPATH中的jar和class文件。 3.$CATALINA_HOME/common/classes下的class文件。 4.$CATALINA_HOME/commons/endorsed下的jar文件。 5.$CATALINA_HOME/commons/i18n下的jar文件。 6.$CATALI
  • Tomcatclass加载与查找顺序

    千次阅读 2018-07-12 15:11:39
    Tomcatclass加载的优先顺序————- 1.最先是$JAVA_HOME/jre/lib/ext/下的jar文件。 2.环境变量CLASSPATH中的jar和class文件。 3.$CATALINA_HOME/common/classes下的class文件。 4.$CATALINA_HOME/commons/...
  • 其实我们可以在tomcat里的server.xml小做修改即可实现当我们修改了类或其他文件时候自动重新加载tomcat。如下: Java代码 &lt;Context path="/struts2" docBase="G:\myEclipse...
  • tomcatclass加载顺序

    2013-11-26 15:32:03
    Therefore, from the perspective of a web application, class or resource loading looks in the following repositories, in this order: Bootstrap classes of your JVM System class loader classes (descr....
  • Tomcatclass加载机制

    2015-03-19 23:01:00
    jspclassloader专门用于加载jsp生成的class文件的,一个jsp文件一个jspclassloader,当jsp文件发生更改时都会新增一个jspclassloader用与加载器并删除旧的jsp加载器。 tomcat6以上的版本,大家可能看不到...
  • Tomcatclass加载的优先顺序一览

    千次阅读 2013-01-16 14:33:52
    Tomcatclass加载的优先顺序一览 1.最先是$JAVA_HOME/jre/lib/ext/下的jar文件。 2.环境变量CLASSPATH中的jar和class文件。 3.$CATALINA_HOME/common/classes下的class文件。 4.$CATALINA_HOME/commons...
  • 1.查询tomcat服务加载路径   2.进入tomcat的webapps里面的项目查看,发现一个.class文件都没有 3.查看 Build Path 编译输入.class文件的目录,正常   4.最后maven依赖配置,发现缺少如下配置,加上再启...
  • tomcat 加载机制

    2017-10-20 14:20:00
    图解Tomcat加载机制 ... 说到本篇的tomcat加载机制,不得不说翻译学习tomcat的初衷。... 之前实习的时候学习javaMelody的源码,但是它是一个Maven...为什么会优先加载src下的java文件(编译出的class),而不
  • TOMCAT加载

    2012-08-24 13:39:36
    当我们启动一个tomcat的服务的时候,jar包和claess文件是是以怎么样的顺序被加载进来的?   加载顺序: 1. $java_home/lib 目录下的java核心api 2. $java_home/lib/ext 目录下的java扩展jar包 3. java -...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,665
精华内容 666
关键字:

tomcat加载class