2011-01-21 7 views
3

1000回の質問がありましたが、検索して何も見つかりませんでした:)ごめんなさい。静的コンテンツ。 tomcat6とtomcat7の動作の違い

私は2つのTomcatインストールを持っています。 Windowsの場合はtomcat 6、Linuxの場合はtomcat 7。私は春を使用するプロジェクトを持っており、静的なコンテンツをいくつか持っています。要求をSpringを経由せずに提供できるようにしたいと考えています。ここ

は私のサーブレット構成です:

<servlet-mapping> 
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
<servlet-name>default</servlet-name> 
<url-pattern>/static/*</url-pattern> 
</servlet-mapping> 

私の静的ファイルは、WEB-INFフォルダの隣の「静的」フォルダにあります。

今私はhttp://myserver.com/myproject/static/css/main.cssへのリクエストを行うときにtomcat7に/webapps/myproject/static/css/main.cssのファイルを探しますが、tomcat6では/ webapps/myproject/css/main.cssを実行し、そのようなファイルがないというエラーを生成します。

両方のサーバーが同じように動作するにはどのような設定を調整する必要がありますか?

答えて

2

あなたは実際にTomcatのデフォルトサーブレットを悪用しようとしています。デフォルトサーブレットは、サーブレットAPIによって定義されておらず、サーブレットコンテナに限定されています。 Tomcatのデフォルトのサーブレットは、このように悪用された場合、/WEB-INF/META-INFのすべての内容を公開することができるバグを持つことが知られています。これはissue 50026として報告されており、Tomcat 6.0.30以降で修正されています。

解決方法は簡単です。web.xmlにデフォルトのサーブレットを明示的にマッピングしないでください。バグレポートに記載されているとおり、代わりにthis approachを使用する必要があります。

+0

ありがとう。それらのリンクは私を助けました:) –

+0

よろしくお願いします。 – BalusC

+0

ありがとう@BalusC静的リソース用のデフォルトサーブレットにリクエストを転送するフィルタを使用しても、Tomcat 6のデフォルトサーブレットがServletPathを考慮に入れないので、同様の変更を加えました。助けてもらえますか? – Pro

0

caseyと同じ質問によると、BalusCという別の簡単な答えは、ウェルカムファイルリストを指定し、最後のウェルカムファイルをアプリケーションサーブレットのURLパターンにマップすることです。この構成では、デフォルトサーブレットは静的コンテンツを処理しますが、不一致URLはアプリケーションに渡されます。

The full answer, with code, from casey