我有多模块项目
Project
|--src
|-JavaFile.java
Web-Project
|-Web-Content
|-images
| |-logo.PNG
|-pages
|-WEB-INF
。
最终,常规java模块会成为lib文件夹中动态web模块中的jar文件。
问题
编译后的java文件在c:\ibm\sdp\server completepath\logo.png中查找映像文件,而不是在上下文中查找。在java文件中为iText定义了以下文件:
Image logo = Image.getInstance("/images/logo.PNG");
请建议如何将java文件更改为引用图像。我不允许改变我的项目结构。
发布于 2011-10-21 17:07:27
为此,您需要使用ServletContext#getResource()
或更好的getResourceAsStream()
。它分别返回一个URL
,一个web内容中的资源的InputStream
。
InputStream input = getServletContext().getResourceAsStream("/images/logo.PNG");
// ...
这样你就不会依赖于在哪里(以及如何!)网络应用程序已经部署。依赖于绝对磁盘文件系统路径只会导致移植性头痛。
另请参阅:
Update:根据注释,您似乎在使用iText (您应该澄清问题中的更多内容,我对其进行了编辑)。然后,您可以使用Image#getInstance()
方法,它接受一个URL
URL url = getServletContext().getResource("/images/logo.PNG");
Image image = Image.getInstance(url);
// ...
更新2:根据注释,您原来是处于JSFUpdate2上下文中(您应该在问题中也澄清这一点)。您应该使用ExternalContext#getResource()
来获取URL
URL url = FacesContext.getCurrentInstance().getExternalContext().getResource("/images/logo.PNG");
Image image = Image.getInstance(url);
// ...
https://stackoverflow.com/questions/7852794
复制相似问题