从ClassLoader

时间:2017-12-08 14:06:43

标签: java jsp java-ee

我有一个JAVA EE应用程序。这种结构:

/iberiaApp
/iberiaApp/configFiles/hotel
/iberiaApp/config.jsp
/iberiaApp/WEB-INF/classes

config.jsp内我有这段代码:

 <%=FileReader.readFiles("configFiles/hotel")%>;

public static List<String> readFiles (String folder) throws URISyntaxException {

    ClassLoader classLoader = FileReader.class.getClassLoader();

    URI uri = classLoader.getResource(folder).toURI();

但我得到一个nullpointer获取URI(classLoader.getResource(文件夹)返回null)

2 个答案:

答案 0 :(得分:-2)

Web应用程序根目录本身不在运行时类路径上,因此您无法通过类加载器加载相对于Web应用程序根目录的资源。将配置文件放在src / main / resources下,因此在运行时它们将位于WEB-INF / classes下,并可通过类加载访问。

此外,您不希望将配置文件保留在Web应用程序根目录下,因为它们可以直接由Web应用程序用户访问。

答案 1 :(得分:-2)

查看以下说明: https://stackoverflow.com/a/3160706/1715121

几点说明:

  1. 您应该更喜欢[ClassLoader] [1]返回的Thread#getContextClassLoader()

    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
    

    返回可以访问所有资源的最基本的类加载器。 Class#getClassLoader()只返回有问题的类的(子)类加载器,它本身可能无法访问所需的资源。它总是在具有单个类加载器的环境中工作,但并不总是在具有复杂的类加载器层次结构的环境中工作,如webapps。

  2. /WEB-INF文件夹不在类路径的根目录中。 /WEB-INF/classes文件夹是。因此,您需要加载相对于该属性的属性文件。

    classLoader.getResource("/configFiles/hotel");