3.2. <jsp:useBean>
<jsp:useBean>はJavaBeansをインスタンス化して特定のスコープに登録を行い、JSPページから使用可能にするアクションです。既に登録済みである場合にはインスタンスの生成を行いません。<jsp:useBean>アクションの属性と定義は以下の通りです。<jsp:useBean>アクションの属性には、スクリプトを書く事は許されていません。
| 属性名 |
必須 |
スクリプト
可能 |
説明 |
| id |
○ |
|
JavaBeansのインスタンス名。ページ内で一意な名前でなければならない。 |
| scope |
|
|
インスタンスが使用可能になるスコープを定義。それぞれのスコープの意味は下記のとおり。デフォルトは「page」。インスタンスはid名で該当スコープ(暗黙オブジェクト)に登録される。
| page |
「javax.servlet.jsp.PageContext」に登録。インスタンスを生成したJSPページ内でのみ参照可能。 |
| request |
「javax.servlet.http.HttpServletRequest」に登録。クライアントからの1つの要求を処理する範囲内で参照可能。 |
| session |
「javax.servlet.http.HttpSession」に登録。セッションの範囲内で参照可能。 |
| application |
「javax.servlet.ServletContext」に登録。WWWアプリケーション全体で参照可能。 |
|
| class |
|
|
JavaBeanのクラス名。インスタンスの生成に利用される。 |
| beanName |
|
|
JavaBeanの名前。インスタンスの生成に利用される。インスタンスを生成する場合には「class」か「beanName」のいずれかを指定しなければならない。いずれも指定しなかった場合には、該当Beanは既にインスタンス化され、指定スコープに登録されているとみなされる。 |
| type |
|
|
インスタンスの実行時の型を指定。「beanName」でインスタンスを生成する場合には必ず指定。また既にスコープにインスタンスが存在し、かつ「class」を省略する場合は必須。それ以外の場合は任意。 |
以下は使用例です。「jp.co.fourdd.bean.Animal」クラスのインスタンスを生成し、「tiger」という名前で「session」に登録しています。またそれ以降、「tiger」という名前でインスタンスを使用する事が可能になります。
<jsp:useBean id="tiger" class="jp.co.fourdd.bean.Animal" scope="session" />
<%=tiger.getName() %>
<jsp:useBean>はボディ部を指定する事も可能です。ボディ部はインスタンスが生成された場合にのみ評価・実行されます。以下の例では、インスタンスが生成された場合にのみ値の設定を行います。
<jsp:useBean id="tiger" class="jp.co.fourdd.bean.Animal" scope="session" >
<% tiger.setName("虎"); %>
</jsp:useBean>
最後にJavaBeanとして使用できるクラスの仕様を以下にまとめます。この仕様に従って作成されたクラスは、JavaBeanとして<jsp:useBean>タグから使用可能です。
- 引数を持たないパブリックなコンストラクタを持っている。
- メンバ変数に値を設定する「setter」メソッド(「set???」メソッド)を持っている。
- メンバ変数の値を取得する「getter」メソッド(「get???」メソッド)を持っている。
(実習課題1)
サーブレットの5章実習課題3を改良しなさい。
- 出力ページにおいて、<jsp:useBean>タグを使用するように変更する事。
解答例はこちら