第13章 ディプロイメント デスクリプタ (Deployment
Descriptor)
ディプロイメント デスクリプタは、開発者、アセンブラ、ディプロイヤ間でのあるアプリケーションの要素と設定に関する情報を交わすものである。
13.1 ディプロイメント デスクリプタのエレメント (Deployment Descriptor Elements)
本ウェブ アプリケーション ディプロイメント デスクリプタ(コンテナへのアプリケーションの組込み記述書)には、以下のタイプの設定と導入の情報が存在する:
- ServletContext初期化パラメタ (ServletContext Init Parameters)
- セッションの設定(Session Configuration)
- Servlet / JSP定義 (Servlet / JSP Definitions)
- Servlet / JSPマッピング (Servlet / JSP Mappings)
- MIMEタイプ マッピング(Mime Type Mapping)
- ウェルカム ファイルのリスト(Welcome File list)
- エラー ページ(Erroe Pages)
- セキュリティ(Security)
これらのエレメントの詳細は、DTDコメントを参照のこと。
13.1.1 ディプロイメント デスクリプタのDOCTYPE (Deployment Descriptor DOCTYPE)
全ての有効なウェブ アプリケーション ディプロイメント デスクリプタは、以下のDOCTYPE宣言を含まねばならない:
<!DOCTYPE web-app PUBLIC “-//Sun
Microsystems, Inc.//DTD Web Application 2.2//EN” “http://java.sun.com/j2ee/dtds/web-app_2_2.dtd”>
13.2 DTD (DTD)
以下のDTDで、ウェブ アプリケーション ディプロイメント デスクリプタのXML文法を定義する。
<!--
web-appエレメントはウェブ アプリケーションのディプロイメント デスクリプタのルートである
-->
<!ELEMENT web-app (icon?, display-name?, description?, distributable?, context-param*, servlet*, servlet-mapping*, session-config?, mime-mapping*, welcome-file-list?, error-page*, taglib*, resource-ref*, security-constraint*, login-config?, security-role*, env-entry*, ejb-ref*)>
<!--
iconエレメントはsmall-iconとlarge-iconエレメントからなり、GUIツール内でそのウェブアプリケーションを代表させるために用いる小型及び大型のアイコンの場所を指定する。ツールは少なくともGIFとJPEGイメージを受理できること。
-->
<!ELEMENT icon (small-icon?,
large-icon?)>
<!--
small-iconエレメントには小さな(16×16ピクセル)アイコンのイメージを含むファイルのそのウェブ アプリケーション内の位置をいれる。
-->
<!ELEMENT small-icon (#PCDATA)>
<!--
large-iconエレメントには大きな(32×32ピクセル)アイコンのイメージを含むファイルのそのウェブ アプリケーション内の位置を入れる。
-->
<!ELEMENT large-icon (#PCDATA)>
<!--
display-nameエレメントにはGUIツールで表示されることを意図した短い名前を含める。
-->
<!ELEMENT display-name (#PCDATA)>
<!--
descriptionエレメントは、その親エレメントに関して記述したテキストを提供するために用いられる
-->
<!ELEMENT description (#PCDATA)>
<!--
distributableエレメントは、これがそのそのウェブ アプリケーションのディプロイメント デスクリプタに存在することにより、このウェブ アプリケーションが分散したサーブレット コンテナに導入されるべく適切にプログラムされていることを示す。
-->
<!ELEMENT distributable EMPTY)>
<!--
context-paramエレメントには、そのウェブ アプリケーションのサーブレット コンテキストの初期化パラメタの宣言を含める。
-->
<!ELEMENT context-param (param-name,
param-value, description?)>
<!--
param-nameエレメントには、パラメタの名前を入れる。
-->
<!ELEMENT param-name (#PCDATA)>
<!--
param-valueエレメントには、パラメタの値を入れる。
-->
<!ELEMENT param-value (#PCDATA)>
<!--
servletエレメントには、サーブレットの宣言データを含める。jsp-fileが指定され、load-on-startupエレメントが存在するときは、このJSPはあらかじめコンパイルされ、ロードされなければならない。
-->
<ELEMENT servlet (icon?, servlet-name, display-name?, description?, (servlet-class|jsp-file), init-param*, load-on-startup?, security-role-ref*)>
<!--
servlet-nameエレメントには、そのサーブレットのカノニカル名(公式名)を入れる。
-->
<!ELEMENT servlet-name (#PCDATA)>
<!--
servlet-classエレメントには、そのサーブレットの完全な公式クラス名(FQCN)を含める。
-->
<!ELEMENT servlet-class (#PCDATA)>
<!--
jsp-fileエレメントには、そのウェブ アプリケーション内のJSPファイルの完全なパスを含める。
-->
<!ELEMENT jsp-file (#PCDATA)>
<!--
init-paramエレメントには、そのサーブレットの初期化パラメタとしての名前/値のペアを含める。
-->
<!ELEMENT init-param (param-name, param-value, description?)>
<!--
load-on-startupエレメントは、このサーブレットが本ウェブ アプリケーションのスタートアップ時にロードされねばならないことを示す。これらのエレメントのオプション部分のコンテンツは正の整数で、このサーブレットがロードされる順番を示す。小さな番号ののほうが高い番号より先にロードされる。値が指定されていないとき、あるいは指定された値が正の整数でないときは、コンテナはスタートアップ シーケンスの際に何時でもロードできる自由を持つ。
-->
<!ELEMENT load-on-startup (#PCDATA)>
<!--
servlet-mappingエレメントは、サーブレットとURLパタンとのマッピングを指定する。
-->
<!ELEMENT servlet-mapping (servlet-name, url-pattern)>
<!--
url-patternエレメントには、そのマッピングのURLパタンを含める。
-->
<!ELEMENT url-pattern (#PCDATA)>
<!--
session-configエレメントには、のセッションのパラメタを定める。
-->
<!ELEMENT session-config (session-timeout?)>
<!--
session-timeoutエレメントは、本ウェブ アプリケーションで作られる全てのセッションのデフォルトのセッション タイムアウト インターバルを定める。指定するタイムアウト値は分を示す整数で記述のこと。
-->
<!ELEMENT session-timeout (#PCDATA)>
<!--
mime-mappingエレメントは、拡張子(extension)とMIMEタイプ(mime type)とのマッピングを指定する。
-->
<!ELEMENT mime-mapping (extension, mime-type)>
<!--
extensionエレメントは、拡張子を示す文字列を入れる。例えば:”txt”
-->
<!ELEMENT extension (#PCDATA)>
<!--
mime-typeエレメントには、指定するMIMEタイプを含める。例えば:”text/plain”
-->
<!ELEMENT mime-type (#PCDATA)>
<!--
welcome-file-listエレメントには、ウェルカムファイルのエレメントの順序付けされたリストを含める。
-->
<!ELEMENT welcome-file-list (welcome-file+)>
<!--
welcome-fileエレメントには、例えばindex.htmlのようなデフォルトのウェルカムファイルのファイル名を含める。
-->
<!ELEMENT welcome-file (#PCDATA)>
<!--
taglibエレメントは、JSPのタグ ライブラリを記述するのに用いる。
-->
<!ELEMENT taglib (taglib-uri, taglib-location)>
<!--
taglib-uriエレメントでは、web.xmlドキュメントの場所に相対的で、そのウェブ アプリケーションで使われるTAGライブラリを指定するURIを記述する。
-->
<!ELEMENT taglib-uri (#PCDATA)>
<!--
taglib-locationエレメントには、そのタグ ライブラリのタグ ライブラリ記述ファイル(Tag Library Description file)を求めるための場所(そのウェブ アプリケーションのルートに相対的な)を入れる。
-->
<!ELEMENT taglib-location (#PCDATA)>
<!--
error-pageエレメントには、エラーコードまたは例外のタイプとそのウェブ アプリケーションのリソースのパスとのマッピングを入れる。
-->
<!ELEMENT error-page ((error-code | exception-type), location)>
<!--
error-codeエレメントには、HTTPのエラーコード、例えば404、を含める。
-->
<!ELEMENT error-code (#PCDATA)>
<!--
exception-typeエレメントには、Javaの例外タイプの完全な公式クラス名(FQCN)を含める。
-->
<!ELEMENT exception-type (#PCDATA)>
<!--
locationエレメントには、そのウェブ アプリケーションのリソースの場所を含める。
-->
<!ELEMENT location (#PCDATA)>
<!--
resource-refエレメントには、そのウェブ アプリケーションの外部リソースへの参照の宣言を含める。
-->
<!ELEMENT resource-ref (description?, res-ref-name, res-type, res-auth)>
<!--
resource-ref-nameエレメントには、リソース ファクトリの参照名指定する。
-->
<!ELEMENT resource-ref-name (#PCDATA)>
<!--
res-typeエレメントには、データ リソースの(Javaクラス)タイプを規定する。
-->
<!ELEMENT res-type (#PCDATA)>
<!--
res-authエレメントは、そのアプリケーション コンポネント コードがリソースのサインオンをプログラムで実施するか、または、デプロイヤで供給されるプリンシプルのマッピング情報に基づきそのリソースへのサインオンをコンテナが実施するかを示す。CONTAINERかSERVLETのどちらかでなければならない。
-->
<!ELEMENT res-auth (#PCDATA)>
<!--
security-constraintエレメントは、ひとつまたはそれ以上のリソースのコレクションに対し、セキュリティ制約を結びつけるのに用いる。
-->
<!ELEMENT security-constraint (web-resource-collection+, auth-constraint?, user-data-constraint?)>
<!--
security-resource-collectionエレメントは、リソースとそれらのリソースに対するHTTPメソッドのサブセットを作り、それにひとつのセキュリティ制約を課すのに用いる。HTTPメソッドが指定されないときは、そのセキュリティ制約は全てのHTTPメソッドに適用される。
-->
<!ELEMENT web-resource-collection (web-resource-name, description?, url-pattern*, http-method*)>
<!--
web-resource-nameエレメントには、このウェブ リソース コレクションの名前を入れる。
-->
<!ELEMENT web-resource-name (#PCDATA)>
<!--
http-methodエレメントには、HTTPのメソッド(GET | POST | …)を入れる。
-->
<!ELEMENT http-method (#PCDATA)>
<!--
user-data-constraintエレメントは、クライアントとコンテナ間のデータ通信がどのように保護さるべきかを示すのに用いる。
-->
<!ELEMENT user-data-constraint (description?, transport-guarantee)>
<!--
transport-guaranteeエレメントは、クライアントとサーバ間の通信がNONE、INTEGRALあるいはCONFIDENTIALのいづれであるかを指定する。NONEはそのアプリケーションがトランスポートの保証を必要としないことを意味する。INTERGALの値は、そのアプリケーションがクライアントとサーバ間のデータ通信がそれが伝達される間に変更を加えられないような方法で行うことを要求していることを意味する。CONFIDENTIALは、伝送中に他者からそのコンテンツを覗かれることを防止する方法でデータが通信されることを要求していることを意味する。ほとんどの場合、INTEGRALまたはCONFIDENTIALフラグが存在すると、それはSSLを要求していることを示すことになろう。
-->
<!ELEMENT transport-guarantee (#PCDATA)>
<!--
auth-constraintエレメントは、このリソースのコレクションへのアクセスが許可されるべきユーザのロールを示す。ここで用いられるロールはsecurity-role-refエレメントに現れていなければならない。
-->
<!ELEMENT auth-constraint (description?, role-name*)>
<!--
role-nameエレメントには、セキュリティ ロールの名前を入れる。
-->
<!ELEMENT role-name (#PCDATA)>
<!--
login-configエレメントには、使用すべき認証法、本アプリケーションで使われるべきレルム、及びフォームのログインのメカニズムで必要とする属性を設定するのに用いられる。
-->
<!ELEMENT login-config (auth-method?, realm-name?, form-login-config?)>
<!--
realm-nameエレメントでは、HTTP基本認証で用いるレルム名を指定する。
-->
<!ELEMENT realm-name (#PCDATA)>
<!--
form-login-configエレメントは、フォーム ベースのログインで使うべきログインとエラーのページを指定する。フォーム ベースの認証が使われないときは、これらの要素は無視される。
-->
<!ELEMENT form-login-config (form-login-page, form-error-page)>
<!--
form-login-pageエレメントは、ウェブ アプリケーションにおいて、ログインに使えるページの場所を指定する。
-->
<!ELEMENT form-login-page (#PCDATA)>
<!--
form-error-pageエレメントは、ウェブ アプリケーションにおいて、ログインに失敗したときに表示するエラー ページの場所を指定する。
-->
<!ELEMENT form-error-page (#PCDATA)>
<!--
auth-methodエレメントは、このウェブ アプリケーションの認証メカニズムを設定するのに用いる。認証の制約で保護されたウェブ リソースへのアクセスを取得する前提条件として、ユーザはこれで設定された認証メカニズムで認証されねばならない。このエレメントとして有効な値は”BASIC”、”DIGEST”、”FORM”または”CLIENT-CERT”である。
-->
<!ELEMENT auth-method (#PCDATA)>
<!--
security-roleエレメントには、このウェブ アプリケーションに置かれたsecurity-constraintsのなかで使われるセキュリティ ロールの宣言を入れる。
-->
<!ELEMENT sequrity-role (description?, role-name)>
<!--
role-nameエレメントにはロールの名前を入れる。このエレメントは空でない文字列を含んでいなければならない。
-->
<!ELEMENT sequrity-role-ref (description?, role-name, role-link)>
<!--
role-linkエレメントは、セキュリティ ロールの参照を指定したセキュリティ ロールにリンクさせるのに使う。role-linkエレメントは、security-roleエレメントで指定したセキュリティ ロールのひとつの名前が入らねばならない。
-->
<!ELEMENT role-link (#PCDATA)>
<!--
env-entryエレメントには、アプリケーションの環境エントリの宣言を入れる。このエレメントはJ2EE対応のサーブレット コンテナで必要とされる。
-->
<!ELEMENT env-entry (description?, env-entry-nane?, env-entry-value?, env-entry-type)>
<!--
env-entry-naneエレメントは、アプリケーションの環境エントリの名前を入れる。
-->
<!ELEMENT env-entry-nane (#PCDATA)>
<!--
env-entry-valueエレメントは、アプリケーションの環境エントリの値を入れる。
-->
<!ELEMENT env-entry-value (#PCDATA)>
<!--
env-entry-typeエレメントは、環境エントリ値の完全な形式のJavaのタイプで、そのアプリケーションのコードが予期しているものである。以下のものがenv-entry-typeとして有効である: java.lang.Boolean, java.lang.String, java.lang.Integer, java.lang.Double, java.lang.Float.
-->
<!ELEMENT env-entry-type (#PCDATA)>
<!--
ejb-refエレメントは、エンタープライズ ビーンへの参照を宣言するのに用いる。
-->
<!ELEMENT ejb-ref (description?, ejb-ref-nane, ejb-ref-type, home, remote, jb-link?)>
<!--
ejb-ref-naneエレメントは、EJB参照の名前を入れる。これはエンタープライズ ビーンへの参照をサーブレット コードが取得するときに用いるJNDI名である。
-->
<!ELEMENT ejb-ref-nane (#PCDATA)>
<!--
ejb-ref-typeエレメントは、参照されるEJBの予期されるJavaのクラスのタイプを入れる。
-->
<!ELEMENT ejb-ref-type (#PCDATA)>
<!--
ejb-homeエレメントは、EJBのhomeインターフェイスの正規の形式の名前を入れる。
-->
<!ELEMENT home (#PCDATA)>
<!--
ejb-remoteエレメントは、EJBのremoteインターフェイスの正規の形式の名前を入れる。
-->
<!ELEMENT remote (#PCDATA)>
<!--
ejb-linkエレメントは、ejb-refエレメントで、あるEJB参照がそれを包含しているJava2エンタープライズ エディション(J2EE: Java2 Enterprize Edition)アプリケーション パッケージにリンクしていることを規定するのに用いられる。ejb-linkエレメントの値は、J2EEアプリケーション パッケージにあるEJBのejb-nameで泣ければならない。
-->
<!ELEMENT ejb-link (#PCDATA)>
<!--
IDのメカニズムにより、デプロイメント デスクリプタのエレメントへのツール固有の参照を容易にするものである。これにより、更なる追加のデプロイメントの情報(即ち標準のデプロイメント デスクリプタ情報を超えた情報)をを生成するツールが、非標準の情報を分離されたファイルに蓄積し、そしてこれらツール固有のファイルから標準のウェブ アプリケーション デプロイメント デスクリプタにある情報への参照を容易にする。
-->
<!ATTLIST web-app id ID #IMPLIED>
<!ATTLIST icon id ID #IMPLIED>
<!ATTLIST small-icon id ID #IMPLIED>
<!ATTLIST large-icon id ID #IMPLIED>
<!ATTLIST display-name id ID #IMPLIED>
<!ATTLIST description id ID #IMPLIED>
<!ATTLIST distributable id ID #IMPLIED>
<!ATTLIST context-param id ID #IMPLIED>
<!ATTLIST param-name id ID #IMPLIED>
<!ATTLIST param-value id ID #IMPLIED>
<!ATTLIST servlet id ID #IMPLIED>
<!ATTLIST servlet-name id ID #IMPLIED>
<!ATTLIST servlet-class id ID #IMPLIED>
<!ATTLIST jsp-file id ID #IMPLIED>
<!ATTLIST init-param id ID #IMPLIED>
<!ATTLIST load-on-startup id ID
#IMPLIED>
<!ATTLIST servlet-mapping id ID
#IMPLIED>
<!ATTLIST url-pattern id ID #IMPLIED>
<!ATTLIST session-config id ID
#IMPLIED>
<!ATTLIST session-timeout id ID
#IMPLIED>
<!ATTLIST mime-mapping id ID #IMPLIED>
<!ATTLIST extension id ID #IMPLIED>
<!ATTLIST mime-type id ID #IMPLIED>
<!ATTLIST welcome-file-list id ID #IMPLIED>
<!ATTLIST welcome-file id ID #IMPLIED>
<!ATTLIST taglib id ID #IMPLIED>
<!ATTLIST taglib-uri id ID #IMPLIED>
<!ATTLIST taglib-location id ID
#IMPLIED>
<!ATTLIST error-page id ID #IMPLIED>
<!ATTLIST error-code id ID #IMPLIED>
<!ATTLIST exception-type id ID
#IMPLIED>
<!ATTLIST location id ID #IMPLIED>
<!ATTLIST resource-ref id ID #IMPLIED>
<!ATTLIST res-ref-name id ID #IMPLIED>
<!ATTLIST res-type id ID #IMPLIED>
<!ATTLIST res-auth id ID #IMPLIED>
<!ATTLIST security-constraint id ID
#IMPLIED>
<!ATTLIST web-resource-collection id ID
#IMPLIED>
<!ATTLIST web-resource-name id ID
#IMPLIED>
<!ATTLIST http-method id ID #IMPLIED>
<!ATTLIST user-data-constraint id ID
#IMPLIED>
<!ATTLIST transport-guarantee id ID
#IMPLIED>
<!ATTLIST auth-constraint id ID
#IMPLIED>
<!ATTLIST role-name id ID #IMPLIED>
<!ATTLIST login-config id ID #IMPLIED>
<!ATTLIST realm-name id ID #IMPLIED>
<!ATTLIST form-login-config id ID
#IMPLIED>
<!ATTLIST form-login-page id ID
#IMPLIED>
<!ATTLIST form-error-page id ID
#IMPLIED>
<!ATTLIST auth-method id ID #IMPLIED>
<!ATTLIST security-role id ID #IMPLIED>
<!ATTLIST security-role-ref id ID
#IMPLIED>
<!ATTLIST role-link id ID #IMPLIED>
<!ATTLIST env-entry id ID #IMPLIED>
<!ATTLIST env-entry-name id ID
#IMPLIED>
<!ATTLIST env-entry-value id ID #IMPLIED>
<!ATTLIST env-entry-type id ID
#IMPLIED>
<!ATTLIST ejb-ref id ID #IMPLIED>
<!ATTLIST ejb-ref-name id ID #IMPLIED>
<!ATTLIST ejb-ref-type id ID #IMPLIED>
<!ATTLIST home id ID #IMPLIED>
<!ATTLIST remote id ID #IMPLIED>
<!ATTLIST ejb-link id ID #IMPLIED>
13.3 事例 (Examples)
以下の事例で上記DTDに記載された定義の使用法を示す。
13.3.1 ベーシックな事例 (Basic Example)
<!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>
<display-name>A Simple Application</display-name>
<context-param>
<param-name>Webmaster</param-name>
<param-value>webmaster@mycorp.com</param-value>
</context-param>
<servlet>
<servlet-name>catalog</servlet-name>
<servlet-class>com.mycorp.CatalogServlet</servlet-class>
<init-param>
<param-name>catalog</param-name>
<param-value>Sptiong</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>catalog</servlet-name>
<url-pattern>/catalog/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<mime-mapping>
<extension>pdf</extension>
<mime-type>application/pdf</mime-type>
</mime-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-fille>
</welcome-file-list>
<error-page>
<error-code>404</error_code>
<location>404.html</location>
</error-page>
</web-app>
13.3.2
セキュリティ事例 (An Example of
Security)
<!DOCTYPE web-app PUBLIC “-//Sun
Microsystems, Inc.//DTD Web Application 2.2//EN”
http://java.sun.com/j2ee/dtds/web-appweb_2_2.dtd>
<web-app>
<display-name>A Secure Application</display-name>
<security-role>
<role-name>manager</role-name>
</security-role>
<servlet>
<servlet-name>catalog</servlet-name>
<servlet-class>com.mycorp.CatalogServlet</servlet-class>
<init-param>
<param-name>catalog</param-name>
<param-value>Spring</param-value>
</init-param>
<security-role-ref>
<role-name>MGR</role-name>ß
role name used in code à
<role-link>manager</role-link>
</security-role-ref>
</servlet>
<servlet-mapping>
<servlet-name>catalog</servlet-name>
<url-pattern>/catalog/*</url-pattern>
</servlet-mapping>
<security-constraint>
<web-resource-collection>
<web-resource-name>SalesInfo</web-resource-name>
<url-pattern>/salesinfo/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
<auth-constraint>
<role-name>manager</role-name>
</auth-constraint>
</web-resource-collection>
</security-constraint>
</web-app>