属性文件的位置为WEB-INF/classes/auth.properties
。
我不能使用JSF特定的方式(通过ExternalContext),因为我需要服务模块中的属性文件,该文件不依赖于Web模块。
我已经试过了
MyService.class.getClassLoader().getResourceAsStream("/WEB-INF/classes/auth.properties");
但它返回null
。
我也尝试阅读它,FileInputStream
但是它需要完整的路径,这是不可接受的。
有任何想法吗?
几点注意事项:
您应该更喜欢由ClassLoader
返回的Thread#getContextClassLoader()
。
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
这将返回可以访问所有资源的最父类加载器。该Class#getClassLoader()
会只返回类的(子)类加载器中可能本身并不访问所需的资源问题。它始终将在具有单个类加载器的环境中工作,而并非总是在具有复杂的类加载器层次结构(如webapps)的环境中工作。
该/WEB-INF
文件夹不在类路径的根目录中。该/WEB-INF/classes
文件夹是。因此,您需要加载与此相对的属性文件。
classLoader.getResourceAsStream("/auth.properties");
如果您选择使用Thread#getContextClassLoader()
,请删除前导/
。
ExternalContext#getResourceAsStream()
使用ServletContext#getResourceAsStream()
“幕后” 的特定于JSF的资源仅从Web内容(/WEB-INF
文件夹所在的位置)返回资源,而不从类路径返回资源。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句