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

⚡ スマートサマリー

JSP標準タグライブラリ(JSTL)は、反復処理、条件分岐、例外処理、インポート、リダイレクトといった一般的なWeb開発機能を提供するカスタムJSPタグライブラリの集合体であり、スクリプトレットよりもJSPコードをより簡潔で移植性が高く、読みやすくします。

  • 🏷️ JSTLの定義: 一般的なWebタスクのための、標準的なカスタムJSPタグライブラリ集。
  • Advantages: スクリプトレットよりも人間やツールにとって読みやすい、クリーンで移植性の高いコードを生成します。
  • 🔧 コアタグ: out、catch、import、forEach、if、redirect は、出力、エラー、インクルード、ループ、条件を処理します。
  • 🔁 反復とロジック: forEachは範囲をループ処理するのに対し、ifとcatchは条件分岐と例外処理を追加します。
  • 🛠️ カスタムタグ: SimpleTagSupportを拡張し、doTag()をオーバーライドしてマップすることで、ユーザー定義タグを作成します。ping TLD で。
  • 📄 タグインターフェース: タグライブラリ Descriptまたは(TLD)は、JSPコンテナのタグ名をハンドラークラスにマッピングします。

JSTL - JSP標準タグライブラリ

JSTLとは何か Java?

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

JSTLのメリット

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

  1. 標準タグ: JSP ページのポータブル機能の豊富なレイヤーを提供します。 開発者にとってコードを理解するのは簡単です。
  2. Code 清楚な: スクリプトレットは開発者を混乱させるため、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>

コードの説明:

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

Code ライン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>

コードの説明:

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

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

Code ライン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

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

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

Code ライン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>

コードの説明:

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

Code 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>

コードの説明:

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

Code ライン11: ここでは count という名前の変数を 100 に設定しています。

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

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

JSTL コアタグ - If

出力:

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

6.リダイレクト

  • これは、現在のページを別のページにリダイレクトするために使用されます。 URL 相対的な URL このタグの。
  • コンテキスト相対性をサポートしています URLs

構文:

<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>

コードの説明:

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

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

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

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

出力:

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

JSTL カスタムタグ

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

JSP のカスタム タグの利点

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

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

構文:

テストを作成することを考えてみましょうGuru タグを使用すると、doTag() メソッドをオーバーライドする taghandlertestTag クラスを使用できます。

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

また、このtestTagクラスをTLD(タグライブラリ)にマッピングする必要があります。 Descriptまたは)JSPコンテナとしてマップを自動的に作成しますping クラスファイルと、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(タグハンドラー)

Code ライン6:guruTag クラスは、javax.servlet.JSP jar にある SimpleTagSupport クラスを拡張します。

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

Code 9〜10行目: この方法では、コードはカスタムタグに埋め込まれ、それが呼び出されます。JSPのオブジェクトを取得します。Writer、そしてそれは「Guru 日。"

カスタム.tld

Code ライン6: ここではカスタムタグの名前を「guruTag」とします。

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

カスタムタグ_jsp1.jsp

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

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

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

JSPタグインターフェース

出力:

  • 出力は次のようになります。GuruguruTag.java の Tag”、つまり、doTag() メソッドをオーバーライドして「Guru 出力として「タグ」を指定する。

よくあるご質問

JSTLには、コア、フォーマット(国際化)、SQL、XML、関数の18つのタググループがあります。コアタグは反復処理とロジックを扱い、フォーマット、SQL、XML、関数タグはローカライズ、データベース、XML、文字列ユーティリティを扱います。

JSTLはロジックに読みやすいXMLライクなタグを使用する一方、スクリプトレットは生の Java JSPでは、JSTLはよりクリーンで保守しやすいページを生成し、混在を回避します。 Java HTMLマークアップを含むコード。

TLDは、カスタムタグ名をハンドラークラスにマッピングするXMLファイルです。JSPコンテナはTLDを読み取って、どのタグが Java 各カスタムタグに対して実行するクラス。

AIアシスタントは、JSTLタグの生成、カスタムタグハンドラの作成、スクリプトレットのJSTLへの変換、式言語の説明などを行うことができます。開発者が生成されたコードをレビューする間、AIアシスタントはJSP開発を加速させます。

はい。AIツールはスクリプトレットコードを分析し、同等のJSTLコアタグと式言語を使用して書き換えることができます。ping 既存のJSPページを、機能性を維持しながら最新化する。