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.htmlwelcome_fr.html静的にアクセスすることです。ここまでは順調ですね。Eclipse (Tomcat バージョン 6.0.32) から直接 Tomcat インスタンスを実行するテスト マシンでは、すべて正常に動作します。次の URL を使用してファイルにアクセスできます。

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

WAR ファイルをエクスポートして本稼働の Tomcat サーバーにデプロイすると、動作が異なります。

本稼働サーバー (Tomcat バージョン 6.0.18) で同じファイルにアクセスすると、エラー 404 が発生します。デバッグのために、サーブレットのlistingプロパティを有効にしました。そして、私は使用してdefaultのみアクセスできることがわかりましたwelcome_de.html

http://productive:8080/MyApplication/static/static/welcome_de.html. ここでのテストと同じリンクを使用すると、Web アプリケーションのコンテンツを取得できます。

どういうわけか、フォルダーstaticは 1 つのレベルでそれ自体にネストされているようです。

何か案が ?主要なバージョンの違いがないのに、2 つのマシンで動作が異なるのはなぜですか?

残念ながら、本稼働サーバーをバージョン 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 に答える