Javaの道 Javaに関する
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道 > Servlet・JSP > Servlet −5.初期化パラメータの取得
更新日:2006/6/20
Servlet−5.初期化パラメータの取得
このページでは、web.xmlで指定した初期化パラメータをServletプログラムの中で取得する方法について解説します。初期化パラメータにはDB接続する際のログインID、ログインパスワード、外部ファイルなどを指定します。これにより、これらの値をプログラム中にハードコーディングすることなく、値の変更があった際も容易に対応できるようになります。
Servletプログラム単位の初期化パラメータ
ここでは、Servletプログラム単位に指定する初期化パラメータについて説明します。Servletプログラム単位に指定された初期化パラメータは、他のServletプログラムから取得することはできません。Servletプログラム単位の初期化パラメータはweb.xmlの<servlet>タグ内の<init-param>タグで指定します。
【<init-param>タグのサブ要素】
要素
内容
要素数
param-name
パラメータ名を指定します。
1
param-value
パラメータ名に対するパラメータ値を指定します。
1
description
パラメータの説明を記載します。
0以上
Servletプログラムに初めてリクエストがあったときinitメソッドが呼び出されます。そのため、通常initメソッド内で初期化パラメータの取得を行います。Servletプログラム単位の初期化パラメータの取得には、ServletConfigインタフェースのメソッドを使用します。
【ServletConfigインタフェースのメソッド】
戻り型
メソッド
説明
String
getInitParameter(String)
引数に指定されたパラメータ名に対するパラメータ値を返します。パラメータ名がない場合は、Nullを返します。
Enumeration
getInitParameterNames( )
指定されているすべてのパラメータ名をEnumeration型で返します。パラメータ名がない場合は、空のEnumeration型のオブジェクトを返します。
ServletContext getServletContext( ) ServletContextのオブジェクトを返します。
String getServletName( ) 実行しているServletプログラム名を返します。
Servletプログラム単位の初期化パラメータの取得の例を記載します。
【web.xmlの例】
<servlet>
  <servlet-name>GetConfigServlet</servlet-name>
  <servlet-class>GetConfigServlet</servlet-class>
  <!-- (1)パラメータ名"id"とパラメータ値"java-id"を指定しています。 -->
  <init-param>
    <param-name>id</param-name>
    <param-value>java-id</param-value>
  </init-param>
  <!-- (2)パラメータ名"pass"とパラメータ値"java-pass"を指定しています。 -->
  <init-param>
    <param-name>pass</param-name>
    <param-value>java-pass</param-value>
  </init-param>
</servlet>
【Servletプログラムの例】
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class GetConfigServlet extends HttpServlet {
  public void init() {
    //(1)GenericServletクラスのgetServletConfigメソッドを使用し、
    //   ServletConfigオブジェクトを取得します。
    ServletConfig sc = getServletConfig();
    //(2)パラメータ名"id"のパラメータ値を取得しています。
    String id = sc.getInitParameter("id");
    //(3)パラメータ名"pass"のパラメータ値を取得しています。
    String pass = sc.getInitParameter("pass");

    --------------------------------
    --------------------------------

  }
}
コンテキスト単位の初期化パラメータ
ここでは、コンテキスト単位に指定する初期化パラメータについて説明します。コンテキストとは、一まとまりのwebアプリケーションのことを言います。Tomcatで言うとwebappsディレクトリ配下のwebアプリケーション毎のことを言います。コンテキスト単位に指定された初期化パラメータはそのコンテキストに属するすべてのServlet・JSPプログラムから取得することができます。コンテキスト単位の初期化パラメータはweb.xmlの<web-app>タグ内の<context-param>タグで指定します。
【<context-param>タグのサブ要素】
要素
内容
要素数
param-name
パラメータ名を指定します。
1
param-value
パラメータ名に対するパラメータ値を指定します。
1
description
パラメータの説明を記載します。
0以上
コンテキスト単位の初期化パラメータの取得には、ServletContextインタフェースのメソッドを使用します。
【ServletContextインタフェースのパラメータ取得関連のメソッド】
戻り型
メソッド
説明
String
getInitParameter(String)
引数に指定されたパラメータ名に対するパラメータ値を返します。パラメータ名がない場合は、Nullを返します。
Enumeration
getInitParameterNames( )
指定されているすべてのパラメータ名をEnumeration型で返します。パラメータ名がない場合は、空のEnumeration型のオブジェクトを返します。
コンテキスト単位の初期化パラメータの取得の例を記載します。
【web.xmlの例】
<web-app>
  <servlet>
    <servlet-name>GetContextServlet</servlet-name>
    <servlet-class>GetContextServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>GetContextServlet</servlet-name>
    <url-pattern>/GetContextServlet</url-pattern>
  </servlet-mapping>

  <!-- (1)パラメータ名"id"とパラメータ値"java-id"を指定しています。 -->
  <context-param>
    <param-name>id</param-name>
    <param-value>java-id</param-value>
  </context-param>

  <!-- (2)パラメータ名"pass"とパラメータ値"java-pass"を指定しています。 -->
  <context-param>
    <param-name>pass</param-name>
    <param-value>java-pass</param-value>
  </context-param>

  --------------------------------
  --------------------------------

</web-app>
【Servletプログラムの例】
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class GetContextServlet extends HttpServlet {
  public void init() {
    //(1)ServletConfigインタフェースのgetServletContextメソッドで、
    //   ServletContextオブジェクトを取得します。
    ServletContext scon = getServletConfig().getServletContext();
    //(2)パラメータ名"id"のパラメータ値を取得しています。
    String id = scon.getInitParameter("id");
    //(3)パラメータ名"pass"のパラメータ値を取得しています。
    String pass = scon.getInitParameter("pass");

    --------------------------------
    --------------------------------

  }
}



このページのトップへ
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道_CopyrightJavaの道