1. 概要

JavaServer Pagesタグライブラリ(JSTL)は、ループ、条件付き書式設定などの一般的な操作を実装するために使用できるタグのセットです。

このチュートリアルでは、JSTLのセットアップ方法と、その多数のタグの使用方法について説明します。

2. 設定

JSTL機能を有効にするには、プロジェクトにライブラリを追加する必要があります。 Mavenプロジェクトの場合、pom.xmlファイルに依存関係を追加します。

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

ライブラリがプロジェクトに追加されたら、最終的なセットアップは、次のようなtaglibディレクティブを使用して、コアJSTLタグとその他のタグの名前空間ファイルをJSPに追加することです。

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

次に、5つのカテゴリに大まかにグループ化されたこれらのタグを見ていきます。

3. コアタグ

JSTLコアタグライブラリには、値の出力、変数宣言、例外処理、反復の実行、条件文の宣言などの基本的な操作を実行するためのタグが含まれています。

コアタグを見てみましょう。

3.1. The 鬼ごっこ

変数に含まれる値または暗黙の式の結果を表示するために使用されます。

value、default、escapeXMLの3つの属性があります。 escapeXML 属性は、value属性またはそのエンクロージャーに含まれる生のXMLタグを出力します。

の例タグは次のようになります:

<c:out value="${pageTitle}"/>

3.2. The 鬼ごっこ

The タグは、JSPでスコープ変数を宣言するために使用されます。 変数の名前とその値は、それぞれvar属性とvalue属性で宣言することもできます。

例は次の形式になります。

<c:set value="JSTL Core Tags Example" var="pageTitle"/>

3.3. The 鬼ごっこ

The タグは、割り当てと同等のスコープ変数を削除しますヌル変数に。 varおよびscope属性を取り、scopeはすべてのスコープのデフォルト値を持ちます。

以下に、の使用例を示します鬼ごっこ:

<c:remove var="pageTitle"/>

3.4. The 鬼ごっこ

The タグは、エンクロージャー内でスローされた例外をキャッチします。 例外がスローされた場合、その値はこのタグのvar属性に格納されます。

一般的な使用法は次のようになります。

<c:catch var ="exceptionThrown">
    <% int x = Integer.valueOf("a");%>
</c:catch>

そして、例外がスローされるかどうかを確認するために、 以下に示すタグ:

<c:if test = "${exceptionThrown != null}">
    <p>The exception is : ${exceptionThrown} <br />
      There is an exception: ${exceptionThrown.message}
    </p>
</c:if>

3.5. The 鬼ごっこ

The は、囲まれたスクリプトレットを表示または実行する条件付きタグです。 テスト属性はtrueと評価されます。 評価の結果は、var属性に保存できます。

3.6. タグ

The switch-likeまたはif-else式の実行に使用される親タグです。 2つのサブタグがあります。 if/else-ifとelseをそれぞれ表します。

かかりますテスト評価する式を保持する属性。 以下に、これらのタグの使用例を示します。

<c:set value="<%= Calendar.getInstance().get(Calendar.SECOND)%>" var="seconds"/>
<c:choose>
    <c:when test="${seconds le 30 }">
        <c:out value="${seconds} is less than 30"/>
    </c:when>
    <c:when test="${seconds eq 30 }">
        <c:out value="${seconds} is equal to 30"/>
    </c:when>
    <c:otherwise>
        <c:out value="${seconds} is greater than 30"/>
    </c:otherwise>
</c:choose>

3.7. The 鬼ごっこ

The タグは、絶対URLまたは相対URLからのコンテンツのフェッチと公開を処理します。

url属性とvar属性を使用して、それぞれURLとURLからフェッチされたコンテンツを保持できます。 たとえば、次の方法でURLからコンテンツをインポートできます。

<c:import var = "data" url = "http://www.example.com"/>

3.8. The 鬼ごっこ

The タグは、Javaのfor、while、またはdo-while構文に似ています。 items 属性は、繰り返されるアイテムのリストを保持し、beginおよびend属性は、それぞれ開始インデックスと終了インデックスを保持します(ゼロインデックス)。

タグにもありますステップ各反復後のインデックス増分のサイズを制御する属性。 以下に、使用例を示します。

<c:forEach var = "i" items="1,4,5,6,7,8,9">
    Item <c:out value = "No. ${i}"/><p>
</c:forEach>

3.9. The 鬼ごっこ

