Section2 - Webアプリケーションの配備

2.1 WebアプリケーションとWebアーカイブファイルの構造の記述。 また、下記のファイルを格納するディレクトリ名称を記述。

Webアプリケーションは以下のようにディレクトリ構造に配置します。
myappはWebアプリケーションのルートです。
myapp/
      (コンテンツファイル)*
      WEB-INF/
              web.xml    デプロイメントディスクリプタ
              classes/   クラスパスに含めるclass
              lib/       クラスパスに含めるjar

基本

web.xmlがWebアプリケーションの設定ファイルです。
classesには.classファイルをクラスのパッケージ構造で配置します。
libにはクラスパスに含めたいjarファイルを配置します。

WEB-INFとコンテンツファイル

コンテンツファイルの場所には.html、.jsp、.gifなどを配置します。
WEB-INFの外側は、デフォルト設定では、クライアントから直接アクセス可能です。
WEB-INF内のファイルへはクライアントから直接アクセスできません。
ただし、サーブレットなどからforward、includeすることは可能です。

2.2 以下のweb.xmlの目的もしくは機能の説明と名称を合致させる

web.xmlの基本的な要素を使った例を示します。
<servlet>
  <servlet-name>Hoge</servlet-name>
  <servlet-class>hoge.HogeServlet</servlet-class>
  <init-param>
    <param-name>key</param-name>
    <param-value>value</param-value>
  </init-param>
</servlet>

<servlet-mapping>
  <servlet-name>Hoge</servlet-name>
  <url-pattern>/hoge</url-pattern>
</servlet-mapping>

servlet要素のDTD

<!ELEMENT servlet (icon?, servlet-name, display-name?, description?,
(servlet-class|jsp-file), init-param*, load-on-startup?, run-as?, security-role-ref*)>

serlet-mapping要素のDTD

<!ELEMENT servlet-mapping (servlet-name, url-pattern)>

初期パラメータの取得

初期パラメータの取得は通常、HttpServletのinit()メソッドで行います。
引数なしのinit()で、
public void init(){
  ServletConfig config = getServletConfig();
  String value = config.getInitParameter("key");
  //String value = getInitParameter("key");//も可
}
あるいはinit(ServletConfig config)で行います。
public void init(ServletConfig config){
  super.init();//←これは必須
  String value = config.getInitParameter("key");
}
引数アリの方は、super.init()を呼ぶのが必須です。
super.init()を忘れたために数時間を無駄にしたサーブレットプログラマが 全世界に1億人はいると思われます。恨むならサーブレットAPIの設計者を恨みましょう。

URLマッピング

<url-mapping>ではWebアプリケーションのルートからのパスを指定します。 ここでは単一のURLも指定できますが、正規表現(的なもの)も使えます。 以下では、すべての.doというURLでHogeサーブレットが呼ばれます。 "/login.do"でも、 "/jsp/entry/register.do"でも Hogeサーブレットが呼ばれるわけです。
<servlet-mapping>
  <servlet-name>Hoge</servlet-name>
  <url-pattern>*.do</url-pattern>
</servlet-mapping>


ここでは、これだけの要素ですが、後でたくさんの要素が出てきます。 web.xmlについては、要素の名前と意味、順番について、 ある程度把握しておく必要があると思います。

とりあえずは、web.xmlは、
・WebアプリケーションのWEB-INF直下に置く
・要素には順番がある
ということは覚えておきましょう。
web.xmlの見方についてはDTDのキホンと、
概要ページのweb.xmlリファレンスのリンク先をご覧ください。