検索

キーワード


【Java】JSPでタグライブラリを使う(JSTL)

  • 公開日:2020-10-21 16:32:14
  • 最終更新日:2020-11-13 21:52:14
【Java】JSPでタグライブラリを使う(JSTL)

こんにちは。エンジニアの新田です!

ここでは、システムエンジニアとして働いている私が、システム開発手法や開発言語について紹介していこうと思います。

今回は、JSPの標準タグライブラリ「JSTL」について紹介します。

Javaについて勉強している方、Webアプリケーションを構築したいと思っている方の参考になれば幸いです!

関連記事リンク: 【Java】JSPの基本的な構文【Java】JSPのアクションタグ【Java】JSPのディレクティブ【Java】JSPのEL式


JSTLとは?

JSTLは「JSP Standard Tag Library」の略で、JSP内でよく使われる機能をタグライブラリとしてまとめたものです。

JSTLとEL式を組み合わせることで、スクリプトレットレスなJSPを記述することが可能となり、可読性・保守性が向上します。

また、実装が既に提供されており、開発者がタグの実装をしなくて済むため、開発時間の短縮につながる事や、ノウハウが蓄積され標準化された仕様であるため、高い安定性がある事がメリットといえます。

JSPのアクションタグを独自に作成して利用できるようにしたものをカスタムタグと呼び、このカスタムタグをまとめてライブラリ化したものをタグライブラリと呼びます。



JSTLに含まれているタグライブラリ

JSTLは提供される機能により、5つのタグライブラリ(Core, i18n, Database, XML, Functions)に分類されています。

※この記事ではよく使われるものとして、Core, i18nの一部のタグについて紹介します。

JSTLに含まれている、5つのタグライブラリ


JSTLを使う準備

JSTLのタグライブラリは、JARファイル形式で提供されており、JSPの動作環境にそのまま追加して使用することが可能です。

Eclipseの動的Webプロジェクトでの構成を前提に説明します。

jarファイルの入手方法

以下のサイトからJSTLのjarファイルをダウンロードします。

Apache Tomcatのサイト

https://tomcat.apache.org/download-taglibs.cgi


ダウンロードするファイル

・taglibs-standard-impl-1.2.5.jar

・taglibs-standard-jstlel-1.2.5.jar

・taglibs-standard-spec-1.2.5.jar

ダウンロードするファイル



jarファイルの配置方法

ダウンロードしたjarファイルを対象プロジェクトの「WEB-INF\lib」配下に配置します。

eclipseのプロジェクトエクスプローラーで見たときに以下のような構成になります。

jarファイルの配置方法



タグライブラリの使用方法

JSPでタグライブラリを使用する場合は、「taglib」ディレクティブを使用して、利用したいタグライブラリを宣言します。

<%@ taglib prefix="prefix名" uri="TLDファイルのURI" %>


prefix名、TLDファイルのURIには以下の値を使用します。

(prefix(接頭辞)には任意の文字列を指定可能ですが、可読性の観点から規定されている接頭辞を用いるのが望ましい。)

Core

prefix="c" uri="http://java.sun.com/jsp/jstl/core"

i18n

prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"

Function

prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"

XML

prefix="x" uri="http://java.sun.com/jsp/jstl/xml"

Database

prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"




Core タグライブラリ

Coreタグライブラリの主なタグ一覧です。

この記事では、よく使われる一部のタグについて、使用方法を紹介します。

主なCoreタグライブラリ


c:set、c:remove、c:out

c:set (変数を設定)
<c:set var="変数名" value="初期値" [scope="スコープ"] />

c:setの属性


c:remove (変数を削除)
<c:remove var="変数名" [scope="スコープ"] />

c:removeの属性


c:out (変数を出力)
<c:out value="出力値" [default="デフォルト値"] [escapeXml="ブール値"]/> 

c:outの属性


サンプルコード

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        「c:set」で変数messageに値を設定、「c:out」で出力<br/>
        <c:set var="message" value="こんにちは!" />
         ⇒ message= <c:out value="${message}" />
        <br/><br/>
        「c:remove」で変数messageを削除、「c:out」で出力<br/>
        <c:remove var="message" />
         ⇒ message= <c:out value="${message}" />
    </body>
</html>


実行結果

c:set、c:remove、c:outのサンプルコードの実行結果