The タグは分割に使用されますトークンに変換し、それらを反復処理します。

に似ているタグ、それはアイテム属性と追加デリムの区切り文字である属性このような:

<c:forTokens 
  items = "Patrick:Wilson:Ibrahima:Chris" 
  delims = ":" var = "name">
    <c:out value = "Name: ${name}"/><p>
</c:forTokens>

3.10. タグ

The タグは、適切なリクエストエンコーディングでURLをフォーマットするのに役立ちます。 フォーマットされたURLはvar属性に保存されます。

タグにもあります URLパラメータを指定するために使用されるサブタグ。 以下に例を示します。

<c:url value = "/core_tags" var = "myURL">
    <c:param name = "parameter_1" value = "1234"/>
    <c:param name = "parameter_2" value = "abcd"/>
</c:url>

3.11. The 鬼ごっこ

The タグはURLの書き換えを実行し、ユーザーをそので指定されたページにリダイレクトします url 属性。 一般的な使用例は次のようになります。

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

4. タグのフォーマット

JSTLフォーマットタグライブラリは、テキスト、数値、日付、時刻、およびその他の変数をフォーマットして表示を改善するための便利な方法を提供します。

JSTLフォーマットタグを使用して、Webサイトの国際化を強化することもできます。

これらのフォーマットタグを使用する前に、taglibをJSPに追加する必要があります。

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

さまざまなフォーマットタグとその使用方法を確認しましょう。

4.1. The 鬼ごっこ

The タグは、日付または時刻のフォーマットに役立ちます。 value 属性はフォーマットされる日付を保持し、type属性は3つの値のいずれかを取ります。 日付、時刻、またはその両方

また、 パターン目的のフォーマットパターンを指定できる属性。 以下は、パターンの1つの例です。

<c:set var="now" value="<%= new java.util.Date()%>"/>
<fmt:formatDate type="time" value="${now}"/>

4.2. The 鬼ごっこ

The タグはに似ています鬼ごっこ。

違いはタグ基になる日付パーサーが日付値を期待するフォーマットパターンを指定できます。

日付を解析できます。

<c:set var="today" value="28-03-2018"/>
<fmt:parseDate value="${today}" var="parsedDate" pattern="dd-MM-yyyy"/>

4.3. The 鬼ごっこ

The タグは、特定のパターンまたは精度で数値のレンダリングを処理します。 数、通貨またはパーセンテージそので指定されているようにタイプ属性。 の使用例だろう:

<c:set var="fee" value="35050.1067"/>
<fmt:formatNumber value="${fee}" type="currency"/>

4.4. The 鬼ごっこ

The タグはに似ています鬼ごっこ。 違いはタグ基になる数値パーサーが数値を期待するフォーマットパターンを指定できます。

これは次のように使用できます。

<fmt:parseNumber var="i" type="number" value="${fee}"/>

4.5. The 鬼ごっこ

The tagはの親タグです鬼ごっこ。 で指定されたバンドルを作成しますベース名同封の属性タグ。

タグは、ロケール固有のオブジェクトを指定できるため、国際化を有効にするのに役立ちます。 一般的な使用法は次の形式になります。

<fmt:bundle basename="com.baeldung.jstl.bundles.CustomMessage" prefix="verb.">
    <fmt:message key="go"/><br/>
    <fmt:message key="come"/><br/>
    <fmt:message key="sit"/><br/>
    <fmt:message key="stand"/><br/>
</fmt:bundle>

4.6. The 鬼ごっこ

The タグは、JSP内にリソースバンドルをロードし、ページ全体で利用できるようにするために使用されます。 ロードされたリソースバンドルは、 var の属性鬼ごっこ。 バンドルは次の方法で設定できます。

<fmt:setBundle basename="com.baeldung.jstl.bundles.CustomMessage" var="lang"/>

4.7. The 鬼ごっこ

The タグは、宣言の後に配置されるJSPのセクションのロケールを設定するために使用されます。 通常、これは次のように設定します。

<fmt:setLocale value="fr_FR"/>

fr_FRは、この場合はフランス語のロケールを表します。

4.8. The 鬼ごっこ

The tagは、エンクロージャー内のタグによるタイムフォーマットまたは解析アクションで使用されるタイムゾーンを指定する親タグです。

このタイムゾーンパラメータは、value属性によって提供されます。 使用例を以下に示します。

<fmt:timeZone value="${zone}">
    <fmt:formatDate value="${now}" timeZone="${zn}" 
      type="both"/>
