Tomcatへのアプリケーションの配備(Deployment)
|
|
Tomcatへのアプリケーションの配備(Deployment)
レストランのアプリケーションを、試験環境から実際のTomcatの環境に配置してみよう。今回のアプリケーションは次のクラスで構成されている。
classファイル名 |
RestaurantMaster.class RestaurantChef.class RestaurantWaitress.class RestaurantMenu.class RestaurantMenuItem.class RestaurantMenuBusyFlag.class |
これらのファイルはサーブレット仕様書(2.2版)の9章に準拠して、次のディレクトリに置かれる。
tomcatHome\webapps\RestaurantCresc\WEB-INF\classes\
つまり、各アプリケーションはtomcatHome\webapps\ディレクトリ内に置かれ、この場合はtomcatHome\webapps\RestaurantCresc\がこのアプリケーションのホームディレクトリである。これはまたドキュメント・ルート(document root)とも呼ばれ、index.htmlファイルなどスタティックなドキュメントが置かれる。このディレクトリにWEB-INFという特別なディレクトリがあり、そのアプリケーションに関する殆どがここに収容される。
\WEB-INF\web.xml |
導入記述ファイル |
\WEB-INF\classes\* |
サーブレットやユーティリティのクラスで、エンジンのクラスローダがここからロードする |
\WEB-INF\lib\*.jar |
Javaアーカイブ・ファイルを収容。サーブレット、Beans、等のクラスを含む。このファイルは、エンジンのアプリケーション・ローダがロードして展開する。 |
それではまずエクスプローラを使って、tomcatHomeにRestaurantCrescというディレクトリを作り、更にその下にWEB-INF、WEB-INFの下にclassesというディレクトリを作ろう。次にclassesディレクトリに皆さんのツールを使って上記クラスファイルをエクスポートしよう。
次にディレクトリ上のサーブレットと要求パスとのマッピングをとらなければならない。最初にコンテキストのパスを「/RstaurantCresc」としよう。
パタン(pattern) |
サーブレット(servlet) |
/Dinner |
RestaurantWaitress |
/Master |
RestaurantMaster |
/Chef |
RestaurantChef |
そうするとweb.xmlファイルは次のようになる。
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"> <web-app> <servlet> <servlet-name> Waitress </servlet-name> <servlet-class> RestaurantWaitress </servlet-class> </servlet> <servlet> <servlet-name> Chef </servlet-name> <servlet-class> RestaurantChef </servlet-class> </servlet> <servlet> <servlet-name> Master </servlet-name> <servlet-class> RestaurantMaster </servlet-class> </servlet> <servlet-mapping> <servlet-name> Waitress </servlet-name> <url-pattern> /Dinner </url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name> Chef </servlet-name> <url-pattern> /Chef </url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name> Master </servlet-name> <url-pattern> /Master </url-pattern> </servlet-mapping> </web-app> |
これでこのアプリケーションの配備は終わりである。ディレクトリとマッピングについてお解り頂けたと思う。
なおこのドキュメント・ルートに次のようなindex.htmlファイルを置いておくと、http://localhost:8080/RestaurantCrescと入力するだけでウェイトレスのサーブレットが呼び出される。
<HTML><HEAD><META HTTP-EQUIV="refresh" CONTENT="0; URL=/RestaurantCresc/Dinner"></HED></HTML> |
こうすると、3つのサーブレットは次のようなURLから呼び出せるはずである。
なお、127.0.0.1というプライベート・ループバック・アドレスは、プライベート・アドレスのクラスによって異なる。/servletというパス(プレフィックス)が追加されても同じサーブレットがアクセスされるのは、エンジンの設定ファイル(server.xml)に次のような要求インターセプタの記述があり、これをそのまま活かしているためである(詳細は添付資料参照のこと)。
<RequestInterceptor className="org.apache.tomcat.request.InvokerInterceptor" debug="0" prefix="/servlet/"/> |
RstaurantCrescだけでRestaurantWaitressが呼び出されるのは、index.htmlファイルで再ロードさせているからである。