参考Tomcat的ClassLoader描述。btw,你“理想中的次序”是对的。

解决方案 »

  1.   

    http://tomcat.apache.org/tomcat-5.5-doc/class-loader-howto.html
      

  2.   

    貌似现在的JDK所提供的API并不支持这样的操作。对磁盘文件的操作是受权限控制的,JVM或Tomcat的安全机制不一定允许你去查找具体的class文件吧。不好意思,我这么说是基于猜测,并没有时间精力去研究,或许你可以研究一下呢?
      

  3.   

    String className = "com.mysql.jdbc.Driver";
    Class clz = Class.forName(className);
    URL u = clz.getResource("/" + className.replace('.', '/') + ".class");
    if(u.getProtocol().equalsIgnoreCase("jar"))
    System.out.println(u.getFile().substring(0, u.getFile().indexOf('!')));
    else if(u.getProtocol().equalsIgnoreCase("file"))
    System.out.println(u.getFile());
      

  4.   

    接  CHDW 正确
    package com.gcg.spring.manager;import java.net.URL;public class Test {
    public static void main(String[] args){
    String className = "com.mysql.jdbc.Driver";
    Class clz = null;
    try {
    clz = Class.forName(className);
    } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    URL u = clz.getResource("/" + className.replace('.', '/') + ".class");
    if(u.getProtocol().equalsIgnoreCase("jar"))
    System.out.println(u.getFile().substring(0, u.getFile().indexOf('!')));
    else if(u.getProtocol().equalsIgnoreCase("file"))
    System.out.println(u.getFile());
    }
    }