Tomcatのルートにアプリケーションをデプロイする


132

アプリケーションのwarファイルがあります。これをルートレベルで展開する必要があります。現在のURLはhttp://localhost:8080/war_name/application_nameです。


1
問題の正確な内容を教えていただけますか?tomcatにwarファイルをデプロイすると、アプリケーションは.war拡張子なしのURL:localhost:8080 / war_nameを使用してアクセスされます。
ashishjmeshram

1
はい、そうです。私のアプリにアクセスする必要があります。" localhost / application_name "、これはwarファイルの名前を "ROOT.war"に変更するときに達成できますが、warファイルのサイズが約120MBであるためメモリ不足例外が発生します
iamjustcoder

1
@ user661660-別の問題があるようです-名前を変更して機能するROOT.warはずです。OutOfMemoryExceptionスタックトレースと詳細を提供して、について別の質問をすることをお勧めします。おそらく-Xmx、JVM用に構成することで回避できます。
Rob Hruska、2011年

.lang.OutOfMemoryError:PermGen space 2011/03/16 9:52:52 AM com.ebay.kernel.logger.Logger log SEVERE:Error in Perfmon thread java.lang.OutOfMemoryError:PermGen space Exception in thread "CalClient:NotifyThreadDestroyThread-0 "java.lang.OutOfMemor yError:PermGen space Exception in thread" MetricsSnapshotScheduler "java.lang.OutOfMemoryError:PermG en space 2011 Mar 16、2011 9:53:36 AM com.ebay.kernel.logger.Logger log SEVERE:Error in Perfmonスレッドjava.lang.OutOfMemoryError:PermGen space Exception in thread "CalClient:NotifyThreadDestroyThread-0" java.lang.OutOfMemor yError:
PermGen

1
@ user661660-おそらく、この質問に対するいくつかの回答が役立つでしょう。
Rob Hruska、2011年

回答:


220

次の2つのオプションがあります。

  1. ROOT/tomcatからすぐに使えるディレクトリを削除し、ROOT.warデプロイする前にwarファイルの名前をに変更します。

  2. (あなたの例から)として、あなたの戦争を展開war_name.warし、設定するコンテキストルートをconf/server.xmlあなたのwarファイルを使用します:

    <Context path="" docBase="war_name" debug="0" reloadable="true"></Context>

最初の方が簡単ですが、少しうるさいです。2つ目は、おそらくよりエレガントな方法です。


3
Tomcatのがオートデプロイに設定されている場合は、オプション2を心配する必要はありません
Buhake Sindi

4
@Dejel-技術的には何もありません。私はかなり自分でやった。それは仕事を成し遂げる。自分のwarファイルの名前を、コンテナーの実装の詳細のようなものに変更しなければならないのは少しおかしいと感じます。
Rob Hruska、2015年

4
提供したリンクに従って、server.xmlファイルに<Context>要素を直接配置することはお勧めしません
Nilesh

6
この回答は、ドキュメントで不正な形式として明示的に言及されている手法を推奨しています。適切な手法の詳細は次のとおりです。stackoverflow.com
クリストファーシュルツ

5
ROOT.warと呼ぶと+1。Tomcatのドキュメントによると、二重展開を避けるために「パス」を指定するときは非常に注意する必要があります。「server.xmlでコンテキストを静的に定義するときでも、docBaseがホストのappBase、またはdeployOnStartupとautoDeployの両方がfalseです。このルールに従わない場合、二重展開が発生する可能性があります。 " -tomcat.apache.org/tomcat-8.0-doc/config/context.html
Anthony Hayward

31

tomcat v.7(バニラインストール)

conf / server.xmlで、ファイルの終わり近く、</Host>終了タグの直前に次のビットを追加します。

<Context path="" docBase="app_name">
    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

docBase属性に注意してください。それは重要なビットです。ルートWebアプリを変更する前にapp_nameがデプロイされていることを確認するか、解凍したwebapp(app_name)をtomcatのwebappsフォルダーにコピーします。スタートアップ、ルートにアクセスして、そこにapp_nameを確認してください!


13

これらの変更を加えたTomcat 7では、/のmyAPPと/ ROOTのROOTにアクセスできます

<Context path="" docBase="myAPP">
     <!-- Default set of monitored resources -->
     <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
<Context path="ROOT" docBase="ROOT">
     <!-- Default set of monitored resources -->
     <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

上記を<Host>server.xml のセクションに追加します


3
コンテキストパスは空の文字列であるか、「/」で始まる必要があります。パス[ルート]はこれらの基準を満たしていないため、[/ルート]に変更されました
Nikita Bosik 2015

11

私の回答が他の回答と重複していることはわかっていますが、これはいくつかの利点を持つ完全なソリューションです。これはTomcat 8で動作します:

  1. メインアプリケーションはルートから提供されます
  2. Webインターフェースを介したwarファイルのデプロイメントは維持されます。
  3. メインアプリケーションはポート80で実行されますが、管理者のみが管理フォルダーにアクセスできます(* nixシステムでは80にバインドするためにスーパーユーザーが必要ですが、Windowsでは問題ありません)。

つまり、tomcatを再起動する必要があるのは1回だけであり、更新後のwarファイルは問題なくデプロイできます。

手順1:server.xmlファイルで、コネクタエントリを見つけて、次のように置き換えます。

<Connector 
    port="8080"
    protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" />

<Connector
    port="80"
    protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" />

ステップ2:<Host ...>タグ内でコンテキストを定義します。

<Context path="/" docBase="CAS">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
<Context path="/ROOT" docBase="ROOT">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
<Context path="/manager" docBase="manager" privileged="true">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
<Context path="/host-manager" docBase="host-manager" privileged="true">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