c:if、c:choose

c:if (単一の条件分岐)
<c:if test="条件式" [var="条件式の結果を格納する変数"] [scope="変数を格納するスコープ"]>
    条件式がtrueの場合の処理
</c:if>

c:ifの属性


c:choose (複数の条件分岐)
<c:choose>
    <c:when test="条件式">条件に一致した場合の処理</c:when>
    <c:when test="条件式">条件に一致した場合の処理</c:when>
    <c:otherwise>全ての条件に一致しなかった場合の処理</c:otherwise>
</c:choose>

※c:chooseタグは、c:whenタグ、c:otherwiseタグを入れ子にして使用します。

c:whenタグ、c:otherwiseの説明

サンプルコード

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        「c:set」で変数numに値「9」を設定<br/>
        「c:if」で10以下の値か判定<br/>
        <br/>
        <c:set var="num" value="9"/>
        <c:if test="${num <= 10 }">
             ⇒変数numは、10以下です
        </c:if>
        <br/>
        <br/>
        <hr/>
        「c:set」で変数num2に値「4」を設定<br/>
        「c:choose」で10以上または59の値か判定、条件に当てはまらない場合は4以下と判定<br/>
        <br/>
        <c:set var="num2" value="4"/>
        <c:choose>
            <c:when test="${num2 >= 10}">
                 ⇒変数numは、10以上です
            </c:when>
            <c:when test="${num2 >= 5}">
                 ⇒変数numは、59です
            </c:when>
            <c:otherwise>
                 ⇒変数numは、4以下です
            </c:otherwise>
        </c:choose>
    </body>
</html>


実行結果

c:if、c:chooseのサンプルコードの実行結果



c:forEach

c:forEach (繰り返し)

回数指定による繰り返し

<c:forEach begin="開始値" end="終了値" [var="カウンタ変数名" ] [step="増分値"]>

コレクション・配列の要素を参照しながら繰り返し

<c:forEach var="コレクション・配列の各要素を表す変数名" items="コレクション・配列を参照する変数名" >

c:forEachの属性


サンプルコード

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        「c:forEach」15まで増分2で繰り返し<br/>
        「c:out」で現在のindex値を出力<br/>
        <br/>
        <c:forEach begin="1" end="5" step="2" var="index">
             index:<c:out value="${index}"/><br>
        </c:forEach>
        <br/>
        <br/>
        <hr/>
        「c:set」で変数strにカンマ区切りの文字列を設定<br/>
        「c:forEach」でカンマで区切られた文字列を1つずつ取得してループ<br/>
        「c:out」で現在のindexと取得した文字列を出力<br/>
        <br/>
        <c:set var="str" value="A,B,C,D,E" />
        <c:forEach var="item" items="${str}" varStatus="status">
            <c:out value="${status.index}" /><c:out value="${item}" /><br>
        </c:forEach>
    </body>
</html>

※「c:forEach」の「items」にカンマ区切りの文字列を指定する事で、カンマ部分で区切られた文字列の配列として処理されます

実行結果

c:forEachのサンプルコードの実行結果




I18Nライブラリ

I18Nタグライブラリの主なタグ一覧です。

この記事では、よく使われる一部のタグについて、使用方法を紹介します。

I18Nタグライブラリの主なタグ一覧


fmt:formatNumber

fmt:formatNumber (数値データを指定した書式でフォーマットする)
<fmt:formatNumber value="数値データ" [pattern="書式パターン"] [type="数値データの種別"] [・・・] />

fmt:formatNumberの属性

サンプルコード

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        フォーマット未指定(デフォルト)<br/>
        <fmt:formatNumber value="1234" /><br>
        カンマ区切り(0埋めしない)<br>
        <fmt:formatNumber value="1234" pattern="###,###" /><br>
        桁数指定(patternで指定、ゼロ埋めする)<br>
        <fmt:formatNumber value="12.34" pattern="000.000" /><br>
        パーセント表示<br>
        <fmt:formatNumber value="0.1234" pattern="##.#%" /><br>
        カンマ区切りで表示させない<br>
        <fmt:formatNumber value="1234" groupingUsed="false" /><br>
        桁数指定(属性値で指定)<br>
        <fmt:formatNumber value="1234.5678"
            maxIntegerDigits="5" minIntegerDigits="5"
            maxFractionDigits="5" minFractionDigits="0" /><br>
        通貨記号を付与<br>
        <fmt:formatNumber value="123456"
            type="CURRENCY" currencySymbol="$" /><br>
    </body>
