English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

JSP 动作要素

JSP指令要素とは異なり、JSPアクション要素はリクエスト処理段階で効果を発揮します。JSPアクション要素はXML文法で書かれています。

JSPアクションを使用して、ファイルを動的にインクルードし、JavaBeanコンポーネントを再利用し、ユーザーを別のページにリダイレクトし、JavaプラグインにHTMLコードを生成することができます。

アクション要素は一つの構文しか持ちません。それはXML標準に従っています:

<jsp:action_name attribute="value" />

アクション要素は基本的に予定义された関数であり、JSP規格は一連の標準アクションを定義しており、JSP接頭辞を使用して利用可能な標準アクション要素は以下の通りです:

構文説明
jsp:includeページがリクエストされたときにファイルをインクルード
jsp:useBeanJavaBeanを検索またはインスタンス化
jsp:setPropertyJavaBeanの属性を設定
jsp:getProperty特定のJavaBeanの属性を出力
jsp:forwardリクエストを新しいページに転送
jsp:pluginブラウザの種類に応じてJavaプラグインにOBJECTまたはEMBEDタグを生成
jsp:element動的XML要素を定義
jsp:attribute動的に定義されたXML要素の属性を設定
jsp:body動的に定義されたXML要素の内容を設定
jsp:textJSPページとドキュメントでテキストを書き込むテンプレートを使用

一般的な属性

すべてのアクション要素にはid属性とscope属性の2つの属性があります。

  • id属性:

    id属性はアクション要素のユニークな識別子であり、JSPページで参照することができます。アクション要素が作成するid値はPageContextを通じて呼び出すことができます。

  • scope属性:

    この属性はアクション要素のライフサイクルを識別するために使用されます。id属性とscope属性は直接関係しており、scope属性は関連するidオブジェクトの寿命を定義します。scope属性には4つの可能な値があります: (a) page, (b)request, (c)session, そして (d)application。

<jsp:include>アクション要素

<jsp:include>アクション要素は、静的および動的ファイルを含めるために使用されます。このアクションは指定されたファイルを生成中のページに挿入します。構文形式は以下の通りです:

<jsp:include page="相対 URL 地址" flush="true" />

 すでに紹介したinclude指令は、JSPファイルがServletに変換される際にファイルをインクルードするが、ここでのjsp:includeアクションは異なり、ファイルをインクルードするタイミングはページがリクエストされたときです。

以下はincludeアクションに関連する属性リストです。

属性説明
pageページに含まれる相対URLアドレス。
flushリソースを含める前にキャッシュエリアをリフレッシュするかどうかを定義する布尔属性。

オンラインサンプル

以下では、2つのファイルを定義しています。 date.jsp および main.jsp、以下のように示されます:

date.jspファイルのコード:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<p>
   今日の日付は: <%= (new java.util.Date()).toLocaleString()%>
</p>

main.jspファイルのコード:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>基本チュートリアルウェブ(oldtoolbag.com)</title>
</head>
<body>
<h2>include アクションの例</h2>
<jsp:include page="date.jsp" flush="true" />
</body>
</html>

以下の2つのファイルをサーバーのルートディレクトリに配置し、main.jspファイルにアクセスします。表示結果は以下の通りです:

include アクションの例
今日の日付は: 2016-6-25 14:08:17

<jsp:useBean>アクション要素

jsp:useBean アクションはJSPページで使用するJavaBeanをロードするために使用されます。

この機能は非常に有用であり、Javaコンポーネントの再利用を活用できます。

jsp:useBeanアクションの最もシンプルな文法は以下の通りです:

<jsp:useBean id="name" />

クラスがロードされた後、jsp:setPropertyとjsp:getPropertyアクションを通じてbeanの属性を変更したり検索したりできます。

以下はuseBeanアクションに関連する属性リストです。

