tomcat6.0.32

com.dyyx.ShareUtils
//返回系统当前时间
public static String now();

package com.dyyx;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ShareUtils {
    private static final String FULL_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
    public static String now() {
        Date now = new Date();
        DateFormat dateFormat = new SimpleDateFormat(FULL_DATE_FORMAT);
        return dateFormat.format(now);
    }
}

http://127.0.0.1:8080/tools/share_utils_now.jsp

share_utils_now.jsp 里调用 ShareUtils.now() 输出当前时间
并且会调用getClassLoadInfo(Class c)  方法 输出 ShareUtils.class 的类加载器信息 代码如下

public static String getClassLoadInfo(Class c) {
        String rname = getResourceName(c);
        URL url = null;
        ClassLoader cl = c.getClassLoader();
        // 如果ClassLoader为NULL 为系统类
        if (null == cl) {
            url = ClassLoader.getSystemResource(rname);
        } else {
            url = cl.getResource(rname);
        }
        String s = "class=" + c + ",classloader:" + cl + ",url=" + url;
        s = s + ",resourceName=" + rname;
        s = s + "\n\n";
        while (cl != null) {
            cl = cl.getParent();
            s = s + cl + "\n";

}
        return s;
    }

public static String getResourceName(Class clazz) {
        if (null == clazz) {
            return "class is null";
        }
        String cname = clazz.getName();
        String[] arr = cname.split("\\.");
        String rname = "";
        int len = arr.length;
        for (int i = 0; i < len; i++) {
            if (i > 0) {
                rname = rname + "/";
            }
            rname = rname + arr[i];
        }
        rname = rname + ".class";
        return rname;
    }

share-utils.jar  包含 ShareUtils.class

类加载顺序
${JAVA_HOME}/jre/lib/ext
java classpath 
${webapp}/WEB-INF/classes
${webapp}/WEB-INF/lib 
${tomcat.home}/lib

bootstrap class loader 引导类加载器 加载java核心类库 不是java.lang.ClassLoader的实例
ExtClassLoader 的父加载器为 bootstrap class loader  但是 getParent()拿到是null

把 share-utils.jar 或 ShareUtils.class 依次从相应的目录移除

以下为各种类加载情况日志记录

1 ExtClassLoader ${JAVA_HOME}/jre/lib/ext
class=class com.dyyx.ShareUtils,classloader:sun.misc.Launcher$ExtClassLoader@addbf1,url=jar:file:/D:/soft/jdk1.6.0_21/jre/lib/ext/share-utils.jar!/com/dyyx/ShareUtils.class,resourceName=com/dyyx/ShareUtils.class

null

2 AppClassLoader java classpath 
class=class com.dyyx.ShareUtils,classloader:sun.misc.Launcher$AppClassLoader@19821f,url=jar:file:/D:/tomcat6min/bin/share-utils.jar!/com/dyyx/ShareUtils.class,resourceName=com/dyyx/ShareUtils.class

null

3 WebappClassLoader ${webapp}/WEB-INF/classes

class=class com.dyyx.ShareUtils,classloader:WebappClassLoader
  context: 
  delegate: false
  repositories:
    /WEB-INF/classes/
----------> Parent Classloader:

,url=file:/D:/soft/book/high/code/action/webroot/WEB-INF/classes/com/dyyx/ShareUtils.class,resourceName=com/dyyx/ShareUtils.class

null

4 WebappClassLoader ${webapp}/WEB-INF/lib

class=class com.dyyx.ShareUtils,classloader:WebappClassLoader
  context: 
  delegate: false
  repositories:
    /WEB-INF/classes/
----------> Parent Classloader:

,url=jar:file:/D:/soft/book/high/code/action/webroot/WEB-INF/lib/share-utils.jar!/com/dyyx/ShareUtils.class,resourceName=com/dyyx/ShareUtils.class

null

5 StandardClassLoader ${tomcat.home}/lib

class=class com.dyyx.ShareUtils,classloader:org.apache.catalina.loader.StandardClassLoader@1172e08,url=jar:file:/D:/tomcat6min/lib/share-utils.jar!/com/dyyx/ShareUtils.class,resourceName=com/dyyx/ShareUtils.class

null

双亲委派模型

引导类加载器 扩展类加载器 应用(系统)类加载器 自定义类加载器(L1)  自定义类加载器(L2)  自定义类加载器(Ln) ......

转载于:https://www.cnblogs.com/metoy/p/3851770.html