</html>


実行結果

fmt:formatNumberのサンプルコードの実行結果



fmt:formatDate

formatDate(日付データを指定した書式でフォーマットする)
<fmt:formatDate value="日付データ" [pattern="書式パターン"] [type="日付データの種別"] [・・・] />

fmt:formatDateの属性


サンプルコード

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <jsp:useBean id="date" class="java.util.Date" />

        フォーマット未指定(デフォルト)<br/>
        <fmt:formatDate value="${date}" /><br>
        <hr/>
        表示タイプの指定<br/>
        [type="DATE"]
         <fmt:formatDate value="${date}" type="DATE"/><br>
        [type="TIME"]
         <fmt:formatDate value="${date}" type="TIME"/><br>
        [type="BOTH"]
         <fmt:formatDate value="${date}" type="BOTH"/><br>
        <hr/>
        日付表示のスタイル指定<br/>
        [dateStyle="FULL"]
         <fmt:formatDate value="${date}" type="DATE" dateStyle="FULL" /><br>
        [dateStyle="LONG"]
         <fmt:formatDate value="${date}" type="DATE" dateStyle="LONG" /><br>
        [dateStyle="MEDIUM"]
         <fmt:formatDate value="${date}" type="DATE" dateStyle="MEDIUM" /><br>
        [dateStyle="SHORT"]
         <fmt:formatDate value="${date}" type="DATE" dateStyle="SHORT" /><br>
        <hr/>
        時刻表示のスタイル指定<br/>
        [timeStyle="FULL"]
         <fmt:formatDate value="${date}" type="TIME" timeStyle="FULL" /><br>
        [timeStyle="LONG"]
         <fmt:formatDate value="${date}" type="TIME" timeStyle="LONG" /><br>
        [timeStyle="MEDIUM"]
         <fmt:formatDate value="${date}" type="TIME" timeStyle="MEDIUM" /><br>
        [timeStyle="SHORT"]
         <fmt:formatDate value="${date}" type="TIME" timeStyle="SHORT" /><br>
        <hr/>
        パターン指定<br/>
        [pattern="yyyy/MM/dd HH:mm:ss"]
         <fmt:formatDate value="${date}" pattern="yyyy/MM/dd HH:mm:ss" /><br>
        [pattern="yyyy年MM月dd日(E) a KK時mm分ss秒"]
         <fmt:formatDate value="${date}" pattern="yyyy年MM月dd日(E) a KK時mm分ss秒" /><br>
        [pattern="y年M月d日 H時m分s秒"]
         <fmt:formatDate value="${date}" pattern="y年M月d日 H時m分s秒" /><br>
    </body>
</html>


実行結果

fmt:formatDateのサンプルコードの実行結果




関連記事リンク: 【Java】JSPの基本的な構文【Java】JSPのアクションタグ【Java】JSPのディレクティブ【Java】JSPのEL式




【著者】

新田

JavaメインのWebアプリケーション開発に多く携わっています。
Javaの基本的な部分の紹介や、これまで経験したシステム開発手法、新しい技術についても紹介していこうと思います。

よく読まれている記事
【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!そもそもStringとは何?『 String 』... Java言語において文字列のデータ型を指します。基本デ

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!Stringクラスformatメソッドの文字列整形【java.utilパッケージ】Formatterクラスfo

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者にも✅、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!文字列を扱う3つのクラス【java.langパッケージ】java.langパッケージの文字列を扱うクラスにはS

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!プリミティブ型と参照型プログラム開発では型を持った変数を使ってデータのやり取りをしますが、データ型によって仕様

【Java】よく使う日時クラス解説まとめ

【Java】よく使う日時クラス解説まとめ

こんにちは、駆け出しエンジニアの伊藤です。東京ITカレッジのJava研修で学んだ内容を復習も兼ねて記事にしたいと思います。今回は、日付時刻のまとめとして、日付時刻に関する基本的なクラスやメソッド等の概要を紹介していきます。より詳しく知りたい!という方は、リンク先の関連記事をご参考にしてください。Javaやプログラムについて勉強し始めた方の参考になれば幸いです!(eclipseを使用して計算を行って