属性説明
classBeanの完全なパッケージ名を指定します。
typeオブジェクト変数を参照するタイプを指定します。
beanNamejava.beans.Beansのinstantiate()メソッドを通じてBeanの名前を指定します。

具体的な例を示す前に、まずjsp:setPropertyとjsp:getPropertyアクション要素について見てみましょう:

<jsp:setProperty>アクション要素

jsp:setPropertyは既に例示されたBeanオブジェクトの属性を設定するために使用され、2つの用法があります。まず、jsp:useBean要素の外側(後ろ)にjsp:setPropertyを使用することができます。以下のように示されます:

<jsp:useBean id="myName" ... />
...
<jsp:setProperty name="myName" property="someProperty" .../>

この場合、jsp:useBeanが既存のBeanを見つけたか、新しいBean例を新規に作成したかに関わらず、jsp:setPropertyは実行されます。第二种用法は、jsp:setPropertyをjsp:useBean要素の内部に配置する方法です。以下のように示されます:

<jsp:useBean id="myName" ...
...
   <jsp:setProperty name="myName" property="someProperty" .../>
</jsp:useBean>

この場合、jsp:setPropertyは新しいBean例を生成する際にのみ実行されます。既存の例を使用する場合はjsp:setPropertyを実行しません。

jsp:setPropertyアクションには以下の4つの属性があります。以下のテーブルを参照してください:

属性説明
namename属性は必須です。それにより、設定する属性がどのBeanであるかを示します。
propertyproperty属性は必須です。これは設定する属性を示します。特別な使用法があります:propertyの値が""の場合*"は、すべての名前とBeanの属性名が一致するリクエストパラメータが、対応する属性のsetメソッドに渡されることを示します。
valuevalue属性はオプションです。これはBeanの属性の値を指定するために使用されます。文字列データは、ターゲットクラス内で標準のvalueOfメソッドを通じて自動的に数字、boolean、Boolean、byte、Byte、char、Characterに変換されます。例えば、booleanとBoolean型の属性値(例えば"true")はBoolean.valueOfによって変換され、intとInteger型の属性値(例えば"42")はInteger.valueOfによって変換されます。   valueとparamは同時に使用できませんが、どちらか一方を使用できます。
paramparamはオプションです。これはどのリクエストパラメータを使用してBeanの属性の値を指定するかを指定します。現在のリクエストにパラメータがない場合、何も行われません。システムはnullをBeanの属性のsetメソッドに渡しません。したがって、Beanがデフォルトの属性値を提供し、リクエストパラメータが明示的に新しい値を指定する場合にのみデフォルトの属性値を変更することができます。

<jsp:getProperty>アクション要素

jsp:getPropertyアクションは指定されたBeanの属性の値を抽出し、文字列に変換して出力します。構文は以下の通りです:

<jsp:useBean id="myName" ... />
...
<jsp:getProperty name="myName" property="someProperty" .../>

以下はgetPropertyに関連付けられた属性の一覧です:

属性説明
name検索するBeanの属性名です。Beanは既に定義されている必要があります。
propertyBeanの属性の値を抽出するために使用されます。

オンラインサンプル

以下のサンプルでは、Beanを使用しています:

package com.w3codebox.main;
public class TestBean {
   private String message = "基本教程網";
 
   public String getMessage() {
      return(message);
   }
   public void setMessage(String message) {
      this.message = message;
   }
}

上記のサンプルファイル TestBean.java をコンパイルします:

$ javac TestBean.java

コンパイルが完了すると、現在のディレクトリに以下が生成されます。 TestBean.class ファイルにコピーします。 このファイルを現在のJSPプロジェクトの WebContent/WEB-INF/classes/com/w3codebox/main下( com/w3codebox/mainパッケージのパス、手動で作成する必要はありません)。

以下はEclipse内のディレクトリ構造図です:

以下は非常にシンプルな例で、Beanをロードし、以下の設定を行います:/message属性を読み取ります。

