JSTL-Tutorial, JSTL-Tags-Beispiel

JSTL steht für JSP Standard Tag Library. JSTL ist die Standard-Tag-Bibliothek, die Tags zur Steuerung des Verhaltens der JSP-Seite bereitstellt. JSTL-Tags können für Iterationen und Steueranweisungen, Internationalisierung, SQL usw. verwendet werden. In diesem JSTL-Tutorial werden wir uns die JSTL-Tags im Detail ansehen. Zuvor haben wir gesehen, wie wir JSP EL und JSP-Aktionstags verwenden können, um JSP-Code wie HTML zu schreiben, aber ihre Funktionalität ist sehr begrenzt. Zum Beispiel können wir mit EL oder Aktionselementen nicht durch eine Sammlung iterieren und HTML-Tags nicht entkommen, um sie wie Text auf der Clientseite anzuzeigen. Hier kommen JSTL-Tags ins Spiel, weil wir mit ihnen viel mehr machen können.

JSTL

JSTL ist Teil der Java EE API und in den meisten Servlet-Containern enthalten. Um jedoch JSTL in unseren JSP-Seiten zu verwenden, müssen wir die JSTL-Jars für Ihren Servlet-Container herunterladen. In den meisten Fällen finden Sie sie in den Beispielprojekten des Serverdownloads und können sie verwenden. Sie müssen diese Bibliotheken in das Verzeichnis Ihres Webanwendungsprojekts WEB-INF/lib einbinden.

JSTL-Jars

JSTL-Jars sind containerspezifisch. Zum Beispiel müssen in Tomcat die Jar-Dateien jstl.jar und standard.jar in den Build-Pfad des Projekts aufgenommen werden. Wenn sie nicht im Container-Lib-Verzeichnis vorhanden sind, sollten Sie sie in Ihre Anwendung einbinden. Wenn Sie ein Maven-Projekt haben, sollten die folgenden Abhängigkeiten in die Datei pom.xml aufgenommen werden, sonst erhalten Sie in JSP-Seiten folgenden Fehler: Eclipse kann die Tag-Bibliotheksbeschreibung für "https://java.sun.com/jsp/jstl/core" nicht finden

<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-Tags

Aufgrund der JSTL-Funktionen werden sie in fünf Typen kategorisiert.

  1. JSTL Core Tags: JSTL-Kerntags bieten Unterstützung für Iteration, bedingte Logik, Ausnahmebehandlung, URL, Weiterleitung oder Umleitung der Antwort usw. Um JSTL-Kerntags zu verwenden, sollten wir sie in der JSP-Seite wie unten angegeben einbinden.

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

    In diesem Artikel werden wir wichtige JSTL-Kerntags betrachten.

  2. JSTL-Formatierungs- und Lokalisierungstags: JSTL-Formatierungstags werden zur Formatierung von Zahlen, Datum und i18n-Unterstützung durch Sprachumgebungen und Ressourcenbündel bereitgestellt. Diese JSTL-Tags können wir in JSP mit folgender Syntax einbinden:

    <%@ taglib uri="https://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
    
  3. JSTL-SQL-Tags: JSTL-SQL-Tags bieten Unterstützung für die Interaktion mit relationalen Datenbanken wie Oracle, MySql usw. Mit JSTL-SQL-Tags können wir Datenbankabfragen ausführen. Wir binden diese JSTL-Tags in JSP mit folgender Syntax ein:

    <%@ taglib uri="https://java.sun.com/jsp/jstl/sql" prefix="sql" %>
    
  4. JSTL XML-Tags: JSTL XML-Tags werden verwendet, um mit XML-Dokumenten zu arbeiten, wie z.B. das Parsen von XML, die Transformation von XML-Daten und die Auswertung von XPath-Ausdrücken. Die Syntax zum Einbinden von JSTL XML-Tags in eine JSP-Seite lautet:

    <%@ taglib uri="https://java.sun.com/jsp/jstl/xml" prefix="x" %>
    
  5. JSTL Funktions-Tags: JSTL-Tags bieten eine Reihe von Funktionen, die wir zur Durchführung von häufigen Operationen verwenden können, von denen die meisten für die Zeichenkettenmanipulation wie Zeichenkettenverkettung, Zeichenkettenaufteilung usw. sind. Die Syntax zum Einbinden von JSTL-Funktionen in eine JSP-Seite lautet:

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

Beachten Sie, dass alle URI der JSTL-Standardtags mit https://java.sun.com/jsp/jstl/ beginnen und wir beliebige Präfixe verwenden können, aber es ist bewährte Praxis, das oben definierte Präfix zu verwenden, da es von jedem verwendet wird und somit keine Verwirrung entsteht.

JSTL Core-Tags

JSTL Core-Tags sind in der folgenden Tabelle aufgeführt.

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-Tutorial

Lassen Sie uns einige der Verwendungen von JSTL Core-Tags in einer einfachen Webanwendung sehen. Unser Projekt wird eine Java Bean enthalten, und wir werden eine Liste von Objekten erstellen und einige Attribute festlegen, die in der JSP verwendet werden. Die JSP-Seite zeigt, wie man über eine Sammlung iteriert, bedingte Logik mit EL verwendet und einige andere häufige Anwendungen.

JSTL-Tutorial – Java Bean-Klasse

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-Tutorial – Servlet-Klasse

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 Tutorial – JSP-Seite

home.jsp-Code:

<%@ 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>

Wenn wir die Anwendung mit der URL https://localhost:8080/JSTLExample/HomeServlet ausführen, erhalten wir die Antwort wie im folgenden Bild. Im obigen JSTL-Beispiel verwenden wir c:catch, um die Ausnahme innerhalb der JSP-Service-Methode abzufangen. Dies unterscheidet sich von der JSP-Ausnahmebehandlung mit Konfigurationen für Fehlerseiten. Das war alles für einen schnellen Überblick über JSTL-Tags und ein Beispiel für die Verwendung von JSTL-Kerntags. Referenz: JSTL Wikipedia-Seite

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