JSTL チュートリアル、JSTL タグの例
JSTLはJSP標準タグライブラリの略です。JSTLは、JSPページの振る舞いを制御するためのタグを提供する標準タグライブラリです。JSTLタグは、繰り返しや制御文、国際化、SQLなどに使用することができます。このJSTLチュートリアルでは、JSTLタグについて詳しく見ていきます。以前、JSP ELやJSPアクションタグを使用してJSPコードをHTMLのように記述する方法を見ましたが、その機能は非常に限定されています。たとえば、ELやアクション要素を使用してコレクションを繰り返すことはできず、HTMLタグをテキストとしてクライアント側に表示することもできません。ここでJSTLタグが役立つのは、JSTLタグを使用することでさらに多くのことができるからです。
JSTLを日本語で言い換えると、「JSP標準タグライブラリー」となります。
JSTLはJava EE APIの一部であり、ほとんどのサーブレットコンテナに含まれています。しかし、JSPページでJSTLを使用するためには、サーブレットコンテナ用のJSTLのJARファイルをダウンロードする必要があります。ほとんどの場合、サーバーダウンロードの例プロジェクトからそれらを見つけることができ、利用することができます。これらのライブラリをウェブアプリケーションのプロジェクトのWEB-INF/libディレクトリに含める必要があります。
JSTLのjarファイル
JSTLのJARファイルはコンテナに依存します。例えばTomcatにおいては、プロジェクトのビルドパスにjstl.jarとstandard.jarのJARファイルを含める必要があります。もしコンテナのlibディレクトリにこれらのファイルが存在しない場合、アプリケーションに追加する必要があります。もしもMavenプロジェクトを利用している場合、以下の依存関係をpom.xmlファイルに追加する必要があります。そうしなければ、JSPページで以下のエラーが発生します:eclipse Can not find the tag library descriptor for “https://java.sun.com/jsp/jstl/core”。
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
JSTL タグ
JSTLの関数は、5つのタイプに分類されます。
-
- JSTLコアタグ:JSTLコアタグは、反復、条件付きロジック、例外のキャッチ、URL、レスポンスの転送またはリダイレクトなどのサポートを提供します。JSTLコアタグを使用するためには、以下のようにJSPページに含める必要があります。
-
- <%@ taglib uri=”https://java.sun.com/jsp/jstl/core” prefix=”c” %>
この記事では、重要なJSTLコアタグについて説明します。
JSTLフォーマットとローカライゼーションタグ:JSTLフォーマットタグは、数字、日付、およびロケールとリソースバンドルを介したi18nサポートのフォーマットに使用されます。これらのJSTLタグをJSPに含めるには、以下の構文を使用します:
<%@ taglib uri=”https://java.sun.com/jsp/jstl/fmt” prefix=”fmt” %>
JSTL SQLタグ:JSTL SQLタグは、Oracle、MySQLなどの関係データベースとの対話をサポートします。JSTL SQLタグを使用してデータベースクエリを実行することができます。これらのJSTLタグをJSPに含めるには、以下の構文を使用します:
<%@ taglib uri=”https://java.sun.com/jsp/jstl/sql” prefix=”sql” %>
JSTL XMLタグ:JSTL XMLタグは、XML文書の解析、XMLデータの変換、XPath式の評価など、XML文書の操作に使用されます。JSPページにJSTL XMLタグを含めるための構文は以下の通りです:
<%@ taglib uri=”https://java.sun.com/jsp/jstl/xml” prefix=”x” %>
JSTL関数タグ:JSTLタグには、文字列の連結、文字列の分割などの一般的な操作を実行するために使用できる多くの関数があります。JSPページにJSTL関数を含めるための構文は以下の通りです:
<%@ taglib uri=”https://java.sun.com/jsp/jstl/functions” prefix=”fn” %>
すべてのJSTLの標準タグURIは、https://java.sun.com/jsp/jstl/から始まります。任意の接頭辞を使用することができますが、混乱を避けるためには上記で定義された接頭辞を使用することが最善です。誰もがそれを使っているので、混乱は生じません。
以下の内容を日本語で自然に言い換えてください。1つのオプションで構いません。
JSTLコアタグ
以下の表には、JSTL Coreタグが一覧表示されています。
JSTL Core Tag | Description |
---|---|
<c:out> | To write something in JSP page, we can use EL also with this tag |
<c:import> | Same as jsp:include or include directive |
<c:redirect> | redirect request to another resource |
<c:set> | To set the variable value in given scope. |
<c:remove> | To remove the variable from given scope |
<c:catch> | To catch the exception and wrap it into an object. |
<c:if> | Simple conditional logic, used with EL and we can use it to process the exception from <c:catch> |
<c:choose> | Simple conditional tag that establishes a context for mutually exclusive conditional operations, marked by <c:when> and <c:otherwise> |
<c:when> | Subtag of <c:choose> that includes its body if its condition evalutes to ‘true’. |
<c:otherwise> | Subtag of <c:choose> that includes its body if its condition evalutes to ‘false’. |
<c:forEach> | for iteration over a collection |
<c:forTokens> | for iteration over tokens separated by a delimiter. |
<c:param> | used with <c:import> to pass parameters |
<c:url> | to create a URL with optional query string parameters |
JSTLのチュートリアル
簡単なWebアプリケーションでJSTLコアタグの使用方法を見てみましょう。プロジェクトにはJava Beanが含まれ、オブジェクトのリストを作成し、JSPで使用される属性を設定します。JSPページでは、コレクションの反復処理方法やELを使用した条件付きロジック、その他一般的な使用方法を示します。
JSTL チュートリアル – Java ビーンクラス
package com.scdev.model;
public class Employee {
private int id;
private String name;
private String role;
public Employee() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
}
JSTL チュートリアル – Servlet クラス
package com.scdev.servlet;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.scdev.model.Employee;
@WebServlet("/HomeServlet")
public class HomeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<Employee> empList = new ArrayList<Employee>();
Employee emp1 = new Employee();
emp1.setId(1); emp1.setName("Pankaj");emp1.setRole("Developer");
Employee emp2 = new Employee();
emp2.setId(2); emp2.setName("Meghna");emp2.setRole("Manager");
empList.add(emp1);empList.add(emp2);
request.setAttribute("empList", empList);
request.setAttribute("htmlTagData", "<br/> creates a new line.");
request.setAttribute("url", "https://www.scdev.com");
RequestDispatcher rd = getServletContext().getRequestDispatcher("/home.jsp");
rd.forward(request, response);
}
}
JSTL チュートリアル – JSP ページ
ホーム.jspのコード:
<%@ page language="java" contentType="text/html; charset=US-ASCII"
pageEncoding="US-ASCII"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Home Page</title>
<%@ taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c" %>
<style>
table,th,td
{
border:1px solid black;
}
</style>
</head>
<body>
<%-- Using JSTL forEach and out to loop a list and display items in table --%>
<table>
<tbody>
<tr><th>ID</th><th>Name</th><th>Role</th></tr>
<c:forEach items="${requestScope.empList}" var="emp">
<tr><td><c:out value="${emp.id}"></c:out></td>
<td><c:out value="${emp.name}"></c:out></td>
<td><c:out value="${emp.role}"></c:out></td></tr>
</c:forEach>
</tbody>
</table>
<br><br>
<%-- simple c:if and c:out example with HTML escaping --%>
<c:if test="${requestScope.htmlTagData ne null }">
<c:out value="${requestScope.htmlTagData}" escapeXml="true"></c:out>
</c:if>
<br><br>
<%-- c:set example to set variable value --%>
<c:set var="id" value="5" scope="request"></c:set>
<c:out value="${requestScope.id }" ></c:out>
<br><br>
<%-- c:catch example --%>
<c:catch var ="exception">
<% int x = 5/0;%>
</c:catch>
<c:if test = "${exception ne null}">
<p>Exception is : ${exception} <br>
Exception Message: ${exception.message}</p>
</c:if>
<br><br>
<%-- c:url example --%>
<a href="<c:url value="${requestScope.url }"></c:url>">JournalDev</a>
</body>
</html>
現在、https://localhost:8080/JSTLExample/HomeServletのURLでアプリケーションを実行すると、以下の画像のような応答を受け取ります。上記のJSTLの例では、JSPサービスメソッド内で例外をキャッチするためにc:catchを使用しています。これは、JSPエラーページの設定とは異なります。これがJSTLタグの簡単な概要とJSTLコアタグの使用例です。参考文献:JSTL Wikipediaページ