</fmt:timeZone>

4.9. The 鬼ごっこ

The タグを使用して、で指定されたタイムゾーンをコピーできます価値そので指定されたスコープ変数の属性 var 属性。 これを次のように定義します。

<fmt:setTimeZone value="GMT+9"/>

4.10. The 鬼ごっこ

The >> タグは、国際化メッセージを表示するために使用されます。 取得するメッセージの一意の識別子は、そのkey属性に渡す必要があります。

bundle属性を介して指定することもできるメッセージを検索するための特定のバンドル。

これは次のようになります。

<fmt:setBundle basename = "com.baeldung.jstl.bundles.CustomMessage" var = "lang"/>
<fmt:message key="verb.go" bundle="${lang}"/>

4.11. The 鬼ごっこ

The タグは、アクションタイプが次のフォームのエンコーディングタイプを指定するのに役立ちます。 役職

使用する文字エンコードの名前は、の属性鬼ごっこ。

以下の例を見てみましょう。

<fmt:requestEncoding value = "UTF-8" />

5. XMLタグ

JSTL XMLタグライブラリは、JSP内でXMLデータを操作するための便利な方法を提供します。

これらのXMLタグにアクセスできるようにするには、次の方法でタグライブラリをJSPに追加します。

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

JSTLXMLタグライブラリのさまざまなタグを見てみましょう。

5.1. The 鬼ごっこ

The タグはに似ています <%=%> JSPのスクリプトレットタグですが特にXPath式に使用されます。

タグには選択する escapeXML 評価するXPath式を指定するために使用される属性特別なXML文字のエスケープをそれぞれ有効にします。

簡単な例は次のとおりです。

<x:out select="$output/items/item[1]/name"/>

上記の$output は、プリロードされたXSLファイルを指します。

5.2. The 鬼ごっこ

The タグは、で指定されたXMLデータを解析するために使用されます xml また doc 属性またはエンクロージャ。 典型的な例は次のとおりです。

<x:parse xml="${xmltext}" var="output"/>

5.3. The 鬼ごっこ

The タグは、で指定された変数を設定します var に渡された評価済みXPath式の属性選択する属性。 典型的な例は次のとおりです。

<x:set var="fragment" select="$output//item"/>

5.4. The 鬼ごっこ

The XPath式がタグに提供された場合、タグはその本体を処理します選択する属性はtrueと評価されます。

評価の結果は、var属性に保存できます。

簡単な使用例は次のようになります。

<x:if select="$output//item">
    Document has at least one <item> element.
</x:if>

5.5. The 鬼ごっこ

The タグは、XMLドキュメント内のノードをループするために使用されます。 XMLドキュメントはタグの選択する属性。

ちょうどのようにコアタグ、 タグがあります開始、終了ステップ属性。

したがって、次のようになります。

<ul class="items">
    <x:forEach select="$output/items/item/name" var="item">
        <li>Item Name: <x:out select="$item"/></li>
    </x:forEach>
</ul>

5.6. タグ

The tagは、switch-likeまたはif / else-if / else式の実行に使用される親タグであり、属性はありませんが、囲みます。タグ。

タグはif/else-ifに似ており、 選択する評価する式を保持する属性。

タグはelse/default句に似ており、属性はありません。

以下に、サンプルのユースケースを示します。

<x:choose>
    <x:when select="$output//item/category = 'Sneakers'">
        Item category is Sneakers
    </x:when>
    <x:when select="$output//item/category = 'Heels'">
        Item category is Heels
    </x:when>
    <x:otherwise>
       Unknown category.
    </x:otherwise>
</x:choose>

5.7. タグ

The tagは、eXtensible Stylesheet Language(XSL)を適用することにより、JSP内のXMLドキュメントを変換します。

XMLドキュメントまたは変換されるはに供給されます doc 適用されるXSLがに渡される間、属性 xslt の属性鬼ごっこ。

タグはのサブタグですタグであり、変換スタイルシートでパラメーターを設定するために使用されます。

簡単なユースケースは次の形式になります。

<c:import url="/items_xml" var="xslt"/>
<x:transform xml="${xmltext}" xslt="${xslt}">
    <x:param name="bgColor" value="blue"/>
</x:transform>

6. SQLタグ

JSTL SQLタグライブラリは、リレーショナルデータベース操作を実行するためのタグを提供します。

JSTL SQLタグを有効にするには、taglibをJSPに追加します。

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

