0

我有多模块项目

Project
  |--src
      |-JavaFile.java

Web-Project
  |-Web-Content
    |-images
    |   |-logo.PNG
    |-pages
    |-WEB-INF
  1. 常规 java 模块 - 包含所有 java 文件的 src
  2. 动态网络项目模块 - 包含所有与网络相关的东西

最终,常规 java 模块在 lib 文件夹中的动态 web 模块中作为 jar 文件

问题

编译后的 java 文件在 c:\ibm\sdp\server completepath\logo.png 中而不是在上下文中查找图像文件。文件在 iText 的 java 文件中定义如下:

Image logo = Image.getInstance("/images/logo.PNG");

请建议我如何更改我的 java 文件以引用图像。我不允许更改我的项目结构。

4

1 回答 1

1

您需要为此使用ServletContext#getResource(),或者更好getResourceAsStream()。它URL分别返回InputStreamWeb 内容中的资源的一个。

InputStream input = getServletContext().getResourceAsStream("/images/logo.PNG");
// ...

这样,您就不必依赖于 webapp 的部署位置(以及如何部署!)。依赖绝对磁盘文件系统路径只会导致可移植性问题。

也可以看看:


更新:根据评论,您似乎正在使用 iText(您应该在问题中澄清一点,我对其进行了编辑)。然后,您可以使用采用以下Image#getInstance()方法的方法URL

URL url = getServletContext().getResource("/images/logo.PNG");
Image image = Image.getInstance(url);
// ...

更新 2:根据评论,您原来坐在 JSF 上下文中(您也应该在问题中澄清这一点)。您应该ExternalContext#getResource()改为使用URL

URL url = FacesContext.getCurrentInstance().getExternalContext().getResource("/images/logo.PNG");
Image image = Image.getInstance(url);
// ...
于 2011-10-21T17:07:27.200 回答