JSTL (JSP 標準タグ ライブラリ)

この JSTL チュートリアルでは、さまざまな JSTL タグを使用することで JSP コーディングがどのように容易になるかを見ていきます。

JSTLとは何か Java?

JSTL の略 Java サーバー ページの標準タグ ライブラリであり、一般的な Web 開発機能を提供するカスタム JSP タグ ライブラリのコレクションです。 JSTL は、JSP の標準タグ ライブラリです。

JSTLのメリット

JSTLのメリットは以下の通りです。

  1. 標準タグ: JSP ページのポータブル機能の豊富なレイヤーを提供します。 開発者にとってコードを理解するのは簡単です。
  2. すっきりとしたコード: スクリプトレットは開発者を混乱させるため、JSTL を使用するとコードがすっきりときれいになります。
  3. オートマチック JavabeansInterospection サポート: JSPスクリプトレットよりもJSTLの利点があります。JSTL式言語は JavaBean コードは非常に簡単です。スコープ属性として取得されたオブジェクトをダウンキャストする必要はありません。JSP スクリプトレット コードを使用すると複雑になりますが、JSTL はその目的を簡素化しました。
  4. 人間にとって読みやすくなる: JSTLは以下に基づいています XML、これは HTML に非常によく似ています。 したがって、開発者にとっては理解しやすいです。
  5. コンピューターにとって理解しやすい: などのツール Dreamweaver とフロントページでは、ますます多くの HTML コードが生成されています。 HTML ツールは、HTML コードのフォーマットに優れた機能を果たします。 HTML コードはスクリプトレット コードと混合されます。 JSTL は XML 準拠のタグとして表現されるため、HTML 生成でドキュメント内の JSTL コードを解析するのは簡単です。

JSTL タグ

コア タグは、JSP で最も頻繁に使用されるタグです。 彼らは以下のサポートを提供します

  • 繰り返し
  • 条件付きロジック
  • 例外をキャッチする
  • URL転送
  • リダイレクトなど

コアタグを使用するには、最初にタグライブラリを定義する必要があります。以下はタグライブラリを含めるための構文です。

構文:

<%@ taglib prefix="c" uri=http://java.sun.com/jsp/jstl/core%>

ここでは、

  • プレフィックスはすべてのコアタグを定義するために使用できます。
  • uri はインポート元の taglib のライブラリです。

いくつかのコアタグを詳しく見てみましょう。

1.アウト

  • 式の結果はoutタグ内に表示されます
  • XML タグを直接エスケープできます。 したがって、実際のタグとしては評価されません。

構文:

<c:out value="" default="" escapeXML="">
  • ここでの値は出力への情報を表し、必須です
  • デフォルトは情報の出力に失敗するため、必須ではありません
  • escapeXML – XML 文字をエスケープする場合は true になります。

例:

Coretag_jsp1.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Core Tag JSP1</title>
</head>
<body>

</body>
</html>

コードの説明:

コード行 3: この taglib プレフィックスはすべてのタグに必要で、追加されるプレフィックスは「c」です。 したがって、すべてのコアタグのプレフィックスとして使用できます。

コード行 12: ここでは、プレフィックス「c」を付けた coretag out を使用しており、この out は式タグの値を出力します。 したがって、出力は name になります。

上記のコードを実行すると、次の出力が得られます。

JSTL コアタグ - アウト

出力:

  • 出力ストリームに出力されるコアタグ「out」から値を名前として取得しています。

2.キャッチ

  • 本体内で発生するスロー可能な例外をキャッチし、出力として表示します。
  • エラーを処理し、エラーを捕捉するために使用されます。

構文:

<c:catchvar="">

ここで、var は、スロー可能な例外を保持する変数の名前を表します。

例:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Core Tag JSP2</title>
</head>
<body>
<c:catch var="guruException">
   <% int num = 10/0; %>
</c:catch>
The Exception is : ${guruException} 
</body>
</html>

コードの説明:

コード行 3: この taglib プレフィックスはすべてのタグに必要で、追加されるプレフィックスは「c」であるため、すべてのコアタグのプレフィックスとして使用できます。

コード行 11 ~ 13: Coretag catch は、例外をキャッチし、例外を出力するために使用されます。 ここでは、10/0 のときに例外が発生し、その例外の名前は「guruException」です。

コード行 14: 「guruException」を出力しています。

コードを実行すると、次の出力が得られます。

JSTL コアタグ - キャッチ

出力:

  • /by zero として算術例外を取得しており、変数「guruException」を使用して出力に出力されます。

3 インポート

  • で行ったように、別のファイルの内容を JSP ページにインポートできます。 JSP インクルードアクション.
  • ここで URL を含めることもでき、そのページにコンテンツが表示されます。

構文:

<c:importvar="" uri="">

