2017-12-18 4 views
0

Tomcatアプリケーション(warファイル)は、warファイルに静的コンテンツが含まれています。しかし、開発のために、私はwarファイルから静的コンテンツを移動し、ファイルシステム上のフォルダにマップしたいと思います。その理由は簡単です。たとえば、javascriptファイルに変更があるたびに、再デプロイする必要はありません。私はブラウザでページをリロードし、変更を受け取りたいと思います。私が希望しかしTomcat 8でwar以外の静的コンテンツをrootに展開する方法

<Context docBase="/my/static/content/folder" path="/some/context" /> 

:Tomcatのバージョンは8

です(あなたがそれをグーグル場合)この問題の最も一般的な解決策は、server.xmlファイルを変更し、これと同じスニペットを追加することです静的コンテンツをアプリケーションのルートフォルダにマップします。私の戦争ファイル名はmyapp.warだと言ってください。それは "/ myapp"の下に配備されます。問題は、私はルートから始まる静的なコンテンツを追加したい場合は、その後、私のコンテキストのスニペットは、このようになっていることである。

<Context docBase="/my/static/content/folder" path="/myapp" /> 

パスはユニークでなければならず、「myappには」の両方で使用することはできませんので、これは間違っています - warファイル名を使用してコンテキストを取得し、上記のコンテキストスニペットを使用する自動デプロイメント。私は "myapp/static"を指すようにパスを変更することができますが、避けたいソースコードに変更を加える必要があります。

私のアプリケーションのルートに外部フォルダをマップする方法は、歓迎以上です。

+0

他のドッカー画像を作成しないでください。 nginx httpd、そのイメージからdevの静的コンテンツを提供し、nginxをあなたのtomcat dockerイメージのリバースプロキシとして構成しますか? – saw303

+0

当分の間、私は可能な限りシンプルな設定を保つことを好む。静的コンテンツを提供するためにApache Webサーバーも使用できますが、当面は別のサーバーを導入したくありません。ヒントをありがとう。 – Flexer

答えて

0

そして、自分の質問に答える... コンテキストタグは次のようになります。このソリューションの

<Context path="/myapp" docBase="myapp.war"> 
    <Resources className="org.apache.catalina.webresources.StandardRoot"> 
     <PreResources className="org.apache.catalina.webresources.DirResourceSet" 
      base="/my/static/content/folder" 
      webAppMount="/"> 
     </PreResources> 
    </Resources> 
</Context> 

一つの不快な副作用は、しかし、私のサーバーの起動時間が〜22秒〜52から上昇したということです秒。 "/ my/static/content/folder"には97個のアイテムがあり、そのサイズは13.7MBです。

フィードバックこの方法を改善する方法や、このような大きな起動時間を持たない代替ソリューションは歓迎します。

更新日: PreResourcesからPostResourcesに切り替えると、問題の起動時間が改善されました。それは〜52秒から〜26秒に戻りました。オーバーヘッドはわずか4秒で、私には十分です。

私の元の記事では、Contextタグをserver.xmlに追加する必要があると述べました。これはうまく動作しますが、よりクリーンな方法は、context.xmlファイルを作成し、WARファイル内のMETA-INFの下に置くことです。この方法では、変更はWARファイルにのみあり、開発に使用されているかどうかにかかわらず、サーバー(それぞれDockerイメージ)は同じです。

関連する問題