私は自分の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>"
でロードしました
どんなポインタも役に立ちました。
できることは次のとおりです。
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"
/>
そしてそれはすべて大丈夫です!
これが私のために働いた唯一の解決策です。これをconf/server.xmlのHostノードに追加します。
<Context path="" docBase="yourAppContextName">
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
tomcat server.xmlファイルに移動し、パスを空白に設定します
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"/>
この小さなコードは、仮想ホストを使って私のために働きました
<Host name="my.Host.name" >
<Context path="" docBase="/path/to/myapp.war"/>
</Host>
最速で最善の解決策は<Tomcat_INSTALL_DIR>/conf/Catalina/localhost/ROOT.xml
の下の内容を持つことです
<Context
docBase="/your_webapp_location_directory"
path=""
reloadable="true"
/>
そしてあなたのWebアプリケーションはhttp://<Host>:<port>/
で利用可能になるでしょう
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で遊ぶことは他の猫と遊ぶことより多くの時間が必要であると言いましょう!
私にとっては両方の答えがうまくいった。
<Context docBase="/tmp/wars/hpong" path="" reloadable="true" />
<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を無視してください。
ROOT.war
に変換してそれをwebappsの下に置くことを好みました。そのため、今では他の戦争(コンテキストパス)からの比類のないURL要求がこの戦争に上陸するでしょう。これはROOT( "/ **")コンテキストパスを処理するためのより良い方法です。2つ目の選択肢は、Webappsフォルダから戦争を(ダブル)ロードすることです。また、それは頭痛の種である、圧縮されていないwarフォルダのみが必要です。
Server.xmlやROOT.xmlなどのサーバー設定を更新することはお勧めできません。
コンテキストパス設定を含めて、context.xml設定ファイルをWebアプリケーションのMETA-INFディレクトリに置くことができます。これはデフォルトのサーバー設定を上書きしますか?
すなわち:
<Context docBase="yourAppName" path="/yourAppPath" reloadable="true">
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アプリケーションの魔女で、私はプロジェクトの設定でコンテキストパスを設定しました。他には何もしていません。
<Context docBase="yourAppName" path="" reloadable="true">
tomcat server.xmlファイルに移動し、パスを空白に設定します
最も簡単で柔軟な解決法は以下の通りです:$ {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アプリケーションの下にできるだけ多くのアプリケーションを追加できます。
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" />