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

时间:2011-10-21 17:04:32

标签: url jsf itext contextpath

我有多模块项目

Project
  |--src
      |-JavaFile.java

Web-Project
  |-Web-Content
    |-images
    |   |-logo.PNG
    |-pages
    |-WEB-INF
  1. 常规java模块 - 包含所有java文件的src
  2. 动态网络项目模块 - 包含所有与网络相关的内容
  3. 最终常规java模块作为lib文件夹中的动态Web模块中的jar文件

    问题

    编译后的

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

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

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

1 个答案:

答案 0 :(得分:1)

您需要使用ServletContext#getResource()或更好的getResourceAsStream()。它会在Web内容中分别返回URL InputStream个资源。

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

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

另见:


更新:根据评论,您似乎正在使用iText(您应该在问题中澄清一点,我编辑了它)。然后,您可以使用Image#getInstance()的{​​{1}}方法:

URL

更新2 :根据评论,您最终会坐在JSF上下文中(您应该在问题中澄清这一点)。您应该使用ExternalContext#getResource()来获取URL url = getServletContext().getResource("/images/logo.PNG"); Image image = Image.getInstance(url); // ...

URL