web-dev-qa-db-ja.com

Tomcat 7.0でWebアプリケーションのコンテキストパスを設定する方法

私は自分のWebアプリケーション(またはそのWARファイル)の名前をROOTに変更できることを知っていますが、これはひどいやり方です、私見。今、私はTomcatのドキュメントをチェックしました。

Server.xmlファイルに直接要素を配置することはお勧めできません。

そこで私はそれが提案した別の方法をやろうとしました。

個々のContext要素は、明示的に定義することができます。アプリケーションファイル内の/META-INF/context.xmlにある個々のファイル内。

それで、私は以下のコードで/META-INF/context.xmlを作成しました、

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/"/>

しかし、私がサーバを再起動したときにデプロイした後も、 "/"でコンテキストをロードするのに失敗しました、それでもまだ"/<WEB_APP_NAME>"でロードしました

どんなポインタも役に立ちました。

155
Chantz

できることは次のとおりです。

ROOT.xml<catalina_home>/conf/Catalina/localhost/というファイルを追加します。

このROOT.xmlは、そのエンジンとホスト(Catalinaとlocalhost)のTomcatインストールのルートコンテキストのデフォルト設定を上書きします。

ROOT.xmlファイルに次のように入力します。

<Context 
  docBase="<yourApp>" 
  path="" 
  reloadable="true" 
/>

ここで、<yourApp>はあなたのアプリの名前です。

そして、あなたが行く、あなたのアプリケーションは現在デフォルトのアプリケーションであり、http://localhost:8080に現れるでしょう

ただし、副作用が1つあります。アプリケーションは2回ロードされます。 localhost:8080に1回、localhost:8080/yourAppに1回です。これを修正するには、アプリケーションをOUTSIDE <catalina_home>/webappsに配置し、ROOT.xmlのdocBaseタグに相対パスまたは絶対パスを使用します。このようなもの;

<Context 
  docBase="/opt/mywebapps/<yourApp>" 
  path="" 
  reloadable="true" 
/>

そしてそれはすべて大丈夫です!

220
Paaske

これが私のために働いた唯一の解決策です。これをconf/server.xmlのHostノードに追加します。

<Context path="" docBase="yourAppContextName">

  <!-- Default set of monitored resources -->
  <WatchedResource>WEB-INF/web.xml</WatchedResource>

</Context>

tomcat server.xmlファイルに移動し、パスを空白に設定します

13
rodvlopes

Tomcat 9.0では、私はserver.xmlで以下を変更するだけです。

<Context docBase="web" path="/web" reloadable="true" source="org.Eclipse.jst.jee.server:web"/>

<Context docBase="web" path="" reloadable="true" source="org.Eclipse.jst.jee.server:web"/>
4
MK Yung

この小さなコードは、仮想ホストを使って私のために働きました

<Host name="my.Host.name" >
   <Context path="" docBase="/path/to/myapp.war"/>
</Host>
3
Jorge Sanchez

最速で最善の解決策は<Tomcat_INSTALL_DIR>/conf/Catalina/localhost/ROOT.xmlの下の内容を持つことです

<Context 
  docBase="/your_webapp_location_directory" 
  path="" 
  reloadable="true" 
/>

そしてあなたのWebアプリケーションはhttp://<Host>:<port>/で利用可能になるでしょう

2
Rajesh Gheware

1ヶ月間この問題に直面しました、server.xmlの中にcontextタグを置くことは安全ではありません.com/domain1フォルダ!データベースセッション接続も2回ロードされます。もう1つの方法は、フルパスのコンテキストタグを持つROOT.xmlファイルを配置することです。

 <Context path="" docBase="/var/lib/Tomcat7/webapps/ROOT" />

conf/catalina/webappsfoldernameに入れ、webappsfoldernameの中にwarファイルをROOT.warとしてデプロイし、さらにHostを指定します。

 <Host name="domianname"  appBase="webapps2" unpackWARs="true"  autoDeploy="true"  xmlValidation="false" xmlNamespaceAware="false" >

        <Logger className="org.Apache.catalina.logger.FileLogger"
               directory="logs"  prefix="localhost_log." suffix=".txt"
          timestamp="true"/>
</Host>

このアプローチでも、同じタイプのアプリの場合、ユーザーセッションは十分に分離されていません。 app1とapp2が同じであれば、サーバーサイドセッションで自動的にapp2にログインできます。そのため、jsessionidではなく、クライアント側のキャッシュにユーザーのセッションを保持する必要があります。エンジン名をlocalhostからそれを解決するために変更することがあります。しかし、Tomcatで遊ぶことは他の猫と遊ぶことより多くの時間が必要であると言いましょう!

