2

我正在使用 Vaadin 框架,我的 web.xml 如下所示:

<servlet>
    <servlet-name>myservletname</servlet-name>
    <servlet-class>com.vaadin.terminal.gwt.server.ApplicationServlet</servlet-class>
    <init-param>
        <description>
        Vaadin application class to start</description>
        <param-name>application</param-name>
        <param-value>MyApplication</param-value>
    </init-param>
    <init-param>
        <description>
        Application widgetset</description>
        <param-name>widgetset</param-name>
        <param-value>MyWidgetset</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>myservletname</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/static/*</url-pattern>
</servlet-mapping>

此外,我的应用程序目录如下所示:

    .
    ├── (various xml config files)
    ├── META-INF
    │   └── ...
    ├── static
    │   ├── styles.css
    │   ├── welcome_de.html
    │   └── welcome_fr.html
    ├── trustStore.jks
    ├── VAADIN
    │   └──   ...
    └── WEB-INF
        ├── lib
        │   └── (various libraries)
        └── web.xml

welcome_de.html我的目标是welcome_fr.html静态访问。到现在为止还挺好。在我直接从 Eclipse(tomcat 版本 6.0.32)运行 Tomcat 实例的测试机器上,一切正常。我可以使用 URL 访问该文件:

http://localhost:8080/MyApplication/static/

如果我将 WAR 文件导出并部署到生产性 Tomcat 服务器,它的行为会有所不同。

在我的生产服务器(tomcat 版本 6.0.18)上访问相同的文件时,我收到错误 404。出于调试目的,我为servlet启用了该listing属性。default我发现我只能welcome_de.html使用

http://productive:8080/MyApplication/static/static/welcome_de.html. 如果我使用与此处测试相同的链接,我将获得我的 web 应用程序的内容。

不知何故,该文件夹static似乎嵌套了一层。

任何的想法 ?为什么两台机器的行为不同 - 而没有主要版本差异?

不幸的是,将生产服务器升级到版本 6.0.32 不是一种选择。

4

2 回答 2

1

这真的只是一个猜测,所以请不要怪我。

当我尝试使用 eclipse 和 Tomcat 加载不同类型的文件时,我遇到了类似的情况。在本地 eclipse Tomcat 上它运行得非常好,而在真正的应用程序服务器上却没有。

最后的原因,至少对我来说,是我如何在内部加载文件。

我发现当我使用 getResourceAsStream("path from project in working space") 方法时,我的问题不再发生,例如(我的应用程序中的代码片段,我也使用 OpenNLP)

    try (InputStream modelIn = getClass().getResourceAsStream(
            "/documentProcessor/algorithms/pos-maxent.bin")) {
        ...
    }

“documentProcessor”、“algorithms”等只是我希望包含在我的 Web 应用程序中的工作区中项目的外部文件的文件路径。

我不知道您如何将 *.html 文件包含到您的 vaadin 应用程序中,但如果您以某种方式加载它们,可能值得一试。

于 2012-07-08T23:09:41.710 回答
1

好吧 - 我以不同的方式解决了它。我只是让 Vaadin 提供文件,然后使用 Filepath 读取它。它似乎有效,尽管可能有更好的解决方案。

于 2012-07-11T06:32:21.820 回答