Tomcat在不同的机器上表现不同

时间:2012-06-27 14:52:11

标签: tomcat web vaadin

我正在使用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.htmlwelcome_fr.html。 到现在为止还挺好。在我的测试机器上,我从eclipse(tomcat版本6.0.32)运行Tomcat实例,一切正常。我可以使用URL访问该文件:

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

如果我将WAR文件导出并部署到高效的Tomcat服务器,则其行为会有所不同。

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

访问welcome_de.html

http://productive:8080/MyApplication/static/static/welcome_de.html。如果我在这里使用与测试相同的链接,我将获得我的webapplication的内容。

不知何故,文件夹static似乎嵌套了一个级别。

有什么想法吗?为什么两台机器的行为不同 - 而版本没有重大区别?

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

2 个答案:

答案 0 :(得分:1)

这真是只是猜测,所以请不要因此而责备我。

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

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

我发现当我使用getResourceAsStream(“工作空间中的项目路径”)方法时,我的问题不再发生,例如, (我的应用程序中的代码片段,我也使用OpenNLP)

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

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

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

答案 1 :(得分:1)

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