如何读取部署在 Tomcat 中的未爆炸战争文件中的资源文件?
Posted
技术标签:
【中文标题】如何读取部署在 Tomcat 中的未爆炸战争文件中的资源文件?【英文标题】:How can I read a resource file in an unexploded war file deployed in Tomcat? 【发布时间】:2012-02-04 11:33:23 【问题描述】:我正在尝试加载二进制图像文件以在我的服务器端 Java 代码中进行一些处理。我目前正在将我的图像放在我的执行类所在的包中并调用:
Image img = Image.getInstance(this.getClass().getResource("logo.png"));
当我在我的开发机器上运行 Tomcat 时,这工作正常,但是当我部署到运行 Tomcat 的服务器上时,它不会爆炸战争文件,对 getResource 的调用返回 null。
我还尝试将图像移动到我的上下文根目录并像这样访问它:
Image img = Image.getInstance(this.getClass().getResource("/../../logo.png"));
同样,这适用于我的开发箱,但在我将其部署到其他地方时却不行。
有没有更好的方法来访问这个文件?我做错了什么?
谢谢!!
【问题讨论】:
我可能还应该提到我正在使用 Maven 来构建我的网络应用程序。我有一个完整的答案可以解决我的问题,但我不能在我自己的问题上发布 8 小时。 把资源放到你的“src/main/resources”目录下。然后通过以下方式访问它们: this.getClass().getResource("/logo.png");或者:Thread.currentThread().getContextClassLoader().getResource("logo.png"); 【参考方案1】:你可以把你的图片放在你的类路径的根目录,然后试试这个:
Thread.currentThread().getContextClassLoader()
.getResource("logo.png");
【讨论】:
+1 - 在类路径的根目录下,WAR 文件中的“WEB-INF/classes”是许多人放置所述资源的地方。虽然他们可以通过使用其中的“images/logo.png”之类的文件夹来组织。【参考方案2】:如果您使用 Maven 进行构建,您需要确保图像确实被放入存档中。
将资源放在您的src/main/resources
目录中。然后访问它们:
this.getClass().getResource("/logo.png");
或:
Thread.currentThread().getContextClassLoader().getResource("logo.png");
(上面评论中的代码示例,但把答案放在更明显的地方)
【讨论】:
第一种情况请不要忘记文件名前的'/'以上是关于如何读取部署在 Tomcat 中的未爆炸战争文件中的资源文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 maven 中的 tomcat 插件部署多个战争?