webappフォルダー内のすべてのアプリに対処したことに注意してください。最初の方法は、ルートとメインアプリを位置から効果的に切り替えます。ROOTがオンにhttp://example.com/ROOTなり、メインアプリケーションがオンになりhttp://example.com/ます。パスワードで保護されているWebアプリケーションにはprivileged="true"属性が必要です。

ルートと一致するCAS.warファイルをデプロイするとき(<Context path="/" docBase="CAS">デプロイメントで更新されないため、管理パネルでそのファイルをリロードする必要があります。

<Context path="/CAS" docBase="CAS">warファイルをデプロイするマネージャーオプションが無効になるため、コンテキストにを含めないでください。あなたは二つの方法でアプリにアクセスできることをこの意味:http://example.com/http://example.com/APP/

手順3:ルートおよびマネージャーフォルダーへの不要なアクセスを防ぐために、次のvalveようにこれらのコンテキストタグにを追加します。

<Context path="/manager" docBase="manager" privileged="true">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <Valve className="org.apache.catalina.valves.RemoteAddrValve"
        addConnectorPort="true"
        allow="143\.21\.2\.\d+;8080|127\.0\.0\.1;8080|::1;8080|0:0:0:0:0:0:0:1;8080"/>
</Context>

これにより、管理Webアプリフォルダーへのアクセスは、デフォルトのポート8080を使用する場合、自分のドメイン(偽のIPアドレス)とlocalhostからのユーザーに本質的に制限され、Webインターフェイスを介してwarファイルを動的に展開する機能が維持されます。

異なるIPアドレスを使用している複数のアプリにこれを使用する場合は、コネクタにIPアドレスを追加できます(address="143.21.2.1")。

あなたがルートから複数のWebアプリケーションを実行する場合は、サービスタグは、(第2のために別の名前を使用)との文書ベースを変更複製することができ<Context path="/" docBase="CAS">、たとえばに<Context path="/" docBase="ICR">


6

最速の方法。

  1. ROOTアプリがデプロイされていないことを確認してください。

  2. warの名前をROOT.warに変更し、デプロイするだけです。構成を変更する必要はありません。


6

を削除し$CATALINA_HOME/webapps/ROOTます。更新し$CATALINA_HOME/conf/server.xml、Host要素が次のテキストのようになっていることを確認します。

<Host name="localhost"  appBase="webapps"
      unpackWARs="true" autoDeploy="false" deployOnStartup="false">
  <Context path="" docBase="myApp"></Context>

Tomcat 8で動作します。autoDeployとdeployOnStartupをfalseに設定して、tomcatがmyApp2度デプロイされないようにする必要があります。


WARをアップロードしようとしましたが、機能しませんでした。これは展開されたWAR専用ですか?
logixplayer 2015

WARをアップロードしてみましたが、@ Jingguoの例に基づいて動作しませんでした。これは展開されたWAR専用ですか?編集:それは確かに爆発した戦争のためだけです。どうしてこれなの?WARをアップロードして、この2つのステップを回避することはできませんか?どうすれば機能させることができますか?
logixplayer 2015

@logixplayer。私のソリューションはWARで動作します。爆発しませんでした。$CATALINA_HOME/webapps/ROOT削除する必要があることを忘れていました。削除してもう一度お試しください。
Jingguo Yao

あなたが言ったように私はルートを削除しました。WARを展開しました(展開ディレクトリではありません)。WEB-INFのように、私のROOTディレクトリに新しいROOTディレクトリが作成されていることに気付きました。サイトは稼働しています。これはそれが機能するはずの方法ですか?
logixplayer 2015

私もこの方法を試しましたが、ブラウザでページを開こうとすると、サーバーを待機し続けます。catalina.outは、サーバーが起動したことを示しているだけです。
Asu 2015

1

@Rob Hruskaのsolに追加すると、セクション内のserver.xmlのこの設定が機能します。

<Context path="" docBase="gateway" reloadable="true" override="true"> </Context>

注:場合によっては、override = "true"が必要になることがあります。


あなたはこれをどこに置くべきか言及しなかった。@Sudheer Palyamの回答は役に立ちました。
Kannan Ramamoorthy 2017

1

@Dimaの答えに加えてmaven、パッケージのビルドに使用している場合は、WARファイル名をROOTin に設定するように指示できますpom.xml

<build>
    <finalName>ROOT</finalName>
</build>

デフォルトでtomcatは、はROOT.warルートコンテキスト(/)にwebappをデプロイします。


0

tomact manager urlを開きます:-http :// localhost:8080 / manager / html /
次に、アプリケーションで、パスが「/」のアプリケーションが
デプロイされていることがわかります。アプリケーションのwarファイルの名前ROOT.warに変更し、パスに配置します:-Tomcatを 起動します追加の設定は必要ありません。 これで、アプリケーションのホームページまたはhttp:// localhost:8080に構成されたURLが表示されます。
ここに画像の説明を入力してください
C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps


-1

私のサーバーではこれを使用しており、ルートのautodeployは問題なく動作します。

   <Host name="mysite" autoDeploy="true" appBase="webapps" unpackWARs="true" deployOnStartup="true">
        <Alias>www.mysite.com</Alias>
        <Valve className="org.apache.catalina.valves.RemoteIpValve" protocolHeader="X-Forwarded-Proto"/>
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="mysite_access_log." suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b"/>
        <Context path="/mysite" docBase="mysite" reloadable="true"/>
    </Host>

これは/にデプロイされませんが、/ mysiteにデプロイされます
tine2k
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.