【问题标题】:Why can't I see an image inside the WEB-INF/classes directory in Tomcat?为什么在 Tomcat 的 WEB-INF/classes 目录中看不到图像?
【发布时间】:2014-12-06 16:46:43
【问题描述】:

大家好,我正在学习 Java 的 Vaadin,我创建了一个项目并将其作为 .war 导出到 Tomcat webapps 文件夹。该项目位于此路径:

/usr/local/apache-tomcat/apache-tomcat-8.0.15/webapps/project.war

现在我已经重新启动了 Tomcat,并且在 webapps 文件夹中,.war 被解压到了 /usr/local/apache-tomcat/apache-tomcat-8.0.15/webapps/project.warproject 文件夹中。

我的问题是我有一个 Vaadin ClassResource,它应该指向 WEB-INF/classes 目录中的一个图像(正如他们在 Vaadin 书中所说的那样),该图像位于此路径:

/usr/local/apache-tomcat/apache-tomcat-8.0.15/webapps/project/WEB-INF/classes/image.png

但是没有显示出来……下面是UI类的代码:

public class ImgUI extends UI {

     protected void init(VaadinRequest request) {

        // initializing the layout object etc...

        Resource r = new ClassResource("image.png"); // the image which is inside WEB-INF/classes dir
        layout.addComponent(new Image("Class resource image", r));

     }
}

我应该怎么做才能使用 ClassResource 显示图像?我知道还有其他方法(使用 ThemeResource 或 FileResource),但我想使用 ClassResource 并且正如 Vaadin 之书所说 -> https://vaadin.com/book/-/page/application.resources.html:

4.4.3。类加载器资源

ClassResource 允许从类路径加载资源 使用 Java 类加载器。通常,相关的类路径条目是 Web 应用程序下的 WEB-INF/classes 文件夹,其中 Java 编译应该编译 Java 类并从 源代码树。

下面的单行示例从 应用程序包并将其显示在 Image 组件中。

layout.addComponent(new Image(null,
        new ClassResource("smiley.jpg")));

为什么在我的情况下它不起作用?我该怎么办?

感谢关注!

【问题讨论】:

    标签: java tomcat vaadin


    【解决方案1】:

    可能 Vaadin 之书不是很准确。 ClassResource 构造函数 javadoc 写道:

    创建一个新的应用程序资源实例。资源 id 是相对于使用该资源的组件的 UI 的位置(或应用程序,如果使用 LegacyWindow)。

    所以你应该把image.png 放在你的ImgUI.class 旁边。

    【讨论】:

    • 您的意思是在 ImgUI.class 所在的包内 build/classes 中?
    • 无论如何我都尝试将图像放入build/classes/com/example/projectWhereImgUI.classIsLocated/ 但我看不到它,还有其他可能的解决方案吗?图片名称是正确的,我已经检查过了。
    • @user3019105 奇怪。在我的情况下,2个文件(ProgUI.classimage.png)在这里:e:\Work\apache-tomcat-8.0.12\webapps\my-project\WEB-INF\classes\com\myprog\main\base \,它的工作原理。
    • 嗯,我不知道为什么它不起作用,无论如何您是使用 .war 存档将应用程序部署到服务器还是使用 Eclipse 自动部署(在 .metadata/ .plugins) 与“运行方式 -> 在服务器上运行”?
    • 太好了,它确实有效!我已经将项目导出到 .war 并放在 Tomcat 服务器上,现在我可以看到它了。所以我们可以说 ClassResource 查找位于 与使用它的 UI.class 文件所在路径相同的资源,并且仅当应用程序最终以 .war 文件的形式部署到服务器。无论如何,这本书并没有解释这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    • 2011-06-11
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多