ここで、var は識別子である変数名であり、ファイル名/uri を保持します。uri は相対ファイル名または uriname です。

coretag_jsp31.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Core Tag JSP 31</title>
</head>
<body>
<c:import var="displayfile" url="coretag_jsp32.jsp">
</c:import>
<c:out value="${displayfile}"/>
</body>
</html>

Coretag_jsp32.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<a>The file is diplayed after importing</a>
</body>
</html>

コードの説明:

Coretag_jsp31.jsp

コード行 3: この taglib プレフィックスはすべてのタグに必要で、追加されるプレフィックスは「c」であるため、すべてのコアタグのプレフィックスとして使用できます。

コード行 11 ~ 12: ここでは、インポートタグを使用して coretag_jsp32.jsp ファイルをこのファイルにインポートしています

コード行 13: ここでは、out タグを使用してファイル coretag_jsp32.jsp を出力しています。

上記のコードを実行すると、次の出力が得られます。

JSTL コアタグ - インポート

出力:

  • このファイルは coretag_jsp32.jsp にインポートされたため、出力には Coretag_jsp31 が表示されます。

4.それぞれに

  • 一連のステートメント内の要素の数を反復するために使用されます。
  • それは Java ループ。

構文:

<c:forEach var="" begin=""  end="">
  • ここで、var はカウンタ名を保持する変数名を表します。
  • Begin はカウンタの開始値を表します
  • End は終了値を表します

例:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Core Tag JSP4</title>
</head>
<body>
<c:forEach var="gurucount" begin="5" end="10">
 <c:out value="${gurucount}"/>
</c:forEach>
</body>
</html>

コードの説明:

コード行 3: この taglib プレフィックスはすべてのタグに必要で、追加されるプレフィックスは「c」であるため、すべてのコアタグのプレフィックスとして使用できます。

コード行 11 ~ 13: ここでは、変数名が「gurucount」で、カウントの開始値が 5、終了値が 10 である「forEach」ループを使用します。5 から 10 までの数字を持つ変数 gurucount を出力しています。

コードを実行すると、次の出力が得られます。

JSTL コアタグ - forEach

出力:

  • 得られる出力は 5 から 10 までです。

5。 もし

  • に使用されます テスト 条件。
  • これに基づいて条件が true かどうかをテストするためにタグが使用される場合、コードのブロックが実行されます。

構文:

<c:if test="${condition}></c:if>

ここで、条件が true の場合、一連のステートメントが実行されます。

例:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Core Tag JSP5</title>
</head>
<body>
<c:set var="count" value="100"/>
<c:if test="${count == 100}">
   <c:out value="The count is 100"/>
</c:if>
</body>
</html>

コードの説明:

コード行 3: この taglib プレフィックスはすべてのタグに必要で、追加されるプレフィックスは「c」であるため、すべてのコアタグのプレフィックスとして使用できます。

コード行 11: ここでは count という名前の変数を 100 に設定しています。

コード行 12 ~ 14: ここでは、カウントが 100 に等しいかどうかをチェックする「if 条件」を使用しています。 カウントが 100 に等しい場合は、「カウントは 100 です」という出力が得られます。

上記のコードを実行すると、次の出力が得られます。

JSTL コアタグ - If

出力:

  • 「if」条件が true であるため、「カウントは 100 です」という出力が得られます。

6.リダイレクト

  • このタグの相対 URL を指定することで、現在のページを別の URL にリダイレクトするために使用されます。
  • コンテキスト相対 URL をサポートします

構文:

<c:redirect url="" context=""/>

ここで、url はリダイレクト先の相対 URL とローカル Web アプリケーションのコンテキスト名です。

例:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Core Tag JSP6</title>
</head>
<body>
<c:redirect url="/"/>
</body>
</html>

コードの説明:

コード行 3: この taglib プレフィックスはすべてのタグに必要で、追加されるプレフィックスは「c」であるため、すべてのコアタグのプレフィックスとして使用できます。

コード行 11: ここでは、URL 名を指定する「リダイレクト タグ」を使用し、そのページをクリックすると、リダイレクト用に指定されたサイトにリダイレクトされます。

上記のコードを実行すると、次の出力が得られます。

JSTL コアタグ - リダイレクト

出力:

  • coretag_jsp99.jsp によってリダイレクトされる出力 guru6.com URL を取得します。

JSTL カスタムタグ

  • これはユーザー定義の JSP 言語要素。
  • JSP がサーブレットに変換されると、カスタム タグはオブジェクトに対してアクションを実行し、タグ ハンドラーとして呼び出されるクラスに変換されます。
  • サーブレットの実行時のこれらのアクションは、Web コンテナによって呼び出されます。
  • ユーザー定義のカスタム タグを作成するには、SimpleTagSupport を拡張するタグ ハンドラーを作成し、doTag() メソッドをオーバーライドする必要があります。
  • TLD でクラス ファイルをマップする必要がある TLD を作成する必要があります。

