ClassNotFoundException - 使用ClassLoader在Web应用程序中动态加载类时

时间:2014-10-20 12:08:05

标签: java java-ee web netbeans-7 classnotfoundexception

我正在尝试使用NetBeans IDE中的Java ClassLoader的loadClass方法动态加载类。 当我运行以下独立程序时,它会正确执行并按预期打印输出:

public class StandaloneClass {

    public static void main(String[] args) {
        try {

            String directory = "C:\\Workspace\\ProjectMeteor\\src\\java\\com\\meteor\\loader";

            File file = new File(directory);
            URL url = file.toURI().toURL();
            URL[] urls = new URL[]{url};

            ClassLoader cl = new URLClassLoader(urls);

            Class cls = cl.loadClass("com.meteor.loader.ClassToBeLoaded");
            Object o = cls.newInstance();

            System.out.println("Class Loaded: " + o.getClass().toString());

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

输出: - 已加载类:com.meteor.loader.ClassToBeLoaded类

但是,当我运行相同的代码片段(在Web应用程序中)时,它会抛出ClassNotFoundException。

@Path("/test")
public class DynamicWebClass {

    @GET
    @Path("/getFileExplorerNodes")
    @Produces(MediaType.TEXT_PLAIN)
    public String getFileExplorerNodes() {
        try {

            String directory = "C:\\Workspace\\ProjectMeteor\\src\\java\\com\\meteor\\loader";

            File file = new File(directory);
            URL url = file.toURI().toURL();
            URL[] urls = new URL[]{url};

            ClassLoader cl = new URLClassLoader(urls);

            Class cls = cl.loadClass("com.meteor.loader.ClassToBeLoaded");
            Object o = cls.newInstance();

            return o.getClass().toString();

        } catch (Exception e) {
            e.printStackTrace();
            return "error";
        }
    }

}

输出: -
java.lang.ClassNotFoundException:com.meteor.loader.ClassToBeLoaded

为什么在独立程序中正常工作时,它会在Web应用程序中抛出异常? 如何解决此问题并使其在Web应用程序中正常运行?

1 个答案:

答案 0 :(得分:1)

看起来像提供给类加载器的URL有问题。请提供相对网址