0

在我的 Vaadin 项目中,我希望能够直接将图像作为静态资源访问。当我将图像放在 src/main/webapp/VAADIN/themes/... 下面时,它可以工作。如果图像位于 src/main/webapp/images 中,我该怎么做才能访问它们?到目前为止,我已经看到我可以将这个 servlet 映射放在我的 web.xml 中:

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/images/*</url-pattern>
</servlet-mapping>

不幸的是,它不起作用,我收到此错误:

Caused by: com.ibm.ws.exception.RuntimeWarning: SRVE0303E: Servlet name for the servlet mapping /images/* could not be found.

我的应用程序在 WebSphere 上运行,所以我还尝试了 SimpleFileServlet 作为 servlet-name:

<servlet-mapping>
    <servlet-name>SimpleFileServlet</servlet-name>
    <url-pattern>/images/*</url-pattern>
</servlet-mapping>

仍然导致与上述相同的错误。

任何帮助表示赞赏!


更新

其他 servlet 映射:

<servlet-mapping>
    <servlet-name>QuarzServlet</servlet-name>
    <url-pattern>/QuarzServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>RunJUnitServlet</servlet-name>
    <url-pattern>/RunJUnitServlet</url-pattern>
</servlet-mapping>

当尝试通过 URL 在网络浏览器中打开图像(位于 src/main/webapp/images/)时,它只会加载 Vaadin 应用程序。当我打开使用图像的页面时,Firebug 告诉我找不到图像。

4

1 回答 1

0

从您的更新来看,似乎 Vaadin servlet 被映射到 /* (或使用将静态文件请求映射到 Vaadin servlet 的 url 模式)。由于 Vaadin servlet 的映射与请求 URI 匹配,因此 Websphere 将为 Vaadin servlet 提供服务,该服务可能会尝试为静态文件提供服务。请求永远不会通过 Websphere 文件服务机制。您可以验证您的 Vaadin servlet 以查看您是否有如下注释:

@WebServlet(value = "/*")

如果是这种情况,并且您仍希望 Websphere 为静态文件提供服务,则需要将此映射修改为更具体,并让对静态文件的请求通过 Websphere 文件服务机制。您可以在此处找到有关如何设置 Vaadin servlet 的一些附加信息:

https://vaadin.com/wiki/-/wiki/Main/Creating+a+servlet+3.0+application

此外,这个stackoverflow问题有一些可能的解决方案:

如何从 Vaadin/Spring 应用程序提供静态资源?

于 2016-12-01T14:59:39.923 回答