2

組み込みTomcatサーバーのセットアップに苦労しています。私のセットアップはTomcatの規則とは異なります。これは、index.htmlを含む静的ファイルがあるsomePath/wwwディレクトリがあるためです。また、WEB-INFも、web.xmlもありません。

localhost:8080 /をリクエストするときにindex.htmlを開くには、Tomcatが必要です。これは機能せず、ページが見つからないというエラーが表示されます。それでも、localhost:8080 / index.htmlをリクエストすると、リクエストは関連するファイルを返します。現在試行している構成を以下に示します。

tomcat.addWebapp("/", "somePath/www");
Context ctx = tomcat.addContext("/", "somePath/www");
Wrapper defaultServlet = ctx.createWrapper();
defaultServlet.setName("default");
defaultServlet.setServletClass("org.apache.catalina.servlets.DefaultServlet");
defaultServlet.addInitParameter("debug", "0");
defaultServlet.addInitParameter("listings", "false");
defaultServlet.setLoadOnStartup(1);
ctx.addChild(defaultServlet);
ctx.addServletMapping("/*", "default");

一方、次の設定の場合:

tomcat.addWebapp("/MY_APP", "somePath/www");

localhost:8080 /MY_APP/も正常に機能します。

URLが単なるコンテキストルートである場合に、Tomcatロードindex.htmlを任意のディレクトリに配置する方法はありますか?また、ディレクトリ構造を変更しないソリューションも必要です。ありがとう!

4

1 に答える 1

3

tomcatがindex.htmlコンテキストパス(http://localhost:8080/)のみを使用してリクエストを処理するには、次の変更を適用する必要があります。

  • "index.html"を使用して、コンテキストのウェルカムファイルのリストに追加しますContext.addWelcomeFile()。ファイルは、コンテキストのベースディレクトリを基準にして検索されます。相対パスを使用することもできます。"static/index.html"
  • "/"サーブレットのサーブレットマッピングでパターンを使用し"default"ます。その場合にのみ、Tomcatはウェルカムファイルを検討し、デフォルトのサーブレットを呼び出す前にリクエストパスを書き換えます。

これらの変更を適用すると、コードは次のようになります。

Context ctx = tomcat.addContext("/", "somePath/www");

defaultServlet = ctx.createWrapper();
defaultServlet.setName("default");
defaultServlet.setServletClass("org.apache.catalina.servlets.DefaultServlet");
defaultServlet.addInitParameter("debug", "0");
defaultServlet.addInitParameter("listings", "false");
defaultServlet.setLoadOnStartup(1);

ctx.addChild(defaultServlet);
ctx.addServletMapping("/", "default");
ctx.addWelcomeFile("index.html");

これは、Tomcatが呼び出すときにコンテキストを構成する方法に似ているtomcat.addWebapp()ため、次のように使用できます。

Context ctx = tomcat.addWebapp("/", "somePath/www");
于 2013-03-05T22:53:12.223 に答える