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

标签 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。出于调试目的,我启用了 defaultlisting 属性> servlet。我发现我只能使用welcome_de.html访问

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

不知何故,文件夹 static 似乎嵌套在其自身中一层。

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

不幸的是,无法将生产服务器升级到版本 6.0.32。

最佳答案

这确实只是一个猜测,所以请不要为此责怪我。

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

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

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

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

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

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

关于Tomcat 在不同的机器上表现不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11229024/

相关文章:

tomcat - JRuby 与 Tomcat

java - 在 tomcat 实时生产服务器上重新部署 war

json - Grails-向现有的Map域类成员添加新的默认值

java - 列表中的点赞总数

vaadin - 如何在 Vaadin 中高效渲染子元素的动态列表

java - 无法让聚合物元素在 GWT 中工作

java - Spring Boot Web 应用程序 : JSP page throws 404 error

eclipse - OGNL 在 Debug模式下非常慢 (Tomcat 7)

python - 为网络和桌面创建应用程序

javascript - W3C 语音转文本 : output values as you speak