在 HDD 中而不是在上下文中查找图像
我有多模块项目
Project
|--src
|-JavaFile.java
Web-Project
|-Web-Content
|-images
| |-logo.PNG
|-pages
|-WEB-INF
- 常规java模块-包含所有java文件的src
- 动态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
- regular java module - contains src with all java files
- 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您需要使用
ServletContext#getResource()
或者更好的是getResourceAsStream()
为此。它返回一个URL
< /a> 分别是InputStream
网络中的资源 内容。这样,您就不再依赖于 Web 应用程序的部署位置(以及方式!)。依赖绝对磁盘文件系统路径只会导致可移植性问题。
另请参阅:
更新:根据评论,你似乎正在使用 iText (你应该在问题中多澄清一点,我编辑了它)。然后,您可以使用
Image#getInstance()
方法,该方法采用URL
:更新 2:根据评论,您结果是坐在 JSF 上下文中(您也应该在问题中澄清这一点)。您应该使用
ExternalContext#getResource()
来获取URL
:You need to use
ServletContext#getResource()
or, better,getResourceAsStream()
for that. It returns anURL
respectively anInputStream
of the resource in the web content.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 anURL
: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 theURL
: