JSTLチュートリアル、JSTLタグの例

JSTLはJSP標準タグライブラリ(JSP Standard Tag Library)の略称です。JSTLはJSPページの動作を制御するためのタグを提供する標準タグライブラリです。JSTLのタグは、繰り返しや制御文、国際化、SQLなどに使用することができます。このJSTLチュートリアルでは、JSTLタグについて詳しく説明します。以前に、JSP ELJSPアクションタグを使用してJSPコードをHTMLのように記述する方法を見ましたが、その機能は非常に制限されています。たとえば、ELやアクション要素を使用してコレクションをループ処理することはできず、HTMLタグをエスケープしてクライアント側でテキストとして表示することもできません。これがJSTLタグの便利なところであり、JSTLタグを使用するとさらに多くのことができます。

JSTL

JSTLはJava EE APIの一部であり、ほとんどのサーブレットコンテナに含まれています。ただし、JSPページでJSTLを使用するためには、サーブレットコンテナ用のJSTLのJARファイルをダウンロードする必要があります。ほとんどの場合、これらのJARファイルはサーバのダウンロードの例題プロジェクトから見つけることができ、使用することができます。これらのライブラリをウェブアプリケーションプロジェクトのWEB-INF/libディレクトリに含める必要があります。

JSTLのJARファイル

JSTLのJARファイルはコンテナごとに異なります。たとえば、Tomcatでは、プロジェクトのビルドパスにjstl.jarstandard.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つのタイプに分類されます。

  1. JSTLコアタグ: JSTLコアタグは、反復処理、条件ロジック、例外のキャッチ、URL、レスポンスのフォワードやリダイレクトなどのサポートを提供します。JSTLコアタグを使用するには、以下のようにJSPページに含める必要があります。

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

    この記事では、重要なJSTLコアタグについて説明します。

  2. JSTLフォーマットおよびローカライゼーションタグ: JSTLフォーマットタグは、数値、日付のフォーマット、ロケールとリソースバンドルを通じたi18nサポートを提供します。これらのJSTLタグをJSPに以下の構文で含めることができます。

    <%@ taglib uri="https://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
    
  3. JSTL SQLタグ: JSTL SQLタグは、Oracle、MySqlなどのリレーショナルデータベースとのやり取りをサポートします。JSTL SQLタグを使用してデータベースクエリを実行することができます。これらのJSTLタグをJSPに以下の構文で含めることができます。

    <%@ taglib uri="https://java.sun.com/jsp/jstl/sql" prefix="sql" %>
    
  4. JSTL XMLタグ:JSTL XMLタグは、XMLドキュメントの解析、XMLデータの変換、XPath式の評価など、XMLドキュメントでの作業に使用されます。JSPページにJSTL XMLタグを含めるための構文は次のとおりです:

    <%@ taglib uri="https://java.sun.com/jsp/jstl/xml" prefix="x" %>
    
  5. JSTL関数タグ:JSTLタグは、一般的な操作を実行するために使用できるいくつかの関数を提供します。ほとんどは文字列の操作(文字列の結合、文字列の分割など)に使用されます。JSPページにJSTL関数を含めるための構文は次のとおりです:

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

すべてのJSTL標準タグのURIはhttps://java.sun.com/jsp/jstl/で始まり、任意の接頭辞を使用できますが、上記で定義された接頭辞を使用することがベストプラクティスです。他の人も同じ接頭辞を使用しているため、混乱を避けることができます。

JSTLコアタグ

JSTLコアタグは以下の表にリストされています。

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チュートリアル

シンプルなウェブアプリケーションでJSTLコアタグの使用方法を見てみましょう。プロジェクトにはJava Beanが含まれ、オブジェクトのリストを作成し、JSPで使用されるいくつかの属性を設定します。JSPページでは、コレクションの繰り返し処理、ELを使った条件付きロジック、その他の一般的な使用方法を示します。

JSTLチュートリアル – Java Beanクラス

package com.journaldev.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.journaldev.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.journaldev.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.journaldev.com");
		RequestDispatcher rd = getServletContext().getRequestDispatcher("/home.jsp");
		rd.forward(request, response);
	}

}

JSTLチュートリアル – JSPページ

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

今、URL https://localhost:8080/JSTLExample/HomeServletでアプリケーションを実行すると、以下の画像のような応答が得られます。上記のJSTLの例では、JSPのサービスメソッド内で例外をキャッチするためにを使用しています。これは、エラーページの設定とは異なります。JSP例外処理。これがJSTLのタグとJSTLコアタグの使用例のクイックな概要です。参考: JSTL Wikipediaページ

Source:
https://www.digitalocean.com/community/tutorials/jstl-tutorial-jstl-tags-example