为什么我在Tomcat的WEB-INF / classes目录中看不到图像?

时间:2014-12-06 16:46:43

标签: java tomcat vaadin

大家好我正在学习Vaadin for Java,我创建了一个项目并将其导出为.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")));

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

感谢您的关注!

1 个答案:

答案 0 :(得分:0)

可能是瓦丁书不太准确。 ClassResource构造函数javadoc写道:

  

创建新的应用程序资源实例。资源ID相对于使用此资源的组件的UI位置(如果使用LegacyWindow,则相对于应用程序)。

因此,您应该将image.png放在ImgUI.class旁边。