JSTL SQLタグは、MySQL、Oracle、MicrosoftSQLServerなどのさまざまなデータベースをサポートしています。

次に、使用可能なさまざまなSQLタグを確認します。

6.1. The 鬼ごっこ

The タグは、JDBC構成変数を定義するために使用されます。

これらの構成変数は、 ドライバー、URL、ユーザー、パスワード情報源の属性以下に示すタグ:

<sql:setDataSource var="dataSource" driver="com.mysql.cj.jdbc.Driver"
  url="jdbc:mysql://localhost/test" user="root" password=""/>

上記では、 var 属性は、関連付けられたデータベースを識別する値を保持します。

6.2. The 鬼ごっこ

The タグは、SQL SELECTステートメントを実行するために使用され、その結果は、で定義されたスコープ変数に格納されます。 var 属性。 通常、これを次のように定義します。

<sql:query dataSource="${dataSource}" var="result">
    SELECT * from USERS;
</sql:query>

タグの sql 属性は、実行されるSQLコマンドを保持します。 その他の属性には、 maxRows startRow 、およびdataSource。が含まれます。

6.3. The 鬼ごっこ

The タグはに似ていますタグを付けますが、戻り値を必要としないSQL INSERT、UPDATE、またはDELETE操作のみを実行します。

使用例は次のとおりです。

<sql:update dataSource="${dataSource}" var="count">
    INSERT INTO USERS(first_name, last_name, email) VALUES
      ('Grace', 'Adams', '[email protected]');
</sql:update>

タグの var 属性は、で指定されたSQLステートメントの影響を受けた行数を保持します。 sql 属性。

6.4. The 鬼ごっこ

The タグは、内で使用できるサブタグですまた次のように、SQLステートメントの値プレースホルダーの値を指定するタグ:

<sql:update dataSource = "${dataSource}" var = "count">
    DELETE FROM USERS WHERE email = ?
    <sql:param value = "[email protected]" />
</sql:update>

タグには単一の属性があります。 価値提供される値を保持します。

6.5. The 鬼ごっこ

The タグは内で使用されますまた sqlステートメントの値プレースホルダーの日付と時刻の値を指定するタグ。

これは、JSPで次のように定義できます。

<sql:update dataSource = "${dataSource}" var = "count">
    UPDATE Users SET registered = ? WHERE email = ?
    <sql:dateParam value = "<%=registered%>" type = "DATE" />
    <sql:param value = "<%=email%>" />
</sql:update>

以下のような鬼ごっこ、 タグには価値追加の属性タイプ値が次のいずれかになり得る属性日付時刻またタイムスタンプ (日時)。

6.6. The 鬼ごっこ

The タグは、グループ化によってJDBCトランザクションのような操作を作成するために使用されますこのように一緒にタグを付けます:

<sql:transaction dataSource = "${dataSource}">
    <sql:update var = "count">
        UPDATE Users SET first_name = 'Patrick-Ellis' WHERE
          email='[email protected]'
    </sql:update>
    <sql:update var = "count">
        UPDATE Users SET last_name = 'Nelson' WHERE 
          email ='[email protected]'
    </sql:update>
    <sql:update var = "count">
        INSERT INTO Users(first_name, last_name, email) 
          VALUES ('Grace', 'Adams', '[email protected]');
    </sql:update>
</sql:transaction>

タグは、いずれかの操作でエラーが発生した場合に、すべてのデータベース操作が正常に処理される(コミットされる)か、すべてが正常に失敗する(ロールバックされる)ことを保証します。

7. JSTL関数

JSTLメソッドは、JSP内のデータ操作のためのユーティリティです。 一部の関数は異なるデータ型を取りますが、それらのほとんどはString操作専用です。

JSPでJSTLメソッドを有効にするには、taglibをページに追加します。

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

これらの関数とその使用方法を見てみましょう。

7.1. fn:contains()および fn:containsIgnoreCase()

fn:contains()メソッドは、 String を評価して、次のような特定のサブストリングが含まれているかどうかを確認します。

<c:set var = "string1" value = "This is first string"/>
<c:if test = "${fn:contains(string1, 'first')}">
    <p>Found 'first' in string<p>
</c:if>

fn:contains()関数は2つのString引数を取ります。 最初の引数はソースStringで、2番目の引数はサブ文字列です。 評価の結果に応じてブール値を返します。

fn:containsIgnoreCase()関数は、 fn:contains()メソッドの大文字と小文字を区別しないバリアントであり、次のように使用できます。

