web.xmlについて

このファイルは、HTMLが設置してあるディレクトリのWEB-INFディレクトリの中にあります。

  1. 外部から呼び出すサーブレットクラスの定義
  2. 定義されたサーブレットクラスを呼び出すためのURLの定義
  3. サーブレットで定義する各種パラメーターの定義
を目的とした非常に重要なファイルです。特に、1,2については必須事項です。

注意事項
Eclipseでは、Dynamic Web Applicationが有効になっていると、Servletファイル作成時に自動的に上記の内容を記述してくれます。有効になっていない場合は、自分で記述しなければいけません。
また、Dynamic Web Applicationが有効になっている場合でも、サーブレットファイルを削除する場合は、該当部分の記述を自分で削除する必要があります。

サーブレットのクラスとURLの定義
書き方は下記のとおりです。
<servlet>
  <servlet-name>greetServlet</servlet-name>
  <servlet-class>org.ochilab.testservlet.server.GreetingServiceImpl</servlet-class>
</servlet>
  <servlet-mapping>
  <servlet-name>greetServlet</servlet-name>
  <url-pattern>/testservlet/greet</url-pattern>
</servlet-mapping>

上記の意味は、
  • org.ochilab.testservlet.server.GreetingServiceImplというクラスをgreetServletという名前にする
  • greetServletを/testservlet/greetというURLで呼び出せるようにする
ということになります。この記述が漏れているとサーブレットは動きません。この記述はIDEが自動記述してくれるものですが、場合によってはしない時もあるので自分で意味を理解してかけるようになっておくことを勧めます。


パラメーターの設定
ここは中級技なので読み飛ばしてもいいです。

(1)Servlet単位で定義する
web.xmlファイルのservletタグ内にinit-paramタグを記述することで,サーブレットに渡すことができる初期変数を管理することができます.
<web-app>
<servlet>
<servlet-name>
counter
</servlet-name>
<servlet-class>
CounterServlet
</servlet-class>
<init-param>
<param-name>
ini
</param-name>
<param-value>
10
</param-value>
</init-param>
</servlet>
</web-app>

この場合,iniという変数の値が,10であるという意味になります.で,呼び出し方は次のとおりです.
public java.lang.String getInitParameter(java.lang.String name)

このメソッドでの戻り値はかならず,String型です.注意してください.

(2)アプリケーション単位で定義する
web-appの階下にcontext-paramタグを記述することで,サーブレットに渡すことができる初期変数を管理することができます.
<web-app>
 <context-param>
  <param-name>Param1</param-name>
  <param-value>Value1</param-value>
 </context-param>
 <context-param>
  <param-name>Param2</param-name>
  <param-value>Value2</param-value>
 </context-param>
 <context-param>
  <param-name>Param3</param-name>
  <param-value>Value3</param-value>
 </context-param>
</web-app>

呼び出し方は下記の通り
public java.lang.String getServletContext().getInitParameterNames(java.lang.String name)

このメソッドでの戻り値はかならず,String型です.注意してください.

ん?いまいち利用価値がわからない?なんて人がいるかもしれませんね.具体的にいうと,データベースの接続情報等はこの方法で管理した方がのぞましいで す.データベースのドライバとか,接続のURIというのは環境に依存します.で,プログラムに直接書き込んでおくと,それらを書き直してコンパイルしなお す必要がでてきます.しかし,このような変数で管理しておけば,環境に合わせて web.xmlファイルを書き換えるだけで,動作することができます.

Comments