tomcat6类加载器与类加载顺序相关推荐

  1. 深入理解Java类加载器:Java类加载原理解析

    http://blog.csdn.net/zhoudaxia/article/details/35824249 1 基本信息 每个开发人员对java.lang.ClassNotFoundExcetpi ...

  2. Java类加载器(一)——类加载器层次与模型

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  3. java引导类加载器_Java类加载器层次结构(一)

    类加载器有一种父/子关系.除了引导类加载器外,每个类加载器都有一个父类加载器.本章通过分析ClassLoader的源码来展示java类加载器的层次结构. 根据规定,类加载器会为它的父类加载器提供一个机 ...

  4. 什么是类加载器,类加载器如何分类

    一.类加载器 1.什么是类加载器 类加载器:负责将.class文件(存储的物理文件)加载到内存中 2.类加载时机: ① 创建类的实例(对象) ② 调用类的实例方法 ③ 访问类或者接口的类变量,或者为该 ...

  5. Java类加载器(类加载的流程、三大类加载器BootstrapClassLoader、ExtClassLoader、AppClassLoader)

    一.三大类加载介绍 1.1.BootstrapClassLoader BootstrapClassLoader是顶级加载器,默认加载的是%JAVA_HOME%中lib下的jar包和class类文件,他 ...

  6. 面试干货4——你对Java类加载器(自定义类加载器)有了解吗?

    类加载器 推荐:在准备面试的同学可以看看这个系列 一.类加载器的作用 二.Java虚拟机类加载器结构 1. 引导类(启动类)加载器 2. 扩展类加载器 3. 系统类加载器 三.类加载器的加载机制 1. ...

  7. java 类加载器加载顺序 经典例子

    写了一个string 类,和api中包名,类名都是一样的,然后去加载: 1 package java.lang; 2 public class String{ 3 public static void ...

  8. 面试-JVM-类加载-类加载器--自定义类加载器-JVM调优

    文章目录 ==类加载== 谈谈你对类文件结构的理解?有哪些部分组成? 谈谈你对类加载机制的了解? 编写java代码是如何运行起来的? 类加载机制 类加载各阶段的作用分别是什么? 有哪些类加载器?分别有 ...

  9. 【Android 逆向】类加载器 ClassLoader ( 类加载器源码简介 | BaseDexClassLoader | DexClassLoader | PathClassLoader )

    文章目录 一.ClassLoader 源码简介 二.BaseDexClassLoader 源码简介 三.DexClassLoader 源码简介 四.PathClassLoader 源码简介 五.InM ...

最新文章

  1. 细嚼慢咽读论文:PointNet论文及代码详细解析
  2. Mxnet - Understanding weight shape for Dense Layer MXNET权重参数形状的疑惑(内部设计形式行列谁在前不用管,多个转置运算而已)
  3. ContentType大全
  4. 排序算法 JavaScript
  5. 734. [网络流24题] 方格取数问题 二分图点权最大独立集/最小割/最大流
  6. Java LinkedHashMap clear()方法与示例
  7. Android学习路线(十九)支持不同设备——支持不同(Android)平台版本号
  8. android 自定义 打包文件类型,Android Studio配置打包生成自定义文件名
  9. php - MySQL创建新用户并授权
  10. 系统学习机器学习之参数方法(一)
  11. Linux上查到目前透过FTP进来的使用者
  12. [算法]用java实现堆操作
  13. vue + vue-router +axios + element UI + PHP + CodeIgniter + Mysql 项目管理系统
  14. matlab 格式化文件,Matlab 文件格式化/Matlab Source File Formator
  15. Mac 上使用 zmodem 发送和接收堡垒机文件
  16. 网页截图怎么截一整张_如何网页截图?(截长图)
  17. 魅族计算机软件不见了,任务栏不见了
  18. 百度竞价点击系统,互动点击软件【胖虎图图-互动点击专家】
  19. golang 实现 tcp-聊天室
  20. 年轻人千万别让老司机把你带到坑里

热门文章

  1. 数据结构与算法【Java版】:第一课
  2. CookieJar类
  3. rdesktop利用3389端口进行远程登录
  4. 【深度学习】论文导读:ELU激活函数的提出(FAST AND ACCURATE DEEP NETWORK LEARNING BY EXPONENTIAL LINEAR UNITS (ELUS))
  5. 盒模型BFC渲染机制
  6. 牛客刷题笔记--(数组专项练习1-77)
  7. Python元类和新型类-对象是类的实例,那类又是谁的实例?
  8. 叮,您有一份防薅羊毛攻略已送达。
  9. 极简主义,风格化与小团队
  10. 如何使用fiddler过滤请求