Revised: 18th/June/2002
JavaBenas というのは、単なるクラス型のオブジェクトに過ぎませんが、プラットフォーム中立な可搬性と、アプリケーションに容易に組み込める再利用可能性を持たせることを目的として、インスタンス化するクラスの設計規約が定義されています。元来は視覚的な部品でしたが、現在ではビジュアル Bean と 非ビジュアル bean に分けられて、広く再利用可能なアプリケーション部品と捉えられています。
JSP から bean として利用されるためには、次の二つの特徴を満たしていることが望まれます。
bean はオブジェクトなので、コンストラクタでインスタンス化して作成します。このとき、引数のないコンストラクタが呼ばれます。
引数のないコンストラクタは自動的に作成されますが、引数をもつコンストラクタを明示的に作ると、引数のないコンストラクタは自動的には作られません。自分で引数を持つコンストラクタを実装したときは、引数のないコンストラクタも明示的に実装しなければなりません。
Java Bean はプロパティを持ちます。
プロパティはゲッターとセッターと呼ばれるアクセス用のメソッドでアクセスされる量であり、多くの場合、メンバ変数で実装されます。ゲッターとセッターはメンバ変数の説明で既出ですが、 bean の慣習としておさらいします。
private PropertyType foo
public PropertyType getFoo()
public void setFoo(PropertyType a)
private boolean foo
public boolean isFoo()
public void isFoo(boolean ct)
private PropertyType[] foo
public PropertyType getFoo(int a)
public void setFoo(int a, PropertyType b);
JSP では、 bean に限らず、 Java のあらゆるオブジェクトを作成して使用することができます。bean 以外のオブジェクトであれば、スクリプトレットでインスタンス化して適当なスコープの定義済みオブジェクトに格納します。
Java Bean の元になるクラスは、上であげた二つの特徴を満たした上で、自由に記述する事が出来ます。これを JSP でインスタンス化して利用するには、 <jsp:bean >
アクションタグを利用します。
<jsp:useBean id="beanName" class="fully_qualified_classname" scope="scope"/>
ここで作る bean のプロパティを初期化する必要があれば、 <jsp:setProperty />
アクションタグを利用します。
<jsp:useBean id="beanName" class="fully_qualified_classname" scope="scope"> <jsp:setProperty .../> </jsp:useBean>
プロパティの設定と取得は、アクションタグを使う方法と、スクリプトレットを使う方法があります。
<jsp:setProperty name="beanName" property="propName" .../>
<jsp:getProperty name="beanName" property="propName"/>
このとき、 jsp:getProperty
アクションタグは、指定したプロパティの値を String
に変換して、定義済みの暗黙オブジェクト out
に挿入します。
bean もオブジェクトの一つなので、スクリプトレットでアクセスメソッドを呼び出すことでプロパティを操作できます。
<% beanName.setPropName(value); %>
<% Object o = beanName.getPropName(); %>
また、文字列に変換したくない場合は、式を使います。
<%= beanName.getPropName() %>
サーブレットは通常の Java のクラスの一つとして実装するので、同じく通常の Java のクラスの一つとして実装する bean の利用に関して、他の場合と異なるところはありません。
JSP も実行時には、 JSP コンテナによってサーブレットに変換されて実行されます。
bean の配置は、サーバマシンの CLASSPATH が通っているところからアクセスできれば、どこに配置しても構いません。通常は、ドキュメントルートの /WEB-INF/classes/
以下に配置することになります。例えば、 sugai.foo.bar.BeanDemo
クラスのクラスファイルは、 /WEB-INF/classes/sugai/foo.bar.BeanDemo.class
になります。