1
Ali.Mojtehedy

私にとっては両方の答えがうまくいった。

  1. / conf/Catalina/localhost /にROOT.xmlというファイルを追加します。
<Context
    docBase="/tmp/wars/hpong"
  path=""
  reloadable="true"
/>
  1. Server.xmlにエントリを追加する
<Service name="Catalina2">
    <Connector port="8070" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8743" />
    <Engine name="Catalina2" defaultHost="localhost">
        <Host name="localhost"
            unpackWARs="true" autoDeploy="true">
            <Context path="" docBase="/tmp/wars/hpong"  reloadable="true">
                <WatchedResource>WEB-INF/web.xml</WatchedResource>
            </Context>
      </Host>
    </Engine>
</Service>

注:コンテキストでdocBaseを宣言した場合は、HostでappBaseを無視してください。

  1. しかし、私は自分の戦争名をROOT.warに変換してそれをwebappsの下に置くことを好みました。そのため、今では他の戦争(コンテキストパス)からの比類のないURL要求がこの戦争に上陸するでしょう。これはROOT( "/ **")コンテキストパスを処理するためのより良い方法です。

2つ目の選択肢は、Webappsフォルダから戦争を(ダブル)ロードすることです。また、それは頭痛の種である、圧縮されていないwarフォルダのみが必要です。

1

Server.xmlやROOT.xmlなどのサーバー設定を更新することはお勧めできません。

コンテキストパス設定を含めて、context.xml設定ファイルをWebアプリケーションのMETA-INFディレクトリに置くことができます。これはデフォルトのサーバー設定を上書きしますか?

すなわち:

<Context docBase="yourAppName" path="/yourAppPath" reloadable="true">
1
Ivan

Tomcat 8:多くの検索の後、これは実用的なコードにすぎません:server.xmlの中

<!-- Set /Apple as default path -->
    <Host name="localhost"  appBase="webapps"
         unpackWARs="true" autoDeploy="true">
     <Context path="" docBase="Apple">
         <!-- Default set of monitored resources -->
         <WatchedResource>WEB-INF/web.xml</WatchedResource>
     </Context>
    </Host>

Tomcatを再起動し、127.0.0.1:8080にアクセスしたら必ず127.0.0.1:8080/Appleに表示されます。

私のプロジェクトは、NetBeansによって作成されたJava Webアプリケーションの魔女で、私はプロジェクトの設定でコンテキストパスを設定しました。他には何もしていません。

1
user3600935

<Context docBase="yourAppName" path="" reloadable="true">

tomcat server.xmlファイルに移動し、パスを空白に設定します

1
Vipin Yadav

最も簡単で柔軟な解決法は以下の通りです:$ {Tomcat_home} /config/server.xmlの中

以下のようにHost要素の下のautoDeploy = "false" deployOnStartup = "false"を変更しますこれは必須です。

<Host name="localhost"  appBase="webapps"
        unpackWARs="true" autoDeploy="false" deployOnStartup="false">

以下の行をホスト要素の下に追加します。

<Context path="" docBase="ServletInAction.war"  reloadable="true">
            <WatchedResource>WEB-INF/web.xml</WatchedResource>
        </Context>

上記のアプローチでは、異なるコンテキストパス名を使用してWebアプリケーションの下にできるだけ多くのアプリケーションを追加できます。

0
Ravi Gupta

Tomcat 8.Xでは、server.xmlのTomcatホームディレクトリ/ conf /フォルダの下に、<Context>タグの下に<Host>タグを追加できます。しかし、有効にするにはサーバーを再起動する必要があります

  <Host name="localhost"  appBase="webapps"
        unpackWARs="true" autoDeploy="true">

     <Context docBase="${catalina.base}\webapps\<Your App Directory Name>" path="<your app path you wish>" reloadable="true" />
  </Host>

Tomcat 7.Xを使用している場合は、プロジェクトのWEB-INFフォルダにcontext.xmlファイルを追加できます。使用しているファイルの内容は以下のとおりです。そしてそれは私のためにうまくいきました。この場合、サーバーを再起動する必要はありません。

<?xml version="1.0" encoding="UTF-8"?>

<Context docBase="${catalina.base}\webapps\<My App Directory Name>" path="<your app path you wish>" reloadable="true" />
0