<c:if test = "${fn:containsIgnoreCase(string1, 'first')}">
    <p>Found 'first' string<p>
</c:if>
<c:if test = "${fn:containsIgnoreCase(string1, 'FIRST')}">
    <p>Found 'FIRST' string<p>
</c:if>

7.3. fn:endsWith()関数

fn:endsWith()関数は、 String を評価して、そのサフィックスが別のサブストリングと一致するかどうかを確認します。 2つの引数が必要です。 最初の引数はStringであり、その接尾辞はテストされますが、2番目の引数はテストされた接尾辞です。

これは次のように定義できます。

<c:if test = "${fn:endsWith(string1, 'string')}">
    <p>String ends with 'string'<p>
</c:if>

7.4. fn:escapeXml()関数

fn:escapeXML()関数は、次のように入力StringのXMLマークアップをエスケープするために使用されます。

<p>${fn:escapeXml(string1)}</p>

7.5. fn:indexOf()関数

fn:indexOf()関数は、 String を調べて、指定されたサブストリングの最初の出現のインデックスを返します。

2つの引数が必要です。 最初の引数はソースStringであり、2番目の引数は最初のオカレンスと一致して返すサブストリングです。

fn:indexOf()関数は整数を返し、次のように使用できます。

<p>Index: ${fn:indexOf(string1, "first")}</p>

7.6. fn:join()関数

fn:join()関数は、配列のすべての要素を単一の String に連結し、次のように使用できます。

<c:set var = "string3" value = "${fn:split(string1, ' ')}" />
<c:set var = "string4" value = "${fn:join(string3, '-')}" />

7.7. fn:length()関数

fn:length()関数は、指定されたコレクション内の要素数または指定されたString内の文字数を返します。

fn:length()関数は、コレクションまたは Stringのいずれかである単一のObjectを取り、次のような整数を返します。

<p>Length: ${fn:length(string1)}</p>

7.8. fn:replace()関数

fn:replace()関数は、文字列内のすべての部分文字列を別の文字列に置き換えます。

3つの引数が必要です。 ソースString、ソースで検索するサブストリング、および String は、次のようにサブストリングのすべての出現箇所を置き換えます。

<c:set var = "string3" value = "${fn:replace(string1, 'first', 'third')}" />

7.9. fn:split()関数

fn:split()関数は、指定された区切り文字を使用して、Stringに対して分割操作を実行します。 使用例は次のとおりです。

<c:set var = "string3" value = "${fn:split(string1, ' ')}" />

7.10. fn:startsWith()関数

fn:startsWith()関数は、 String のプレフィックスをチェックし、次のように指定されたサブストリングと一致する場合はtrueを返します。

<c:if test = "${fn:startsWith(string1, 'This')}">
    <p>String starts with 'This'</p>
</c:if>

7.11. fn:substring()関数

fn:substring()関数は、指定された開始インデックスと終了インデックスでソースStringからサブストリングを作成します。 次のように使用します。

<c:set var = "string3" value = "${fn:substring(string1, 5, 15)}" />

7.12. fn:substringAfter()関数

fn:substringAfter()関数は、ソース String で指定されたサブストリングをチェックし、指定されたサブストリングが最初に出現した直後にStringを返します。

次のように使用します。

<c:set var = "string3" value = "${fn:substringAfter(string1, 'is')}" />

7.13. fn:substringBefore()関数

fn:substringBefore()関数は、ソース String で指定されたサブストリングをチェックし、指定されたサブストリングが最初に出現する直前にStringを返します。

JSPページでは、次のようになります。

<c:set var = "string3" value = "${fn:substringBefore(string1, 'is')}" />

7.14. fn:toLowerCase()関数

fn:to LowerCase()関数は、 String 内のすべての文字を小文字に変換し、次のように使用できます。

<c:set var = "string3" value = "${fn:toLowerCase(string1)}" />

7.15. fn:toUpperCase()関数

fn:toUpperCase()関数は、String内のすべての文字を大文字に変換します。

<c:set var = "string3" value = "${fn:toUpperCase(string1)}" />

7.16. fn:trim()関数

fn:trim()関数は、 String:の前後の空白を削除します

<c:set var = "string1" value = "This is first String    "/>

9. 結論

この広範な記事では、さまざまなJSTLタグとその使用方法について説明しました。

いつものように、コードスニペットはGitHubにあります。