JSTL の 使い方

0 件のコメント

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ダウンロード

  1. JSTLダウンロードサイト へ 移動。

    https://jstl.java.net/download.html

  2. [JSTL API] へ移動。

  3. [javax.servlet.jsp.jstl-api-1.2.1.jar] をダウンロード。

  4. [JSTL Implementation] へ移動。

  5. [javax.servlet.jsp.jstl-1.2.1.jar] をダウンロード。

プロジェクトへ組み込み

  1. ダウンロードした2ファイル(「javax.servlet.jsp.jstl-api-1.2.1.jar」と「javax.servlet.jsp.jstl-1.2.1.jar」) を「\\プロジェクト\WebContent\WEB-INF\lib」へドラッグ&ドロップ

  2. [Copy files] が選ばれていることを確認して [OK] を選択。

JSPへ組み込み

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