Tomcat 6 Webサーバーのデフォルトアプリケーションを「ROOT」(webappsフォルダー内)とは異なるアプリケーションに変更しようとしています。これを行う最良の方法は何ですか?
3つの方法があります。
まず、bin
ディレクトリ(sh shutdown.sh
)からTomcatをシャットダウンします。次に、Tomcat webapps
フォルダー(rm -fr *
)のすべてのコンテンツを削除します。次に、WARファイルの名前をROOT.war
に変更し、最後にbin
ディレクトリ(sh startup.sh
)からTomcatを起動します。
Warファイルを元の名前で$CATALINA_BASE/webapps
に残します。 server.xml
ファイルのHost要素でautoDeployおよびdeployOnStartupをオフにします。 server.xml
ですべてのアプリケーションコンテキストを明示的に定義し、pathおよびdocBase属性の両方を指定します。すべてのTomcat自動デプロイメカニズムを無効にしているため、これを行う必要があります。Tomcatは、server.xml
でコンテキストが見つからない限り、アプリケーションをデプロイしません。
2番目の方法:アプリケーションを変更するには、Tomcatを停止して再起動する必要があります。
WARファイルを$CATALINA_BASE/webapps
の外部に配置します(二重展開を防ぐために外部にある必要があります)。 ROOT.xml
という名前のコンテキストファイルを$CATALINA_BASE/conf/
に配置します。このコンテキストファイルの単一の要素には、WARファイルの場所を指すdocBase属性が必要です。パス要素は設定しないでください。.xml
ファイルの名前(この場合はROOT.xml
)から派生します。詳細については、 Contextコンテナのドキュメント を参照してください。
Tomcat 6の<Context>
の<Host>
タグにserver.xml
タグを追加すると、問題が解決します。
path=""
emptyを使用する場合、http://localhost/first.do
のようなURLを使用できます。
コンテキストタグで属性docBase="E:\struts-ITRCbook\myStrutsbook"
およびreloadable="true"
を設定し、コンテキストタグを終了します。
次のようになります。
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="E:\struts-ITRCbook\myStrutsbook" reloadable="true">
</Context>
</Host>
これらの変更を加えたTomcat 7では、/
でmyAPP
および/ROOT
でROOT
にアクセスできます
<Context path="" docBase="myAPP"/>
<Context path="ROOT" docBase="ROOT"/>
上記をserver.xmlの<Host>
セクションに追加します
ROOTのデフォルトのアプリは通常Tomcatマネージャーです。これは便利な場合があるので、そのままにしておきたいと感じました。
そのため、私がmy app ROOTを作成し、TCmgrを保持する方法は次のようになりました。
rOOTを別の名前に変更しました
mv ROOT TCmgr
次に、ROOTがデフォルトにしたいアプリを指すシンボリックリンクを作成しました。
ln -s <your app> ROOT
私のために働いて、最も簡単なアプローチに見えました。
これをややハック的な方法で行うには:
Apache Tomcatのドキュメントによると、ROOT.xmlファイルを作成してアプリケーションを変更できます。詳細はこちらをご覧ください:
http://Tomcat.Apache.org/Tomcat-6.0-doc/config/context.html
「デフォルトのWebアプリケーションは、ROOT.xmlというファイルを使用して定義できます。」
別の解決策は、目的のデフォルトWebアプリにリダイレクトを送信するサーブレットを作成し、そのサーブレットをROOT WebアプリのすべてのURLにマップすることです。
package com.example.servlet;
import Java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class RedirectServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.sendRedirect("/myRootWebapp");
}
}
上記のクラスを追加しますCATALINA_BASE/webapps/ROOT/WEB-INF/classes/com/example/servlet
。
そして、以下を追加しますCATALINA_BASE/webapps/ROOT/WEB-INF/web.xml
:
<servlet>
<display-name>Redirect</display-name>
<servlet-name>Redirect</servlet-name>
<servlet-class>com.example.servlet.RedirectServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Redirect</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
また、必要に応じて、RedirectServletを簡単に変更してinitパラメータを受け入れ、ソースを変更せずにデフォルトのwebappを設定できるようにすることができます。
これを行うことでマイナスの影響があるかどうかはわかりませんが、これをテストしましたが、うまくいくようです。
context.xml構成は私にとっては機能しませんでした。 Tomcat 6.0.29は、appBase内にあるdocBaseについて不平を言っています。.. Tomcat 5では、これは実際に機能しました。
したがって、1つの解決策は、アプリケーションをROOTフォルダーに配置することです。
別の非常に簡単な解決策は、index.jspをROOTに配置して、次のようにアプリケーションにリダイレクトすることです。response.sendRedirect( "/ MyApplicationXy");
よろしく、1月
Tomcatのserver.xml
を構成し、Context要素を追加すると問題が発生します。彼は私の設定を使用したくないだけです: http://www.oreillynet.com/onjava/blog/2006/12/configuration_antipatterns_tom.html
Unix-like
システムを使用している場合:
mv $CATALINA_HOME/webapps/ROOT $CATALINA_HOME/webapps/___ROOT
ln -s $CATALINA_HOME/webapps/your_project $CATALINA_HOME/webapps/ROOT
できた.
私のために働く。
Tomcatルートアプリケーションを変更する究極の方法。 Tomcat 7および8でテスト済み。
Tomcat webappsディレクトリに移動します。
私のマシンの例:~/stack/Apache-Tomcat/webapps
ROOTフォルダーの名前変更、置換、または削除。バックアップ用のコピーの名前を変更するか、コピーを作成することをお勧めします。 ROOTの名前をRENAMED_ROOTに変更する例:
mv ROOT RENAMED_ROOT
アプリケーションと一緒にwarファイルをTomcat webappsディレクトリ(私のマシンの古いROOTフォルダであったディレクトリ:〜/ stack/Apache-Tomcat/webapps)に移動します
Warファイルの名前はROOT.warでなければなりません。必要に応じてアプリケーションの名前を変更します。yourApplicationName.war-> ROOT.war
ドキュメントを見てみましょう。ルートWebアプリケーションのパスをROOT(またはROOT.war)から変更する構成を指定する方法がありますが、Tomcat 5と6の間で変更されたようです。
これを見つけました:
http://www.nabble.com/Re:-Tomcat-6-and-ROOT-application...-td20017401.html
そのため、(ROOT.xml内の)ルートパスを変更することは可能ですが、少し壊れています。自動展開ディレクトリの外にWARを移動する必要があります。ファイルの名前を単にROOT.warに変更するだけでは実行可能なソリューションではない理由を尋ねた場合、注意してください。
非常に良い解決策ではありませんが、1つの方法は、ROOTアプリからYourWebAppにリダイレクトすることです。このためには、ROOT index.htmlを変更する必要があります。
<html>
<head>
<title>Redirecting to /YourWebApp</title>
</head>
<body onLoad="javascript:window.location='YourWebApp';">
</body>
</html>
OR
<html>
<head>
<title>Redirecting to /YourWebApp</title>
<meta http-equiv="refresh" content="0;url=YourWebApp" />
</head>
<body>
</body>
</html>
参照: http://staraphd.blogspot.com/2009/10/change-default-root-folder-in-Tomcat.html