HttpServlet クラスと GenericServlet クラスには、情報にアクセスするメソッドおよびメッセージを記録するメソッドがあります。次の表で、これらのメソッドについて説明します。
ServletConfig オブジェクトを使用して各サーブレット定義から、またアプリケーション内のすべてのサーブレットのパラメータを提供する ServletContext から初期化パラメータを取得できます。
サーブレット特有の初期化パラメータを取得するには、次の例に示すように、ServletConfig オブジェクトの getInitParameterNames メソッドと getInitParameter メソッドを使用します。
...
ServletConfig config = getServletConfig();
Enumeration eParmNames = config.getInitParameterNames();
while (eParmNames.hasMoreElements()) {
String parm = (String) eParmNames.nextElement();
out.println(" " + parm + ":" + config.getInitParameter(parm) +
"<br>");
}
...
サーブレット特有の初期化パラメータは、次の例に示すように、Web アプリケーションのデプロイメントディスクリプタの servlet 定義で設定します。
<web-app>
...
<servlet>
<servlet-name>ConfigParams</servlet-name>
<servlet-class>ConfigParams</servlet-class>
<init-param>
<param-name>datasourcename</param-name>
<param-value>lightgoldenrodyellow</param-value>
</init-param>
</servlet>
...
</web-app>
詳細については、 「ServletConfig オブジェクトの使用」 を参照してください。
アプリケーション内のすべてのサーブレットが共有する初期化パラメータを取得するには、次の例に示すように、ServletContext オブジェクトの getInitParameter メソッドと getInitParameterNames メソッドを使用します。
ServletContext context = this.getServletContext();
Enumeration parmEnum = context.getInitParameterNames();
if (parmEnum.hasMoreElements()) {
out.println("<h2>ServletContext Init Parameters</h2>");
}
while (parmEnum.hasMoreElements()) {
String name = (String)parmEnum.nextElement();
out.println("<b>"+name+": </b>");
out.println(context.getInitParameter(name) + "<br>");
}
...
次の例に示すように、アプリケーション全体の初期化パラメータは、Web アプリケーションのデプロイメントディスクリプタで、servlet 定義の外側で設定します。
<web-app>
... <context-param> <param-name>datasourcename</param-name> <param-value>fred</param-value> </context-param> ... </web-app>
ServletContext オブジェクトを使用すると、アプリケーション情報を保管したり、アプリケーションのさまざまなコンポーネント間で情報を共有したりすることができます。
たとえば、アプリケーションが複数のサーブレット (Java で書かれたものや JSP として書かれたもの)、HTML タグ、およびデータベースで構成されているとします。これらのアプリケーションコンポーネント間で情報をやり取りするには、アプリケーションコンテキストを使用して、その情報を保管したり、取り出したりすることができます。コンテキストオブジェクトを通じて使用できる情報には、次のものがあります。
また、アプリケーションコンテキストには、Web サーバへのアプリケーションの実装に伴って、アプリケーション情報が保管されます。この情報には、アプリケーションコンポーネントのファイルの位置、サーブレットの初期化パラメータ、バージョン情報などの、アプリケーション特有の情報が含まれます。
次の方法で、サーブレットや JSP のアプリケーション情報にアクセスできます。
javax.servlet.ServletContext オブジェクトを使用します。
ServletContext オブジェクトを使用して、アプリケーションに関する情報を保存したり、次の環境情報にアクセスできます。
サーブレットは getServletContext メソッドを使用して ServletContext オブジェクトのリファレンスを取得します。
次の例では、いくつかのサーブレットコンテキスト情報を表示します。
...
ServletContext scntxt = this.getServletContext();
out.println("サーバ情報:"+ scntxt.getServerInfo() + "<br>");
int majorVersion = scntxt.getMajorVersion();
int minorVersion = scntxt.getMinorVersion();
out.println("メジャーバージョン:" + majorVersion + "<br>");
out.println("マイナーバージョン:" + minorVersion + "<br>");
java.util.Enumeration parmEnum = scntxt.getInitParameterNames();
if (parmEnum.hasMoreElements()) {
out.println("<h2>ServletContext Parameters</h2>");
}
while (parmEnum.hasMoreElements()) {
String name = (String)parmEnum.nextElement();
out.println("<b>"+name+": </b>");
out.println(scntxt.getInitParameter(name) + "<br>");
}
// ServletContext 属性
java.util.Enumeration attrEnum = scntxt.getAttributeNames();
if (attrEnum.hasMoreElements()) {
out.println("<h2>ServletContext Attributes</h2>");
}
while (attrEnum.hasMoreElements()) {
// 常に属性を適切なクラスにキャストします。
String attrName = (String)attrEnum.nextElement();
out.println("<b>" + attrName + ": </b>");
out.println(scntxt.getAttribute(attrName) + "<br>");
}
// サーブレットの実際のパスを取得します。
String path = req.getServletPath();
out.println("<b>サーブレットのフルパス:</b>");
out.println(scntxt.getRealPath(path) + "<br>");
// ServletContext のログを記録します。
Date now = new Date();
scntxt.log("Testing ServletContext:" + now);
...
サンプルサーブレットを表示するには、samples JRun サーバを起動し、ブラウザで http://localhost:8200/techniques を開きます。
JRun は、初期化時にサーブレットに設定情報を渡します。設定情報には、初期化パラメータを示す名前/値のペア、およびサーブレットが実行されるコンテキストを示す ServletContext オブジェクトが含まれます。
サーブレットは getServletConfig メソッドを使用して ServletConfig オブジェクトへのリファレンスを取得します。次に、ServletConfig オブジェクトを使用して初期化パラメータにアクセスできます。
次の方法で、サーブレットや JSP の設定情報にアクセスできます。
javax.servlet.ServletConfig オブジェクトを使用します。
次の例では、getServletConfig メソッドを使用して、サーブレットの init メソッド内の ServletConfig オブジェクトを取得します。
...
public void init(ServletConfig config) throws ServletException {
super.init(config);
try {
bgcolor = config.getInitParameter("bgcolor");
System.out.println("bgcolor:" + bgcolor);
} catch (Exception e) {
System.out.println("error:" + e.toString());
}
}
...
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException, ServletException {
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
out.println("<html><head><title>Servlet Config</title>");
out.println("</head><body bgcolor=¥"" + bgcolor + "¥">");
out.println("<h1>Servlet Config</h1>");
out.println("</body></html>");
}
...
メモ: init メソッドが再び呼び出されるように JRun を再起動する必要があります。このメソッドはサーバの起動時に 1 回だけ呼び出されます。
次の web.xml ファイルの抜粋では、初期化パラメータを設定します。
<servlet>
<servlet-name>GetServletConfigInfo</servlet-name>
<servlet-class>GetServletConfigInfo</servlet-class>
<init-param>
<param-name>bgcolor</param-name>
<param-value>lightgoldenrodyellow</param-value>
</init-param>
</servlet>
サンプルサーブレットを表示するには、samples JRun サーバを起動し、ブラウザで http://localhost:8200/techniques を開きます。
log メソッドを使用して、プログラマが指定したメッセージを、サーブレットのホストになっている JRun サーバのログファイルに書き込むことができます。
メモ: JRun では、記録されるログ情報の量は自動的に変わります。ログファイル設定の詳細については、『JRun 管理者ガイド』または JMC を参照してください。
HttpSession thisSession = req.getSession();
String userName = (String)thisSession.getAttribute("name");
if(userName != null) {
out.println("<h2> ようこそ、" + userName + " さん</h2>");
// ロギング用の情報を準備
// この例では、ユーザー名と IP アドレスをログに記録します。
String logMsg = userName + ", " + req.getRemoteAddr();
log(logMsg);
}
他の Java アプリケーションと同様に、System オブジェクトを呼び出してプロパティを取得できます。これにより、ユーザーの言語、タイムゾーン、地域、ファイルセパレータなど Web アプリケーションをプラットフォーム独立にするために役立つ多くのプロパティにアクセスできます。これらのプロパティによって、JRun が使用するいくつかのサービスにもアクセスでき、JVM が使用するネーミングファクトリ、ディレクトリ構造、クラスパスを識別できます。
次の例では、すべての System プロパティを表にリストし、それから user.region プロパティにアクセスして JRun サーバのロケーションに関する情報をクライアントに提供します。
...
Properties sysprops = System.getProperties();
...
out.println("<TABLE>");
Enumeration enum = sysprops.propertyNames() ;
while (enum.hasMoreElements()) {
out.println("<TR><TD>");
String key = (String) enum.nextElement();
out.println(key + "</TD><TD>" + sysprops.getProperty(key) +
"</TD></TR>");
}
out.println("</TABLE>");
...
String region = sysprops.getProperty("user.region");
out.println("<HR>このサーバがホストされている地域:<B>" + region + "</B>");
...
サンプルサーブレットを表示するには、samples JRun サーバを起動し、ブラウザで http://localhost:8200/techniques を開きます。