今回もJSP 1.2の暗黙オブジェクトについて解説します。前回「JSPの基本「暗黙オブジェクト」を使う」では本連載で紹介する予定の7つの暗黙オブジェクトのうち、3つまでを紹介しました。今回は下表のapplicationオブジェクト以降を解説します(*のものは除く)。
暗黙オブジェクト | 概要 |
---|---|
out | コンテンツを出力する手段を提供 |
request | リクエスト(要求)情報にアクセスする手段を提供 |
session | セッション内で共有可能な情報を管理 |
application | コンテナ単位に生成され、ユーザー間で共有可能な情報を管理 |
response | レスポンス(応答)情報を制御する手段を提供 |
exception | JSPページ内で発生した例外(エラー)情報を管理 |
config | 初期化パラメータにアクセスする手段を提供 |
page * | JSPページそのもの(JSPページ内で使用することはほとんどありません) |
pageContext * | 各暗黙オブジェクトにアクセスする手段を提供(JSPページ内で使用することはほとんどありません) |
sessionオブジェクトがユーザー単位の共通情報を管理するものであったのに対し、applicationオブジェクトはアプリケーション単位の共通情報を管理します。つまり、applicationオブジェクトを使用することで、複数ユーザー間で共通して使用する情報を管理することが可能です。
例えば、以下の例ではapplicationオブジェクトを介して、簡単なアクセスカウンタを作成します。ファイルやデータベースにデータを格納するわけではありませんので、コンテナ(Tomcat)を再起動させたらデータはクリアされてしまいますが、コンテナが稼働している間は情報が保持されることを確認してみてください。
<%@ page contentType="text/html;charset=Shift_JIS" %> <% String strCnt=(String)(application.getAttribute("cnt")); if(strCnt==null){ strCnt="1"; }else{ strCnt=Integer.toString(Integer.parseInt(strCnt)+1); } application.setAttribute("cnt",strCnt); %> <html> <head> <title>簡易アクセスカウンタ(applicationオブジェクト)</title> </head> <body> 現在のアクセス数は<%=strCnt%>です。 </body> </html>
getAttributeメソッドは指定されたアプリケーション情報(属性)を取得します。ここでは、アクセスカウント数を格納したアプリケーション属性「cnt」を取得し、null(空)である場合には初期値として1を、そうでない場合にはカウンタに1を加算したものをセットします(setAttributeメソッド)。
なお、setAttributeメソッドは属性値としてint型のようなプリミティブ型(クラスでない基本データ型)は受け取ることができない点に注意してください。ここでは、いったんカウンタ値をStringオブジェクトに変換してからセットしています。
JSPでは、アプリケーションルートの配下に「/WEB-INF/web.xml」(「配備記述子」または「デプロイメント・ディスクリプタ」ともいいます)というファイルを配置することで、アプリケーション共通の初期化パラメータを設定することが可能です。
以下のサンプルでは、web.xml上で定義された初期化パラメータ「driverName」と「connectString」を引用し、データベースへの接続を確立してみることにしましょう。データベース接続情報など、環境に依存する情報は直接にコード中に記述するのではなく、web.xml上で一元管理することでメンテナンス性を向上させることができます。
<%@ page contentType="text/html;charset=Shift_JIS" import="java.sql.*" %> <% Class.forName(application.getInitParameter("driverName")); Connection db=DriverManager.getConnection( application.getInitParameter("connectString")); /* ...データベースへの一連の処理が行われる... */ db.close(); %>
<?xml version="1.0" encoding="Shift_JIS" ?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <context-param> <param-name>driverName</param-name> <param-value>org.gjt.mm.mysql.Driver</param-value> </context-param> <context-param> <param-name>connectString</param-name> <param-value>jdbc:mysql://localhost/dbName?user=userName&password= passwordNumber&useUnicode=true&characterEncoding=Shift_JIS</param-value> </context-param> </web-app>
application.getInitParameterメソッドは、web.xmlの
なお、個別のサーブレット/JSP固有のパラメータを指定したいという場合には、
以下に、ここまで紹介したgetAttribute、setAttributeメソッドのほか、applicationオブジェクトに用意されている主なメソッドを挙げておきます。
メソッド | 概要 |
---|---|
getAttributeNames() | すべてのアプリケーション属性名を取得 |
getMajorVersion() | サーブレットのメジャーバージョンを取得 |
getMinorVersion() | サーブレットのマイナーバージョンを取得 |
getRealPath(path) | 指定された仮想パスを物理パスに変換 |
getServerInfo() | コンテナの名前、バージョンを取得 |
getInitParameter(name) | 指定された初期化パラメータを取得 |
getInitParameterNames() | すべての初期化パラメータ名を取得 |
log(msg) | 指定されたメッセージをコンテナ標準のログに記録 |
removeAttribute(name) | 指定されたアプリケーション属性(name)を削除 |
Copyright © ITmedia, Inc. All Rights Reserved.