在 HDD 中而不是在上下文中查找图像

发布于 2024-12-11 06:29:48 字数 525 浏览 0 评论 0原文

我有多模块项目

Project
  |--src
      |-JavaFile.java

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

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

编译后的问题

java文件查找图像文件在 c:\ibm\sdp\servercompletepath\logo.png 中而不是在上下文中。 iText 文件在 java 文件中定义如下:

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

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

I have multimodule project

Project
  |--src
      |-JavaFile.java

Web-Project
  |-Web-Content
    |-images
    |   |-logo.PNG
    |-pages
    |-WEB-INF
  1. regular java module - contains src with all java files
  2. dynamic web project module - contains all web related stuff

eventually regular java module goes as a jar file in dynamic web module in lib folder

Problem

java file after compilation looks for an image file in c:\ibm\sdp\server completepath\logo.png rather in context. File is defined in java file as below for iText:

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

Please suggest how can I change my java file to refer to image. I am not allowed to change my project structure.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

画骨成沙 2024-12-18 06:29:48

您需要使用 ServletContext#getResource() 或者更好的是 getResourceAsStream() 为此。它返回一个 URL< /a> 分别是 InputStream 网络中的资源 内容。

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

这样,您就不再依赖于 Web 应用程序的部署位置(以及方式!)。依赖绝对磁盘文件系统路径只会导致可移植性问题。

另请参阅:


更新:根据评论,你似乎正在使用 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);
// ...

You need to use ServletContext#getResource() or, better, getResourceAsStream() for that. It returns an URL respectively an InputStream of the resource in the web content.

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

This way you're not dependent on where (and how!) the webapp is been deployed. Relying on absolute disk file system paths would only end up in portability headache.

See also:


Update: as per the comments, you seem to be using iText (you should have clarified that a bit more in the question, I edited it). You can then use the Image#getInstance() method which takes an URL:

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

Update 2: as per the comments, you turn out to be sitting in the JSF context (you should have clarified that as well in the question). You should use ExternalContext#getResource() instead to get the URL:

URL url = FacesContext.getCurrentInstance().getExternalContext().getResource("/images/logo.PNG");
Image image = Image.getInstance(url);
// ...
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文