現在、main.jspファイルでこのBeanを呼び出します:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>基本チュートリアルウェブ(oldtoolbag.com)</title>
</head>
<body>
<h2>Jsp JavaBeanの使用例</h2>
<jsp:useBean id="test" />
 
<jsp:setProperty name="test" 
                    property="message" 
                    value="基本チュートリアル..." />
 
<p>出力情報....</p>
 
<jsp:getProperty name="test" property="message" />
</body>
</html>

ブラウザからアクセスし、以上のファイルを実行すると、以下のように表示されます:

<jsp:forward>動作要素

 jsp:forward動作はリクエストを別のページに転送します。jsp:forwardタグにはpageという1つの属性があります。以下のようになります:

<jsp:forward page="相対 URL アドレス" />

以下はforwardに関連する属性です:

属性説明
pagepage属性には相対URLが含まれています。pageの値は直接指定することも、リクエスト時に動的に計算することもできます。JSPページまたはJava Servletです。

オンラインサンプル

以下の例では、2つのファイルを使用しました:date.jspとmain.jsp。

date.jsp ファイルのコードは以下の通りです:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<p>
   今日の日付は: <%= (new java.util.Date()).toLocaleString()%>
</p>

main.jspファイルのコード:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>基本チュートリアルウェブ(oldtoolbag.com)</title>
</head>
<body>
<h2>forward 動作例</h2>
<jsp:forward page="date.jsp" />
</body>
</html>

以下の2つのファイルをサーバーのルートディレクトリに配置し、main.jspファイルにアクセスします。表示結果は以下の通りです:

今日の日付は: 2016-6-25 14:37:25

<jsp:plugin>動作要素

jsp:plugin動作は、ブラウザのタイプに応じて、Java Appletを実行するために必要なOBJECTまたはEMBED要素を挿入するために使用されます。

必要なプラグインが存在しない場合、プラグインをダウンロードしてからJavaコンポーネントを実行します。JavaコンポーネントはappletまたはJavaBeanです。

プラグインには、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>
      Javaプラグインの初期化に失敗しました
   </jsp:fallback>
 
</jsp:plugin>

appletを使用してjsp:pluginアクション要素をテストしたい場合は、<fallback>要素は新しい要素であり、コンポーネントが故障した場合にユーザーにエラーメッセージを送信します。

<jsp:element> 、 <jsp:attribute>、 jsp:body>アクション要素

<jsp:element> 、 <jsp:attribute>、 <jsp:body>アクション要素が動的にXML要素を定義します。動的は非常に重要であり、これはXML要素がコンパイル時に動的に生成されることを意味しますが、静的ではありません。

以下の例では、XML要素を動的に定義しています:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>基本チュートリアルウェブ(oldtoolbag.com)</title>
</head>
<body>
<jsp:element name="xmlElement">
<jsp:attribute name="xmlElementAttr">
   属性値
</jsp:attribute>
<jsp:body>
   XML要素の主体
</jsp:body>
</jsp:element>
</body>
</html>

ブラウザで以下のページにアクセスし、以下の結果が表示されます:


<jsp:text>アクション要素

<jsp:text>アクション要素は、JSPページやドキュメント内でテキストを書き込むテンプレートを使用するために許可されています。以下の语法形式で表されます:

<jsp:text>テンプレートデータ</jsp:text>

上記のテキストテンプレートには重複する要素を含むことができません。テキストとEL表現(注:EL表現は後述の章で説明します)のみを含むことができます。XMLファイルでは、${whatever > 0} などの表現を使用することはできません。なぜなら、>シンボルが非法であるためです。 ${whatever gt 0} 表現や、CDATA 部分に埋め込まれた値を使用することができます。

<jsp:text><![CDATA[<br>]]></jsp:text>

XHTML で DOCTYPE を宣言する必要がある場合、<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> 及びその動作要素を使用しない場合の結果の違いを試してみてください。