2012-06-27 48 views
2

我使用Vaadin框架,我的web.xml如下所示:Tomcat的不同机器上的表现不同

<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错误。出于调试目的,我启用default servlet的listing属性。我发现我只能使用

http://productive:8080/MyApplication/static/static/welcome_de.html访问welcome_de.html。如果我在这里使用与测试相同的链接,我会得到我的web应用程序的内容。

不知何故,文件夹static似乎是嵌套在一个层次本身。

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

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

+0

是否安装了一些反向代理?除了在我知道的tomcat版本 – ilcavero

+0

中的细微差别之外,其他东西似乎不同。任何想法来验证这一点? – Atmocreations

回答

1

嗯 - 我解决它的方式不同。我只是让Vaadin提供文件,然后使用文件路径读取它。它似乎工作,虽然可能有更好的解决方案。

1

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

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

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

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

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

“documentProcessor”,“算法”等仅仅是文件路径,以从我的工作区项目中的外部文件,我想包括在我的Web应用程序。

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

+0

你的想法很好,但我认为你看错了方向。尽管我以不同的方式解决了这个问题,但我看了一下你的解决方案。这不是关于正确读取文件...这将工作。这是关于该文件不在应该在哪里。通过静态映射,我不处理为自己服务的文件,我让tomcat执行它。因此,这不会改变任何东西。无论如何,谢谢你的提示。 – Atmocreations

+0

对不起,正如我所说的,只是一个猜测:)祝你好运! – Waylander

+0

没问题,我根本不会责怪你!谢谢你尝试过。 – Atmocreations

相关问题