【问题标题】:Read resource inside context (.war) from a jar file从 jar 文件中读取上下文 (.war) 中的资源
【发布时间】:2010-11-25 20:27:21
【问题描述】:

我正在使用 JBoss4.0.1 和 Struts2.1.6

我有一个应用程序,它有一些配置文件(文件夹 WEB-INF/config 中的 appConfig.xml)。 此配置文件包含要读取的其他文件的相对路径。(other.xml、some.xml 等)。应用程序在 default/deploy 中部署为 .war

我有一个读取配置文件的实用程序包。我已经在 default/lib 中部署了 utility.jar

ServletContextListener 的contextInitialized 方法中,我正在读取appConfig.xml 并将appConfig 上的IOStream 传递给我的实用程序类,它会读取此文件并加载所有上下文相关路径。

我现在如何阅读这些文件?因为如果我尝试创建一个输入流,它会返回 NULL。

我已尝试在实用程序类中进行以下操作。

从ServletContextListener的contextInitialized方法内部调用read方法

public void read(){ 
this.getClass().getClassLoader.getResourceAsStream("/WEB-INF/config/some.xml");
}

public void read(ClassLoader cl){ 
  cl.getResourceAsStream("/WEB-INF/config/some.xml"); --> Null
  cl.getResourceAsStream("/../config/some.xml"); --> Null
  cl.getResourceAsStream("../config/some.xml"); --> Null
}

public void read(ServletContext ct){ 
 ct.getResourceAsStream("/WEB-INF/config/some.xml");.
 ct.getResourceAsStream("/../config/some.xml"); --> Null
 ct.getResourceAsStream("../config/some.xml"); --> Null
}

【问题讨论】:

  • 我在this post 中尝试过类似的问题。希望这会有所帮助。

标签: servlets jar servletcontextlistener war


【解决方案1】:

以下都不起作用,因为 /WEB-INF/config 不在类路径中,所以类加载器对此一无所知,

public void read(){ 
this.getClass().getClassLoader.getResourceAsStream("/WEB-INF/config/some.xml");
}

public void read(ClassLoader cl){ 
  cl.getResourceAsStream("/WEB-INF/config/some.xml"); --> Null
  cl.getResourceAsStream("/../config/some.xml"); --> Null
  cl.getResourceAsStream("../config/some.xml"); --> Null
}

这 2 个不起作用,因为它脱离了上下文(.. 不能是第一个元素),

public void read(ServletContext ct){ 

 ct.getResourceAsStream("/../config/some.xml"); --> Null
 ct.getResourceAsStream("../config/some.xml"); --> Null
}

我不太明白你的意图。如果您知道文件在“/WEB-INF/config/some.xml”中,为什么要从“/../config/some.xml”中读取它?

将配置文件存储在war中不是一个好主意。你应该考虑把它移到别的地方。

【讨论】:

  • 感谢您的cmets,只是想添加一些东西以供您理解。 1. WEB-INF/config 添加到类路径 2. 这是一次性配置,所以我需要在 .war 中使用它。 3. 可以有多个应用程序上下文具有相同的配置,所以我创建了一个读取这种配置的实用程序包。现在从上下文中我希望实用程序读取我的配置文件。我希望这能更好地帮助您理解您的帮助所遇到的问题。
猜你喜欢
  • 2021-11-21
相关资源
最近更新 更多