Java で Webアプリケーション を作ろうとすると JSP で決まった処理をしたくなります。
そんなときに使えるのが JSTL (JSP Standard Tag Library) 。
ここでは JSTL の インストール から 使い方 に至るまでをまとめました。
目次
JSTL とは
JSTL (JSP Standard Tag Library) の略。
JSP の アクションタグ は JSP からプログラム的な要素を取り除き、JSP をデザインに専念できる実装環境を提供します。
こうしたアクションタグを独自に作成して利用できるようにしたものを カスタムタグ と呼びます。
この カスタムタグ をいくつかまとめてライブラリにしたものを タグライブラリ と呼びます。
JSTL は 特に標準的に利用されるカスタムタグを集めたものになります。
JSTL の インストール
JSTL を ダウンロード して Webアプリケーション プロジェクト へ組み込みを行うまでの手順をまとめます。
この手順に従って準備することで 開発する Webアプリケーション において JSTL が利用できるようになります。
必要な jarファイル 2つ をダウンロードしてきます。
ダウンロードするファイルは「javax.servlet.jsp.jstl-api-1.2.1.jar」と「javax.servlet.jsp.jstl-1.2.1.jar」の2ファイルです。
(記事記載時点の最新バージョンですので、バージョン番号は読み替えてください。)
JSTLダウンロード
-
JSTLダウンロードサイト へ 移動。
https://jstl.java.net/download.html
-
[JSTL API] へ移動。
-
[javax.servlet.jsp.jstl-api-1.2.1.jar] をダウンロード。
-
[JSTL Implementation] へ移動。
-
[javax.servlet.jsp.jstl-1.2.1.jar] をダウンロード。
プロジェクトへ組み込み
-
ダウンロードした2ファイル(「javax.servlet.jsp.jstl-api-1.2.1.jar」と「javax.servlet.jsp.jstl-1.2.1.jar」)
を「\\プロジェクト\WebContent\WEB-INF\lib」へドラッグ&ドロップ
-
[Copy files] が選ばれていることを確認して [OK] を選択。
JSPへ組み込み
-
JSTLを利用したいJSPにおいて以下のコードを記載。(以下のコードは Coreタグライブラリ を指定している例)
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Coreタグライブラリ
以下では Coreタグライブラリ の使い方を簡単にまとめています。
<c:set>
指定した変数名に値を設定します。
<c:set>で利用できる主な属性
- var
- (必須)変数名
- value
- 値
- scope
- スコープ
- target
- オブジェクト変数名
- property
- プロパティ名
サンプルコード
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="msg" value="こんにちは" />
<!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=UTF-8">
<title>サンプル</title>
</head>
<body>
${msg}
</body>
</html>
<c:out>
指定した値を出力します。
<c:out>で利用できる主な属性
- value
- (必須)任意の出力したい値
- default
- デフォルト値
- escapeXml
- XMLの予約文字をエスケープするかどうか。デフォルトは true 。
サンプルコード
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="msg" value="こんにちは" />
<!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=UTF-8">
<title>サンプル</title>
</head>
<body>
<c:out value="${msg}" />
</body>
</html>
<c:if>
指定された条件を判定して分岐処理を行います。
else に相当するタグは存在しないため、面倒でも反転処理の記載は丁寧に書く必要があります。
<c:if>で利用できる主な属性
- test
- (必須)条件式
- var
- 結果を格納する変数名
- scope
- 変数(var)のスコープ
サンプルコード
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="msg" value="こんにちは" />
<!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=UTF-8">
<title>サンプル</title>
</head>
<body>
<c:if test="${msg != ''}">値がある</c:if>
<c:if test="${msg == ''}">値がない</c:if>
</body>
</html>
<c:choose>、<c:when>、<c:otherwise>
switch-caseに相当する条件分岐処理を行います。
前述の if に近いですが、該当する when が1度しか実行されない点が異なります。
<c:choose>で利用できる主な属性
- ─
- ─
<c:when>で利用できる主な属性
- test
- (必須)判定条件式
<c:otherwise>で利用できる主な属性
- ─
- ─
サンプルコード
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="locale" value="ja" />
<!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=UTF-8">
<title>サンプル</title>
</head>
<body>
<c:choose>
<c:when test="${locale == 'ja'}">こんにちは</c:when>
<c:when test="${locale == 'it'}">Ciao</c:when>
<c:when test="${locale == 'fr'}">Bonjour</c:when>
<c:otherwise>Hello</c:otherwise>
</c:choose>
</body>
</html>
<c:forEach>
指定された回数の繰り返し処理を行います。
<c:forEach>で利用できる主な属性
- var
- ループ変数
- items
- 配列またはコレクション
- begin
- 開始値
- end
- 終了値
- step
- 増分
サンプルコード
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ 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=UTF-8">
<title>サンプル</title>
</head>
<body>
<c:forEach var="i" begin="1" end="5" step="1">
<h${i}>こんにちは!</h${i}>
</c:forEach>
</body>
</html>