JSP のカスタム タグの利点

JSP のカスタム タグの利点は次のとおりです。

  • ポータブル: タグ ライブラリに記述されたアクションは、どの JSP コンテナでも使用できる必要があります。
  • シンプル: 経験の浅いユーザーでもこのメカニズムを理解して使用できる必要があります。JSP 機能のベンダーは、ユーザーがアクションとして簡単に利用できるようにする必要があります。
  • 表現力: メカニズムは、ネストされたアクション、アクション本体内のスクリプト要素、スクリプト変数の作成、使用、更新など、幅広いアクションをサポートする必要があります。
  • さまざまなスクリプト言語から使用可能: JSP仕様では、現在、 Java プログラミング言語として、他のスクリプト言語の可能性も残しておきたいと考えています。
  • 既存のコンセプトと機械に基づいて構築: 私たちは、他の場所に存在するものを再発明したいわけではありません。また、予測できる限り将来の紛争を避けたいのです。

構文:

testGuru タグを作成していると考えてください。doTag() メソッドをオーバーライドする taghandlertestTag クラスを使用できます。

<ex:testGuru/>
Class testTag extends SimpleTagSupport{ public void doTag()}

また、このtestTagクラスをTLD(タグライブラリ)にマッピングする必要があります。 Descriptまたは、JSP コンテナーは、TLD ファイルに記載されているクラス ファイルと URI 間のマッピングを自動的に作成します。

JSPタグインターフェース

  • このクラスは SimpleTagSupport クラスを拡張する必要があります。
  • このクラスは、SimpleTagSupport クラスの一部である doTag() メソッドをオーバーライドする必要があります (オーバーライドは親クラスから継承されるメソッドです)。
  • このインターフェースは、JSPTagインターフェースのサブインターフェースです。
  • タグの先頭と末尾で実行するメソッドを提供します。
  • また、このクラスを TLD、つまりタグ ライブラリ記述子にマッピングする必要があります。

以下の例で考えています

タグインターフェースのメソッド

  • doTag() は、タグのコンテンツを含むオーバーライドする必要があるメソッドです。
  • getJSPContext() を使用して現在の JSP コンテキストを取得します。

例:

カスタムタグ_jsp1.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Custom Tag</title>
</head>
<body>
<ex:guruTag/>
</body>
</html>

カスタム.tld

<taglib>
  <tlib-version>1.0</tlib-version>
  <jsp-version>2.0</jsp-version>
  <short-name>Test TLD</short-name>
  <tag>
    <name>guruTag</name>
    <tag-class>demotest.guruTag</tag-class>
    <body-content>empty</body-content>
  </tag>
</taglib>

guruTag.java(タグハンドラー)

package demotest;
import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;
import java.io.*;

public class guruTag extends SimpleTagSupport{
	public void doTag() throws JspException,IOException
	{
		JspWriter out = getJspContext().getOut();
		out.println("Guru Tag");
	}

}

コードの説明:

guruTag.java(タグハンドラー)

コード行 6:guruTag クラスは、javax.servlet.JSP jar にある SimpleTagSupport クラスを拡張します。

コード行 7: ここでは、JspException と IOException をスローする doTag() メソッドをオーバーライドしています。

コード行 9 ~ 10: このメソッドでは、呼び出されるカスタム タグにコードが埋め込まれます。 JspWriter のオブジェクトを取得し、「Guru Tag」を出力します。

カスタム.tld

コード行 6: ここではカスタムタグの名前を「guruTag」とします。

コード行 7:タグクラスはtaghandlerclass、つまりguruTag.javaです。 ファイルの場所のディレクトリ パスを含むハンドラー ファイルのフル パスを受け取ります。

カスタムタグ_jsp1.jsp

コード行 3:この taglib プレフィックスはすべてのタグに必要で、追加されるプレフィックスは「ex」であるため、すべてのコアタグのプレフィックスとして使用でき、uri はタグ ハンドラーをマップするcustom.tldです。

コード行 11: ここではカスタム タグ「guruTag」を定義しています。これはハンドラー クラスの doTag() メソッドを呼び出し、その中のコードが実行されます。

上記のコードを実行すると、次の出力が得られます。

JSPタグインターフェース

出力:

  • guruTag.java、つまり TagHandler から出力を「GuruTag」として取得します。これは doTag() メソッドをオーバーライドし、出力として「Guru Tag」を出力します。

まとめ

  • このセクションでは、コア タグとカスタム タグを作成する JSP 標準タグ ライブラリについて学習しました。
  • コア タグには、JSP の基本的な目的で使用されるタグである for、if、redirect、import、catch タグが含まれます。
  • また、タグを定義して JSP で使用できるカスタム タグも作成しました。