java - 如何从打包在war文件中的jar文件中加载资源?

标签 java servlets

<分区>

我需要从 jar 加载属性文件。该 jar 包含在 war 文件中。这是结构

ROOT.war
  WEB-INF
     lib
       my.jar

here my.jar has following structure

my.jar
  com
    test
      myservlet.class
  WEB-INF
    test.property

现在我在我的一个 servlet 中编写了如下代码:

InputStream stream = getServletContext().getResourceAsStream("/WEB-INF/test.properties");
Properties prop = new Properties();
prop.load(stream );

但在上面的代码中,我得到的流为空。如果我将属性文件放在 ROOT.war/WEB-INF 中,它就可以正常工作。我很清楚,如果 getResourceAsStream 中的路径以“/”开头,那么它会在上下文根目录中搜索资源。但是我如何读取位于根应用程序的 WEB-INF/lib 中的 jar 中的资源?

感谢和问候, 阿米特·帕特尔

最佳答案

将它放在 JAR 的根目录中,并通过上下文类加载器而不是 servletcontext 获取它。

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream input = classLoader.getResourceAsStream("test.properties");
// ...

/WEB-INF 文件夹约定特定于 WAR 文件,而不是 JAR 文件。摆脱它。如果您确实需要一个单独的 JAR 文件夹作为类路径的一部分,请改用 /META-INF

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream input = classLoader.getResourceAsStream("META-INF/test.properties");
// ...

关于java - 如何从打包在war文件中的jar文件中加载资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4585553/

相关文章:

java - 如何将照片相机应用程序保存在公共(public)目录中

java:使用 servlet 参数填充 bean 的最简单方法

Autowiring 的 HTTPServletRequest bean 的 Spring AOP 和方面线程安全

java - 2 个 Servlet 之间的通信不适用于数据库

Tomcat - 根据用户到达那里的方式使登录页面内容不同

java - 使用 nohup 运行 java jar 应用程序后无法执行 shell 脚本中的下一条语句

java - 将不同的正则表达式匹配替换为 Java 中基于匹配的结果

java - 位图不起作用

java - im4java 抛出 FileNotFoundException 错误

javascript - 如何在选择框onclick中调用servlet