09_JSPアクション要素
JSP命令要素とは異なり、要求処理段階においてJSP動作要素が機能する.JSPアクション要素はXML文法で書かれています.
JSPアクションでは、ファイルを動的に挿入したり、JavaBeanコンポーネントを再利用したり、ユーザーを別のページにリダイレクトしたり、JavaプラグインにHTMLコードを生成したりすることができます.
アクション要素には、XML基準を満たす構文が1つしかありません.
<jsp:action_name attribute="value" />
動作要素は基本的に事前定義された関数であり、JSP仕様は一連の標準動作を定義し、JSPを接頭辞として使用し、使用可能な標準動作要素は以下の通りである.
構文
説明
jsp:include
ページが要求されたときにファイルを導入します.
jsp:useBean
JavaBeanを検索またはインスタンス化します.
jsp:setProperty
JavaBeanのプロパティを設定します.
jsp:getProperty
JavaBeanのプロパティを出力します.
jsp:forward
リクエストを新しいページに移動します.
jsp:plugin
ブラウザタイプに応じてJavaプラグイン用にOBJECTまたはEMBEDタグを生成します.
jsp:element
動的XML要素の定義
jsp:attribute
動的に定義されたXML要素のプロパティを設定します.
jsp:body
動的に定義されたXML要素の内容を設定します.
jsp:text
JSPページおよびドキュメントにテキストを書き込むテンプレートを使用する
一般的なプロパティ
すべてのアクション要素にはid属性とscope属性の2つの属性があります.
id属性:id属性は動作要素の唯一の識別であり、JSPページで参照できる.アクション要素が作成したid値はPageContextで呼び出すことができます.
scopeプロパティ:アクション要素のライフサイクルを識別します.idプロパティはscopeプロパティと直接関係し、scopeプロパティは関連するidオブジェクトの寿命を定義します.scopeプロパティには、(a)page、(b)request、(c)session、および(d)アプリケーションの4つの可能な値があります.
<jsp:include page="relative URL" flush="true" />
先に説明したように、JSPファイルがサーブレットに変換されたときにファイルを導入するincludeコマンドですが、ここでのjsp:include動作は異なり、ファイルを挿入する時間はページが要求されたときです.
以下はincludeアクションに関するプロパティのリストです.
ツールバーの
説明
page
ページに含まれる相対URLアドレス.
flush
アセットを含む前にキャッシュ領域をリフレッシュするかどうかを定義するブールアトリビュート.
≪インスタンス|Instance|emdw≫
以下、2つのファイルdateを定義する.jspとmain.jsp、コードは以下の通りです.
date.jspファイルコード:
<p>
Today's date: <%= (new java.util.Date()).toLocaleString()%>
</p>
main.jspファイルコード:
<html>
<head>
<title>The include Action Example</title>
</head>
<body>
<center>
<h2>The include action Example</h2>
<jsp:include page="date.jsp" flush="true" />
</center>
</body>
</html>
以上の2つのファイルをサーバのルートディレクトリの下に置いてmainにアクセスします.jspファイル.次の結果が表示されます.
The include action Example
Today's date: 12-Sep-2013 14:54:22
jsp:useBeanアクションは、JSPページで使用するJavaBeanをマウントするために使用されます.
この機能は、Javaコンポーネントの再利用の利点を発揮するとともに、JSPがサーブレットと区別される利便性を損なうことを回避するため、非常に役立ちます.
jsp:useBean動作の最も簡単な構文は:
<jsp:useBean id="name" class="package.class" />
クラスのロード後、jsp:setPropertyおよびjsp:getPropertyアクションを使用してbeanのプロパティを変更および取得できます.
以下はuseBeanアクションに関するプロパティのリストです.
ツールバーの
説明
class
Beanの完全なパッケージ名を指定します.
type
オブジェクト変数を参照するタイプを指定します.
beanName
Javaを通ります.beans.Beansのinstantiate()メソッドはBeanの名前を指定します.
具体的な例を示す前に、jsp:setPropertyおよびjsp:getPropertyアクション要素を見てみましょう.
jsp:setPropertyは、インスタンス化されたBeanオブジェクトのプロパティを設定するために使用されます.2つの方法があります.まず、jsp:useBean要素の外側(後ろ)でjsp:setPropertyを使用できます.以下に示します.
<jsp:useBean id="myName" ... />
...
<jsp:setProperty name="myName" property="someProperty" .../>
この場合、jsp:useBeanが既存のBeanを見つけたか、新しいBeanインスタンスを作成したかにかかわらず、jsp:setPropertyが実行されます.2つ目の使い方は、jsp:setPropertyをjsp:useBean要素の内部に入れることです.以下のようにします.
<jsp:useBean id="myName" ... >
...
<jsp:setProperty name="myName" property="someProperty" .../>
</jsp:useBean>
この場合、jsp:setPropertyはBeanインスタンスを新規作成する場合にのみ実行され、既存のインスタンスを使用する場合はjsp:setPropertyは実行されません.
の4つのプロパティがあります.
ツールバーの
説明
name
nameプロパティが必要です.プロパティを設定するBeanを表します.
property
propertyプロパティが必要です.どのプロパティを設定するかを示します.propertyの値が「*」の場合、すべての名前とBean属性の名前が一致する要求パラメータが対応する属性setメソッドに渡されます.
value
valueプロパティはオプションです.この属性はBean属性の値を指定するために使用されます.文字列データは、ターゲットクラスで標準のvalueOfメソッドによって自動的に数値、boolean、Boolean、bytte、Byte、char、Characterに変換されます.たとえば、booleanタイプとBooleanタイプの属性値(例えば「true」)はBoolean.valueOf変換、intタイプとIntegerタイプの属性値(例えば「42」)はInteger.valueOf変換となります.valueとparamは同時に使用できませんが、いずれかを使用できます.
param
paramはオプションです.Beanプロパティの値としてどのリクエストパラメータを使用するかを指定します.現在のリクエストにパラメータがない場合、何もしないで、Beanプロパティのsetメソッドにnullを渡すことはありません.したがって、Bean自身にデフォルトのプロパティ値を指定することができます.リクエストパラメータが新しい値を明確に指定した場合にのみ、デフォルトのプロパティ値を変更できます.
jsp:getPropertyアクションは、指定したBean属性の値を抽出し、文字列に変換して出力します.構文の形式は次のとおりです.
<jsp:useBean id="myName" ... />
...
<jsp:getProperty name="myName" property="someProperty" .../>
次の表はgetPropertyに関連付けられたプロパティです.
ツールバーの
説明
name
取得するBeanプロパティの名前.Beanは定義されている必要があります.
property
Beanプロパティを抽出する値を示します
≪インスタンス|Instance|emdw≫
次の例ではBeanを使用します.
/* : TestBean.java */
package action;
public class TestBean {
private String message = "No message specified";
public String getMessage() {
return(message);
}
public void setMessage(String message) {
this.message = message;
}
}
以上の例をコンパイル、TestBeanを生成する.classファイルは、変更後に自動的にマウントできるクラスのディレクトリ(C:apache-tomcat-7.0.2webappsWEB-INFclassesactionディレクトリなど)に保存するのではなく、サーバがJavaクラスを正式に格納しているディレクトリにコピーします.CLASSSPATH変数にはパスが含まれている必要があります.たとえば、Java Webサーバの場合、BeanとすべてのBeanで使用されるクラスはclassesディレクトリに入れるか、jarファイルにカプセル化してlibディレクトリに入れるべきですが、servletsの下に置くべきではありません.次の簡単な例では、Beanをマウントし、messageプロパティを設定/読み取ります.
今すぐmainに行きましょう.jspファイルでBeanを呼び出します.
<html>
<head>
<title>Using JavaBeans in JSP</title>
</head>
<body>
<center>
<h2>Using JavaBeans in JSP</h2>
<jsp:useBean id="test" class="action.TestBean" />
<jsp:setProperty name="test"
property="message"
value="Hello JSP..." />
<p>Got message....</p>
<jsp:getProperty name="test" property="message" />
</center>
</body>
</html>
以上のファイルを実行し、以下のように出力します.
Using JavaBeans in JSP
Got message....
Hello JSP...
jsp:forward動作はリクエストを別のページに移動します.jsp:forwardタグには属性pageが1つしかありません.構文のフォーマットは次のとおりです.
<jsp:forward page="Relative URL" />
以下はforwardに関連付けられたプロパティです.
ツールバーの
説明
page
Pageプロパティには相対URLが含まれています.Pageの値は直接与えるもよいし、要求時に動的に計算してもよいし、JSPページまたはJavaサーブレットであってもよい.
≪インスタンス|Instance|emdw≫
次の例では、dateという2つのファイルを使用します.jspとmain.jsp.
date.jspファイルコードは以下の通りです.
<p>
Today's date: <%= (new java.util.Date()).toLocaleString()%>
</p>
main.jspファイルコード:
<html>
<head>
<title>The forward Action Example</title>
</head>
<body>
<center>
<h2>The forward action Example</h2>
<jsp:forward page="date.jsp" />
</center>
</body>
以上の2つのファイルをサーバのルートディレクトリの下に置いてmainにアクセスします.jspファイル.次の結果が表示されます.
Today's date: 12-Sep-2010 14:54:22
jsp:pluginアクションは、ブラウザのタイプに応じて、JavaプラグインでJava Appletを実行するために必要なOBJECTまたはEMBED要素を挿入するために使用されます.
必要なプラグインが存在しない場合は、プラグインをダウンロードし、Javaコンポーネントを実行します.Javaコンポーネントは、appletまたはJavaBeanであってもよい.
pluginアクションには、JavaコンポーネントをフォーマットするためのHTML要素に対応する複数のプロパティがあります.param要素は、AppletまたはBeanにパラメータを渡すために使用できます.
以下はpluginアクション要素を使用する典型的な例です.
<jsp:plugin type="applet" codebase="dirname" code="MyApplet.class"
width="60" height="80">
<jsp:param name="fontcolor" value="red" />
<jsp:param name="background" value="black" />
<jsp:fallback>
Unable to initialize Java Plugin
</jsp:fallback>
</jsp:plugin>
興味があればappletを使用してjsp:pluginアクション要素をテストしてみてください.
次の例では、XML要素を動的に定義します.
<%@page language="java" contentType="text/html"%>
<html xmlns="http://www.w3c.org/1999/xhtml"
xmlns:jsp="http://java.sun.com/JSP/Page">
<head><title>Generate XML Element</title></head>
<body>
<jsp:element name="xmlElement">
<jsp:attribute name="xmlElementAttr">
Value for the attribute
</jsp:attribute>
<jsp:body>
Body for XML element
</jsp:body>
</jsp:element>
</body>
</html>
実行時に生成されるHTMLコードは次のとおりです.
<html xmlns="http://www.w3c.org/1999/xhtml"
xmlns:jsp="http://java.sun.com/JSP/Page">
<head><title>Generate XML Element</title></head>
<body>
<xmlElement xmlElementAttr="Value for the attribute">
Body for XML element
</xmlElement>
</body>
</html>
<jsp:text>Template data</jsp:text>
上記のテキストテンプレートには、他の要素を含めることはできません.テキストとEL式のみを含めることができます(注:EL式は後述する章で説明します).XMLファイルでは、>記号が不正であるため、${whatever>0}式やCDATAセクションに埋め込まれた値を使用することはできません.
<jsp:text><![CDATA[<br>]]></jsp:text>
XHTMLでDOCTYPEを宣言する必要がある場合は、以下の例で
<jsp:text><![CDATA[<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"DTD/xhtml1-strict.dtd">]]>
</jsp:text>
<head><title>jsp:text action</title></head>
<body>
<books><book><jsp:text>
Welcome to JSP Programming
</jsp:text></book></books>
</body>
</html>
以上の例では、