Jsp-actions
JSP-アクション
この章では、JSPのアクションについて説明します。 これらのアクションは、XML構文の構造を使用して、サーブレットエンジンの動作を制御します。 ファイルを動的に挿入したり、JavaBeansコンポーネントを再利用したり、ユーザーを別のページに転送したり、Javaプラグイン用のHTMLを生成したりできます。
XML標準に準拠しているため、Action要素の構文は1つだけです-
<jsp:action_name attribute = "value"/>
アクション要素は基本的に事前定義された関数です。 次の表は、利用可能なJSPアクションを示しています-
S.No. | Syntax & Purpose |
---|---|
1 |
jsp:include ページが要求されたときにファイルを含めます。 |
2 |
jsp:useBean JavaBeanを検索またはインスタンス化します。 |
3 |
jsp:setProperty JavaBeanのプロパティを設定します。 |
4 |
jsp:getProperty JavaBeanのプロパティを出力に挿入します。 |
5 |
jsp:forward リクエスターを新しいページに転送します。 |
6 |
jsp:plugin JavaプラグインのOBJECTまたはEMBEDタグを作成するブラウザー固有のコードを生成します。 |
7 |
jsp:element XML要素を動的に定義します。 |
8 |
jsp:attribute 動的に定義されたXML要素の属性を定義します。 |
9 |
jsp:body 動的に定義されたXML要素の本体を定義します。 |
10 |
jsp:text JSPページおよびドキュメントにテンプレートテキストを記述するために使用されます。 |
共通の属性
すべてのAction要素に共通の2つの属性、 id 属性と scope 属性があります。
ID属性
id属性はAction要素を一意に識別し、JSPページ内でアクションを参照できるようにします。 アクションがオブジェクトのインスタンスを作成する場合、id値を使用して、暗黙的なオブジェクトPageContextを介してそれを参照できます。
スコープ属性
この属性は、Action要素のライフサイクルを識別します。 スコープ属性はIDに関連付けられたオブジェクトの寿命を決定するため、id属性とscope属性は直接関連しています。 scope属性には、(a)ページ、(b)request、(c)session *、および(d)application *の4つの値があります。
<jsp:include>アクション
このアクションにより、生成されているページにファイルを挿入できます。 構文は次のようになります-
<jsp:include page = "relative URL" flush = "true"/>
JSPページがサーブレットに変換されるときにファイルを挿入する include ディレクティブとは異なり、このアクションはページが要求されたときにファイルを挿入します。
次の表に、インクルードアクションに関連付けられている属性を示します-
S.No. | Attribute & Description |
---|---|
1 |
page 含めるページの相対URL。 |
2 |
flush ブール属性は、含まれるリソースが含まれる前にバッファをフラッシュするかどうかを決定します。 |
例
次の2つのファイル*(a)date.jsp および(b)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>
これらすべてのファイルをルートディレクトリに保存し、 main.jsp にアクセスしてみましょう。 次の出力が表示されます-
The include action Example
Today's date: 12-Sep-2010 14:54:22
<jsp:useBean>アクション
*useBean* アクションは非常に用途が広いです。 最初に、id変数とscope変数を使用して既存のオブジェクトを検索します。 オブジェクトが見つからない場合、指定されたオブジェクトを作成しようとします。
Beanをロードする最も簡単な方法は次のとおりです-
<jsp:useBean id = "name" class = "package.class"/>
Beanクラスがロードされると、 jsp:setProperty および jsp:getProperty アクションを使用して、Beanプロパティを変更および取得できます。
次の表は、useBeanアクションに関連付けられている属性を示しています-
S.No. | Attribute & Description |
---|---|
1 |
class Beanの完全なパッケージ名を指定します。 |
2 |
type オブジェクトを参照する変数のタイプを指定します。 |
3 |
beanName java.beans.Beansクラスのinstantiate()メソッドで指定されたBeanの名前を提供します。 |
これらのアクションに関連する有効な例を示す前に、 jsp:setProperty および jsp:getProperty アクションについて説明しましょう。
<jsp:setProperty>アクション
*setProperty* アクションは、Beanのプロパティを設定します。 Beanは、このアクションの前に事前に定義されている必要があります。 setPropertyアクションを使用する2つの基本的な方法があります-
次のように、 jsp:setProperty を使用できますが、 jsp:useBean 要素の外側で、
<jsp:useBean id = "myName" .../>
...
<jsp:setProperty name = "myName" property = "someProperty" .../>
この場合、 jsp:setProperty は、新しいBeanがインスタンス化されたか、既存のBeanが見つかったかに関係なく実行されます。
jsp:setPropertyが表示される2番目のコンテキストは、以下に示すように、 jsp:useBean 要素の本文内にあります-
<jsp:useBean id = "myName" ... >
...
<jsp:setProperty name = "myName" property = "someProperty" .../>
</jsp:useBean>
ここで、jsp:setPropertyは、既存のオブジェクトが見つかった場合ではなく、新しいオブジェクトがインスタンス化された場合にのみ実行されます。
次の表は、 setProperty アクションに関連付けられた属性を示しています-
S.No. | Attribute & Description |
---|---|
1 |
name プロパティが設定されるBeanを指定します。 Beanは事前に定義されている必要があります。 |
2 |
property 設定するプロパティを示します。 「*」の値は、名前がBeanプロパティ名と一致するすべての要求パラメーターが適切なセッターメソッドに渡されることを意味します。 |
3 |
value 指定されたプロパティに割り当てられる値。 パラメーターの値がヌルであるか、パラメーターが存在しない場合、setPropertyアクションは無視されます。 |
4 |
param param属性は、プロパティが受け取る値を持つリクエストパラメータの名前です。 値とパラメーターの両方を使用することはできませんが、どちらも使用することはできません。 |
<jsp:getProperty>アクション
*getProperty* アクションは、指定されたプロパティの値を取得して文字列に変換し、最終的に出力に挿入するために使用されます。
getPropertyアクションには2つの属性のみがあり、両方とも必須です。 getPropertyアクションの構文は次のとおりです-
<jsp:useBean id = "myName" .../>
...
<jsp:getProperty name = "myName" property = "someProperty" .../>
次の表は、 getProperty アクションに関連付けられている必須属性を示しています-
S.No. | Attribute & Description |
---|---|
1 |
name 取得するプロパティを持つBeanの名前。 Beanは事前に定義されている必要があります。 |
2 |
property プロパティ属性は、取得するBeanプロパティの名前です。 |
例
私たちの例でさらに使用されるテストBeanを定義しましょう-
/*File: 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.2 \ webapps \ WEB-INF \ classes \ action フォルダーのTestBean.classと CLASSPATH 変数もこのフォルダに設定する必要があります-
*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>
私たちは今 main.jsp にアクセスしようとすると、次の結果が表示されます-
Using JavaBeans in JSP
Got message....
Hello JSP...
<jsp:forward>アクション
*forward* アクションは、現在のページのアクションを終了し、静的ページ、別のJSPページ、Javaサーブレットなどの別のリソースにリクエストを転送します。
以下は、 forward アクションの構文です-
<jsp:forward page = "Relative URL"/>
次の表は、転送アクションに関連付けられている必須属性を示しています-
S.No. | Attribute & Description |
---|---|
1 |
page 静的ページ、別のJSPページ、Javaサーブレットなど、別のリソースの相対URLで構成する必要があります。 |
例
次の2つのファイル*(a)date.jsp および(b)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:forward page = "date.jsp"/>
</center>
</body>
</html>
これらすべてのファイルをルートディレクトリに保存し、 main.jsp にアクセスしてみましょう。 これにより、次のような結果が表示されます。
ここでは、メインページのコンテンツを破棄し、転送されたページのコンテンツのみを表示しました。
Today's date: 12-Sep-2010 14:54:22
<jsp:plugin>アクション
*plugin* アクションは、JavaコンポーネントをJSPページに挿入するために使用されます。 ブラウザのタイプを決定し、必要に応じて *<object>* または *<embed>* タグを挿入します。
必要なプラグインが存在しない場合、プラグインをダウンロードしてからJavaコンポーネントを実行します。 Javaコンポーネントは、アプレットまたはJavaBeanのいずれかです。
プラグインアクションには、Javaコンポーネントのフォーマットに使用される一般的なHTMLタグに対応するいくつかの属性があります。 <param> 要素を使用して、アプレットまたはBeanにパラメーターを送信することもできます。
プラグインアクションを使用する一般的な構文は次のとおりです-
<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>
興味がある場合は、アプレットを使用してこのアクションを試すことができます。 新しい要素 <fallback> 要素を使用して、コンポーネントに障害が発生した場合にユーザーに送信されるエラー文字列を指定できます。
The <jsp:element> Action
The <jsp:attribute> Action
The <jsp:body> Action
*<jsp:element>、<jsp:attribute>* および *<jsp:body>* アクションは、XML要素を動的に定義するために使用されます。 というのは、コンパイル時に静的にではなく、リクエスト時にXML要素を生成できるからです。
以下は、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>アクション
*<jsp:text>* アクションを使用して、JSPページおよびドキュメントにテンプレートテキストを書き込むことができます。 以下は、このアクションの簡単な構文です-
<jsp:text>Template data</jsp:text>
テンプレートの本文に他の要素を含めることはできません。テキストとEL式のみを含めることができます(注-EL式については後続の章で説明します)。 XMLファイルでは、 $ \ {whatever> 0} などの式を使用できないことに注意してください。これは、大なり記号が無効であるためです。 代わりに、 $ \ {whatever gt 0} などの gt 形式を使用するか、 CDATA セクションに値を埋め込むこともできます。
<jsp:text><![CDATA[<br>]]></jsp:text>
*DOCTYPE* 宣言を含める必要がある場合、たとえば *XHTML* の場合、次のように *<jsp:text>* 要素も使用する必要があります-
<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>
*<jsp:text>* アクションがある場合とない場合の上記の例を試してください。