JSTL (JSP Standard Tag Library)
In diesem JSTL-Tutorial erfahren Sie, wie die Verwendung verschiedener JSTL-Tags die JSP-Codierung erleichtert.
Was ist JSTL in Java?
JSTL steht für Java Die Standard-Tag-Bibliothek der Serverseiten ist eine Sammlung benutzerdefinierter JSP-Tag-Bibliotheken, die allgemeine Webentwicklungsfunktionen bereitstellen. JSTL ist eine Standard-Tag-Bibliothek der JSP.
Vorteile von JSTL
Nachfolgend sind die Vorteile von JSTL aufgeführt:
- Standard-Tag: Es bietet eine umfangreiche Ebene der portablen Funktionalität von JSP-Seiten. Für einen Entwickler ist es einfach, den Code zu verstehen.
- Code ordentlich und sauber: Da Scriptlets den Entwickler verwirren, sorgt die Verwendung von JSTL dafür, dass der Code ordentlich und sauber wird.
- automatische JavaBeansInterospection-Unterstützung: Es hat einen Vorteil von JSTL gegenüber JSP-Scriptlets. JSTL Expression Language verarbeitet JavaBean-Code sehr einfach. Wir müssen die Objekte, die als bereichsbezogene Attribute abgerufen wurden, nicht herunterstufen. Die Verwendung von JSP-Scriptlet-Code wäre kompliziert, und JSTL hat diesen Zweck vereinfacht.
- Für Menschen einfacher zu lesen: JSTL basiert auf XML, das HTML sehr ähnlich ist. Daher ist es für die Entwickler leicht zu verstehen.
- Für Computer einfacher zu verstehen: Werkzeuge wie Dreamweaver und Startseite erzeugen immer mehr HTML-Code. HTML-Tools leisten hervorragende Arbeit bei der Formatierung von HTML-Code. Der HTML-Code wird mit dem Scriptet-Code gemischt. Da JSTL als XML-kompatible Tags ausgedrückt wird, ist es für die HTML-Generierung einfach, den JSTL-Code im Dokument zu analysieren.
JSTL-Tags
Die Kern-Tags sind die am häufigsten verwendeten Tags in JSP. Sie bieten Unterstützung für
- Iteration
- Bedingte Logik
- Ausnahme abfangen
- URL weiterleiten
- Weiterleitung usw.
Um Kern-Tags verwenden zu können, müssen wir zuerst die Tag-Bibliothek definieren. Nachfolgend finden Sie die Syntax zum Einbinden einer Tag-Bibliothek.
Syntax:
<%@ taglib prefix="c" uri=http://java.sun.com/jsp/jstl/core%>
Hier
- Präfix kann verwendet werden, um alle Kern-Tags und zu definieren
- uri ist die Bibliothek von Taglib, aus der es importiert wird
Sehen wir uns einige der Kern-Tags im Detail an:
1. Raus
- Das Ergebnis des Ausdrucks wird im Out-Tag angezeigt
- Es kann die XML-Tags direkt maskieren. Daher werden sie nicht als tatsächliche Tags ausgewertet
Syntax:
<c:out value="" default="" escapeXML="">
- Hier stellt der Wert Informationen für die Ausgabe dar und ist obligatorisch
- Standardmäßig werden keine Informationen ausgegeben und es ist nicht zwingend erforderlich
- escapeXML – Dies ist wahr, wenn XML-Zeichen maskiert werden.
Ejemplo:
Coretag_jsp1.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!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=ISO-8859-1"> <title>Core Tag JSP1</title> </head> <body> </body> </html>
Erklärung des Codes:
Codezeile 3: Dieses Taglib-Präfix ist für alle Tags erforderlich und das hinzugefügte Präfix ist „c“. Daher kann es als Präfix für alle Coretags verwendet werden.
Codezeile 12: Hier verwenden wir coretag out mit dem Präfix „c“ und dieses out gibt den Wert im Ausdrucks-Tag aus. Daher lautet die Ausgabe „Name“.
Wenn Sie den obigen Code ausführen, erhalten Sie die folgende Ausgabe:
Ausgang:
- Wir erhalten den Wert als Namen vom Kern-Tag „out“, der im Ausgabestream gedruckt wird.
2. Fangen
- Es fängt jede auslösbare Ausnahme ab, die im Hauptteil auftritt, und zeigt sie als Ausgabe an.
- Es dient zur Fehlerbehandlung und zum Abfangen.
Syntax:
<c:catchvar="">
Hier stellt var den Namen der Variablen dar, die eine auslösbare Ausnahme enthält.
Ejemplo:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ 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=ISO-8859-1"> <title>Core Tag JSP2</title> </head> <body> <c:catch var="guruException"> <% int num = 10/0; %> </c:catch> The Exception is : ${guruException} </body> </html>
Erklärung des Codes:
Codezeile 3: Dieses Taglib-Präfix ist für alle Tags erforderlich und das hinzugefügte Präfix ist „c“, daher kann es als Präfix für alle Coretags verwendet werden
Codezeile 11-13: Coretag Catch wird verwendet, um die Ausnahme abzufangen und zu drucken. Hier wird die Ausnahme bei 10/0 ausgelöst und diese Ausnahme hat den Namen „guruException“.
Codezeile 14: Wir drucken die „guruException“.
Wenn Sie den Code ausführen, erhalten Sie die folgende Ausgabe:
Ausgang:
- Wir erhalten eine arithmetische Ausnahme als /by Null und sie wird in der Ausgabe mit der Variablen „guruException“ gedruckt.
3. Einführen
- Wir können den Inhalt einer anderen Datei in eine JSP-Seite importieren, wie wir es in getan haben JSP-Aktion einschließen.
- Hier können wir auch die URL einfügen und die Inhalte werden auf dieser Seite angezeigt.
Syntax:
<c:importvar="" uri="">
Hier ist var ein Variablenname, der ein Bezeichner ist, der den Dateinamen/URI enthält. URI ist ein relativer Dateiname oder URI-Name.
coretag_jsp31.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ 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=ISO-8859-1"> <title>Core Tag JSP 31</title> </head> <body> <c:import var="displayfile" url="coretag_jsp32.jsp"> </c:import> <c:out value="${displayfile}"/> </body> </html>
Coretag_jsp32.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!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=ISO-8859-1"> <title>Insert title here</title> </head> <body> <a>The file is diplayed after importing</a> </body> </html>
Erklärung des Codes:
Coretag_jsp31.jsp
Codezeile 3: Dieses Taglib-Präfix ist für alle Tags erforderlich und das hinzugefügte Präfix ist „c“, daher kann es als Präfix für alle Coretags verwendet werden
Codezeile 11-12: Hier importieren wir die Datei coretag_jsp32.jsp mithilfe des Import-Tags in diese Datei
Codezeile13: Hier drucken wir die Datei coretag_jsp32.jsp mit dem Out-Tag.
Wenn Sie den obigen Code ausführen, erhalten Sie die folgende Ausgabe.
Ausgang:
- Coretag_jsp32 wird in der Ausgabe gedruckt, da diese Datei in coretag_jsp31.jsp importiert wurde.
4. für jeden
- Es wird verwendet, um die Anzahl der Elemente in einer Reihe von Anweisungen zu iterieren.
- Es ist dasselbe wie ein Java For-Schleife.
Syntax:
<c:forEach var="" begin="" end="">
- Hier stellt var den Variablennamen dar, der den Zählernamen enthält
- Begin stellt den Anfangswert des Zählers dar
- End stellt seinen Endwert dar
Ejemplo:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ 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=ISO-8859-1"> <title>Core Tag JSP4</title> </head> <body> <c:forEach var="gurucount" begin="5" end="10"> <c:out value="${gurucount}"/> </c:forEach> </body> </html>
Erklärung des Codes:
Codezeile 3: Dieses Taglib-Präfix ist für alle Tags erforderlich und das hinzugefügte Präfix ist „c“, daher kann es als Präfix für alle Coretags verwendet werden
Codezeile 11-13: Hier verwenden wir eine „forEach“-Schleife, bei der der Variablenname „gurucount“ lautet, die mit 5 beginnt und mit 10 endet. Wir drucken die Variable gurucount, die Zahlen von 5 bis 10 enthält.
Wenn Sie den Code ausführen, erhalten Sie die folgende Ausgabe
Ausgang:
- Die Ausgabe, die wir erhalten, liegt zwischen 5 und 10.
5. Wenn
- Es wird genutzt für Testen Gesundheitsproblemen.
- Wenn das Tag verwendet wird, um eine Bedingung darauf zu testen, ob sie wahr ist oder nicht, wird der Codeblock ausgeführt.
Syntax:
<c:if test="${condition}></c:if>
Wenn hier die Bedingung wahr ist, werden eine Reihe von Anweisungen ausgeführt.
Ejemplo:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ 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=ISO-8859-1"> <title>Core Tag JSP5</title> </head> <body> <c:set var="count" value="100"/> <c:if test="${count == 100}"> <c:out value="The count is 100"/> </c:if> </body> </html>
Erklärung des Codes:
Codezeile 3: Dieses Taglib-Präfix ist für alle Tags erforderlich und das hinzugefügte Präfix ist „c“, daher kann es als Präfix für alle Coretags verwendet werden
Codezeile 11: Hier setzen wir die Variable namens count auf 100
Codezeile 12-14: Hier verwenden wir eine „Wenn-Bedingung“, bei der wir prüfen, ob die Anzahl gleich 100 ist. Wenn sie gleich 100 ist, erhalten wir die Ausgabe „Die Anzahl ist 100.“
Wenn Sie den obigen Code ausführen, erhalten Sie die folgende Ausgabe
Ausgang:
- Da die „Wenn“-Bedingung wahr ist, erhalten wir die Ausgabe „Die Anzahl ist 100“.
6. Umleiten
- Es wird verwendet, um die aktuelle Seite auf eine andere URL umzuleiten, indem die relative URL dieses Tags angegeben wird.
- Es unterstützt kontextrelative URLs
Syntax:
<c:redirect url="" context=""/>
Hier ist die URL die relative URL, zu der umgeleitet werden muss, und der Kontextname der lokalen Webanwendung.
Ejemplo:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ 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=ISO-8859-1"> <title>Core Tag JSP6</title> </head> <body> <c:redirect url="/"/> </body> </html>
Erklärung des Codes:
Codezeile 3: Dieses Taglib-Präfix ist für alle Tags erforderlich und das hinzugefügte Präfix ist „c“, daher kann es als Präfix für alle Coretags verwendet werden
Codezeile 11: Hier verwenden wir das „Redirect-Tag“, in dem wir den URL-Namen angeben. Wenn wir auf diese Seite klicken, wird auf die Website weitergeleitet, die für die Weiterleitung angegeben wurde.
Wenn Sie den obigen Code ausführen, erhalten Sie die folgende Ausgabe:
Ausgang:
- Wir erhalten die Ausgabe-URL guru99.com, die von coretag_jsp6.jsp umgeleitet wird
Benutzerdefinierte JSTL-Tags
- Es handelt sich um eine benutzerdefinierte JSP Sprachelement.
- Wenn JSP in ein Servlet übersetzt wird, wird das benutzerdefinierte Tag in eine Klasse umgewandelt, die Aktionen für ein Objekt durchführt und als Tag-Handler aufgerufen wird.
- Diese Aktionen werden beim Ausführen des Servlets vom Webcontainer aufgerufen.
- Um das benutzerdefinierte benutzerdefinierte Tag zu erstellen, müssen wir den Tag-Handler erstellen, der SimpleTagSupport erweitert, und die Methode doTag() überschreiben.
- Wir müssen ein TLD erstellen, in dem wir die Klassendatei im TLD zuordnen müssen.
Vorteile benutzerdefinierter Tags in JSP
Hier sind die Vorteile von benutzerdefinierten Tags in JSP:
- Portable: Eine in einer Tag-Bibliothek beschriebene Aktion muss in jedem JSP-Container verwendbar sein.
- Simple: Unerfahrene Benutzer müssen diesen Mechanismus verstehen und verwenden können. Anbieter von JSP-Funktionen müssen diese den Benutzern problemlos als Aktionen zur Verfügung stellen können.
- Ausdrucksvoll: Der Mechanismus muss ein breites Spektrum an Aktionen unterstützen, darunter verschachtelte Aktionen, Skriptelemente innerhalb von Aktionskörpern sowie die Erstellung, Verwendung und Aktualisierung von Skriptvariablen.
- Aus verschiedenen Skriptsprachen nutzbar: Obwohl die JSP-Spezifikation derzeit nur die Semantik für Skripte im Java Programmiersprache, wir möchten die Möglichkeit anderer Skriptsprachen offen lassen.
- Aufbauend auf bestehenden Konzepten und Maschinen: Wir wollen nicht neu erfinden, was anderswo existiert. Außerdem wollen wir zukünftige Konflikte vermeiden, wann immer wir sie vorhersagen können.
Syntax:
Stellen Sie sich vor, wir erstellen das Tag testGuru und können die Klasse taghandlertestTag verwenden, die die Methode doTag() überschreibt.
<ex:testGuru/> Class testTag extends SimpleTagSupport{ public void doTag()}
Außerdem müssen wir diese TestTag-Klasse in TLD (Tag Library) abbilden Descriptoder) als JSP-Container wird automatisch eine Zuordnung zwischen der Klassendatei und der URI erstellt, die in der TLD-Datei angegeben ist.
JSP-Tag-Schnittstelle
- Diese Klasse muss die SimpleTagSupport-Klasse erweitern.
- Diese Klasse muss die Methode doTag() überschreiben, die Teil der SimpleTagSupport-Klasse ist (das Überschreiben ist eine Methode, die von der übergeordneten Klasse geerbt wird).
- Diese Schnittstelle ist eine Unterschnittstelle der JSPTag-Schnittstelle.
- Es stellt Methoden bereit, die am Anfang und Ende des Tags ausgeführt werden können.
- Außerdem müssen wir diese Klasse im TLD, dh im Tag-Bibliotheksdeskriptor, zuordnen
Wir betrachten es im folgenden Beispiel
Methode der Tag-Schnittstelle
- doTag() ist eine Methode, die wir überschreiben müssen, um den Inhalt für das Tag zu erhalten.
- Es nimmt den aktuellen JSP-Kontext mit getJSPContext()
Ejemplo:
Customtag_jsp1.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%> <!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=ISO-8859-1"> <title>Custom Tag</title> </head> <body> <ex:guruTag/> </body> </html>
Benutzerdefiniert.tld
<taglib> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>Test TLD</short-name> <tag> <name>guruTag</name> <tag-class>demotest.guruTag</tag-class> <body-content>empty</body-content> </tag> </taglib>
guruTag.java(TagHandler)
package demotest; import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*; import java.io.*; public class guruTag extends SimpleTagSupport{ public void doTag() throws JspException,IOException { JspWriter out = getJspContext().getOut(); out.println("Guru Tag"); } }
Erklärung des Codes:
guruTag.java(TagHandler)
Codezeile 6:Die Klasse guruTag erweitert die Klasse SimpleTagSupport, die im Jar javax.servlet.JSP vorhanden ist.
Codezeile 7: Hier überschreiben wir die Methode doTag(), die JspException und IOException auslöst.
Codezeile 9-10: Bei dieser Methode wird der Code in ein benutzerdefiniertes Tag eingebettet, das aufgerufen wird. Wir nehmen ein Objekt von JspWriter und das gibt „Guru Tag“ aus.
Benutzerdefiniert.tld
Codezeile 6: Hier lautet der Name des benutzerdefinierten Tags „guruTag“.
Codezeile 7:Die Tag-Klasse ist taghandlerclass, also guruTag.java. Es wird der vollständige Pfad der Handlerdatei verwendet, einschließlich des Verzeichnispfads des Speicherorts der Datei.
Customtag_jsp1.jsp
Codezeile 3:Dieses Taglib-Präfix ist für alle Tags erforderlich und das hinzugefügte Präfix ist „ex“, daher kann es als Präfix für alle Coretags verwendet werden und die URL ist „custom.tld“, die den Tag-Handler zuordnet.
Codezeile 11: Hier definieren wir das benutzerdefinierte Tag „guruTag“, das die Methode doTag() der Handlerklasse aufruft und der darin enthaltene Code ausgeführt wird.
Wenn Sie den obigen Code ausführen, erhalten Sie die folgende Ausgabe
Ausgang:
- Wir erhalten die Ausgabe als „GuruTag“ von guruTag.java, also TagHandler, der die doTag()-Methode überschreibt und „Guru Tag“ als Ausgabe ausgibt.
Zusammenfassung
- In diesem Abschnitt haben wir etwas über die JSP-Standard-Tag-Bibliothek gelernt, in der wir Kern-Tags und benutzerdefinierte Tags erstellt haben.
- Zu den Kerntags gehören die Tags „for“, „if“, „redirect“, „import“ und „catch“, bei denen es sich um Tags handelt, die für grundlegende Zwecke in JSP verwendet wurden.
- Außerdem haben wir benutzerdefinierte Tags erstellt, mit denen wir die Tags definieren und in JSP verwenden können