Eine Anleitung zur JSTL-Bibliothek

Ein Leitfaden zur JSTL-Bibliothek

1. Überblick

JavaServer Pages Tag Library (JSTL) ist eine Gruppe von Tags, die zum Implementieren einiger gängiger Vorgänge wie Schleifen, bedingte Formatierung und anderer verwendet werden können.

In diesem Tutorial wird erläutert, wie Sie JSTL einrichten und die zahlreichen Tags verwenden.

2. Konfiguration

Um JSTL-Funktionen zu aktivieren, müssen wir die Bibliothek zu unserem Projekt hinzufügen. Für ein Maven-Projekt fügen wir die Abhängigkeit in der Dateipom.xmlhinzu:


    javax.servlet
    jstl
    1.2

Nachdem die Bibliothek zu unserem Projekt hinzugefügt wurde, besteht das endgültige Setup darin, das JSTL-Kern-Tag und die Namespace-Datei aller anderen Tags zu unserer JSP hinzuzufügen. Verwenden Sie dazu die Anweisung taglib wie folgt:

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

Als Nächstes werfen wir einen Blick auf diese Tags, die grob in fünf Kategorien unterteilt sind.

3. Kern-Tags

Die JSTL-Core-Tag-Bibliothek enthält Tags zum Ausführen grundlegender Vorgänge wie Drucken von Werten, Variablendeklaration, Ausnahmebehandlung, Durchführen von Iterationen und Deklarieren von bedingten Anweisungen.

Werfen wir einen Blick auf die Kern-Tags.

3.1. Das<c:out>-Tag

<c:out> wird zum Anzeigen von Werten verwendet, die in Variablen oder als Ergebnis eines impliziten Ausdrucks enthalten sind.

Es hat drei Attribute:value, default, and escapeXML. Das AttributescapeXML gibt rohe XML-Tags aus, die im Attributvalue oder seinem Gehäuse enthalten sind.

Ein Beispiel für das Tag von<c:out>ist:

3.2. Das<c:set>-Tag

Das<c:set>-Tag wird zum Deklarieren von Bereichsvariablen in JSP verwendet. Wir können den Namen der Variablen und ihren Wert auch in den Attributenvar undvaluedeklarieren.

Ein Beispiel wird von der Form sein:

3.3. Das<c:remove>-Tag

Das Tag<c:remove> entfernt Variablen mit Gültigkeitsbereich, was dem Zuweisen vonnull zu einer Variablen entspricht. Es werden die Attributevar undscope verwendet, wobeiscope einen Standardwert für alle Bereiche hat.

Unten zeigen wir ein Beispiel für die Verwendung des<c:remove>-Tags:

3.4. Das<c:catch>-Tag

Das<c:catch>-Tag fängt alle Ausnahmen ab, die in seinem Gehäuse ausgelöst werden. Wenn die Ausnahme ausgelöst wird, wird ihr Wert im Attributvardieses Tags gespeichert.

Die typische Verwendung könnte folgendermaßen aussehen:


    <% int x = Integer.valueOf("a");%>

Um zu überprüfen, ob die Ausnahme ausgelöst wird, verwenden wir das Tag<c:if> wie unten gezeigt:


    

The exception is : ${exceptionThrown}
There is an exception: ${exceptionThrown.message}

3.5. Das<c:if>-Tag

<c:if> ist ein bedingtes Tag, das die eingeschlossenen Scriptlets nur dann anzeigt oder ausführt, wenn das Attributtest den Wert true hat. Das Ergebnis der Auswertung kann in seinem Attributvar gespeichert werden.

3.6. <c:choose>,<c:when> und<c:otherwise> Tags

<c:choose> ist ein übergeordnetes Tag, das zum Ausführen von switch- oder if-else-Ausdrücken verwendet wird. Es hat zwei Untertags; <c:when> und<c:otherwise>, die if / else-if bzw. else darstellen.

<c:when> nimmt eintest-Attribut an, das den auszuwertenden Ausdruck enthält. Unten sehen Sie ein Beispiel für die Verwendung dieser Tags:



    
        
    
    
        
    
    
        
    

3.7. Das<c:import>-Tag

Das<c:import>-Tag übernimmt das Abrufen und Offenlegen von Inhalten von absoluten oder relativen URLs.

Wir können die Attributeurl undvar verwenden, um die URL bzw. den von der URL abgerufenen Inhalt zu speichern. Zum Beispiel könnten wir Inhalte von einer URL importieren, indem wir:

3.8. Das<c:forEach>-Tag

Das<c:forEach>-Tag ähnelt der Java-Syntax für, while oder do-while. Das Attributitems enthält die Liste der Elemente, über die iteriert werden soll, während die Attributebegin undendden Start- bzw. Endindex enthalten (Nullindizierung).

Das Tag<c:forEach>hat auch ein Attributstep, das die Größe des Indexinkrements nach jeder Iteration steuert. Im Folgenden zeigen wir eine beispielhafte Verwendung:


    Item 

3.9. Das<c:forTokens>-Tag

Das<c:forTokens>-Tag wird verwendet, um einString in Token aufzuteilen und diese zu durchlaufen.

Ähnlich wie das<c:forEach>-Tag hat es einitems-Attribut und ein zusätzlichesdelim-Attribut, das das Trennzeichen fürString wie folgt darstellt:


    

3.10. <c:url> und<c:param> Tags

Das<c:url>-Tag ist nützlich, um eine URL mit der richtigen Anforderungscodierung zu formatieren. Die formatierte URL wird im Attributvar gespeichert.

Das Tag von<c:url>hat auch ein Untertag von<c:param>, das zum Angeben von URL-Parametern verwendet wird. Wir zeigen ein Beispiel unten:


    
    

3.11. Das<c:redirect>-Tag

Das<c:redirect>-Tag führt eine URL-Umschreibung durch und leitet den Benutzer zu der Seite weiter, die in seinemurl-Attribut angegeben ist. Ein typischer Anwendungsfall sieht folgendermaßen aus:

4. Tags formatieren

Die JSTL-Formatierungs-Tag-Bibliothek bietet eine bequeme Möglichkeit zum Formatieren von Text, Zahlen, Datumsangaben, Uhrzeiten und anderen Variablen für eine bessere Anzeige.

JSTL-Formatierungs-Tags können auch verwendet werden, um die Internationalisierung einer Website zu verbessern.

Bevor Sie diese Formatierungs-Tags verwenden, müssen Sie die Taglib zu unserer JSP hinzufügen:

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

Lassen Sie uns die verschiedenen Formatierungs-Tags identifizieren und wie sie verwendet werden können.

4.1. Das<fmt:formatDate>-Tag

Das<fmt:formatDate>-Tag ist nützlich beim Formatieren von Datum oder Uhrzeit. Das Attributvalue enthält das zu formatierende Datum, und das Attributtypenimmt einen von drei Werten an. date, time or both.

<fmt:formatDate> hat auch einpattern-Attribut, mit dem wir das gewünschte Formatierungsmuster angeben können. Unten sehen Sie ein Beispiel für eines der Muster:


4.2. Das<fmt:parseDate>-Tag

Das<fmt:parseDate>-Tag ähnelt dem<fmt:formatDate>-Tag.

Der Unterschied besteht darin, dass wir mit dem Tag<fmt:parseDate>das Formatierungsmuster angeben können, in dem der zugrunde liegende Datumsparser den Datumswert erwarten soll.

Wir können Daten analysieren:


4.3. Das<fmt:formatNumber>-Tag

Das<fmt:formatNumber>-Tag verarbeitet das Rendern von Zahlen in einem bestimmten Muster oder einer bestimmten Genauigkeit, die eines vonnumber, currency or percentage sein kann, wie in seinemtype-Attribut angegeben. Eine beispielhafte Verwendung von<fmt:formatNumber> wäre:


4.4. Das<fmt:parseNumber>-Tag

Das<fmt:parseNumber>-Tag ähnelt dem<fmt:formatNumber>-Tag. Der Unterschied besteht darin, dass wir mit dem Tag<fmt:parseNumber>das Formatierungsmuster angeben können, in dem der zugrunde liegende Nummernparser die Nummer erwarten soll.

Wir könnten dies wie folgt verwenden:

4.5. Das<fmt:bundle>-Tag

Das<fmt:bundle>-Tag ist ein übergeordnetes Tag für das<fmt:message>-Tag. <fmt:bundle> macht das in seinem Attributbasename angegebene Bundle zu den eingeschlossenen<fmt:message>-Tags.

Das Tag<fmt:bundle>ist nützlich, um die Internationalisierung zu ermöglichen, da wir länderspezifische Objekte angeben können. Die typische Verwendung erfolgt in folgender Form:


    



4.6. Das<fmt:setBundle>-Tag

Das<fmt:setBundle>-Tag wird verwendet, um ein Ressourcenpaket in JSP zu laden und es auf der gesamten Seite verfügbar zu machen. Das geladene Ressourcenpaket wird im Attributvar des Tags<fmt:setBundle> gespeichert. Wir können bundle durch:

4.7. Das<fmt:setLocale>-Tag

Das<fmt:setLocale>-Tag wird verwendet, um das Gebietsschema für die Abschnitte in JSP festzulegen, die nach der Deklaration platziert werden. Normalerweise stellen wir dies ein durch:

fr_FR stellt das Gebietsschema dar, das in diesem Fall Französisch ist.

4.8. Das<fmt:timeZone>-Tag

Das<fmt:timeZone>-Tag ist ein übergeordnetes Tag, das die Zeitzone angibt, die von Zeitformatierungs- oder Parsing-Aktionen durch Tags in seinem Gehäuse verwendet werden soll.

Dieser Zeitzonenparameter wird durch das Attributvalue bereitgestellt. Eine Beispielverwendung ist unten gezeigt:


    

4.9. Das<fmt:setTimeZone>-Tag

Das<fmt:setTimeZone>-Tag kann verwendet werden, um die in seinemvalue-Attribut angegebene Zeitzone in eine in seinemvar-Attribut angegebene Gültigkeitsbereichsvariable zu kopieren. Wir definieren dies durch:

4.10. Das<fmt:message>-Tag

Das Tag<fmt:message> wird zum Anzeigen der Internationalisierungsnachricht verwendet. Die eindeutige Kennung für die abzurufende Nachricht sollte an das Attributkeyübergeben werden.

Ein bestimmtes Bundle zum Nachschlagen der Nachricht, das auch über das Attributbundleangegeben werden kann.

Das könnte so aussehen:


4.11. Das<fmt:requestEncoding>-Tag

Das<fmt:requestEncoding>-Tag ist nützlich, um den Codierungstyp für Formulare mit einem Aktionstyp vonpost anzugeben.

Der Name der zu verwendenden Zeichenkodierung wird über das Attributkey des Tags<fmt:requestEncoding> angegeben.

Sehen wir uns unten ein Beispiel an:

5. XML-Tags

Die JSTL-XML-Tag-Bibliothek bietet praktische Möglichkeiten für die Interaktion mit XML-Daten innerhalb einer JSP.

Um auf diese XML-Tags zugreifen zu können, fügen wir die Tag-Bibliothek unserer JSP hinzu, indem Sie:

<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>

Schauen wir uns die verschiedenen Tags in der JSTL-XML-Tag-Bibliothek an.

5.1. Das<x:out>-Tag

Das Tag<x:out> ähnelt dem Scriptlet-Tag<%= %>in JSP,<x:out> wird jedoch speziell für XPath-Ausdrücke verwendet.

Das<x:out>-Tag verfügt über die Attributeselect undescapeXML, die zum Angeben des XPath-Ausdrucks verwendet werden, umString auszuwerten und das Escapezeichen von XML-Sonderzeichen zu ermöglichen.

Ein einfaches Beispiel ist:

$output oben bezieht sich auf eine vorinstallierte XSL-Datei.

5.2. Das<x:parse>-Tag

Das Tag<x:parse> wird zum Parsen der XML-Daten verwendet, die in seinem Attributxml oderdoc __ angegeben sind. Ein typisches Beispiel wäre:

5.3. Das<x:set>-Tag

Das<x:set>-Tag setzt die in seinemvar-Attribut angegebene Variable auf den ausgewerteten XPath-Ausdruck, der an seinselect-Attribut übergeben wird. Ein typisches Beispiel wäre:

5.4. Das<x:if>-Tag

Das<x:if>-Tag verarbeitet seinen Body, wenn der XPath-Ausdruck, der für dasselect-Attribut angegeben wird, als true ausgewertet wird.

Das Ergebnis der Auswertung kann in seinem Attributvargespeichert werden.

Ein einfacher Anwendungsfall sieht folgendermaßen aus:


    Document has at least one  element.

5.5. Das<x:forEach>-Tag

Das<x:forEach>-Tag wird zum Durchlaufen von Knoten in einem XML-Dokument verwendet. Das XML-Dokument wird über dasselect-Attribut des<x:forEach>-Tags bereitgestellt.

Genau wie das Kerntag<c:forEach>hat das Tag<x:forEach>die Attributebegin, end undstep.

Wir hätten also:

  • Item Name:

5.6. <x:choose>,<x:when> und<x:otherwise> Tags

Das<x:choose>-Tag ist ein übergeordnetes Tag, das zum Ausführen von switch-ähnlichen oder if / else-if / else-Ausdrücken verwendet wird und keine Attribute hat, jedoch<x:when>- und<x:otherwise>-Tags enthält.

Das Tag von<x:when>ist ähnlich, wenn / else-if, und verwendet ein Attributselect, das den auszuwertenden Ausdruck enthält.

Das Tag von<x:otherwise>ähnelt der else / default-Klausel und hat kein Attribut.

Im Folgenden zeigen wir einen Beispielanwendungsfall:


    
        Item category is Sneakers
    
    
        Item category is Heels
    
    
       Unknown category.
    

5.7. <x:transform> und<x:param> Tags

Das<x:transform>-Tag transformiert ein XML-Dokument in JSP, indem es eine eXtensible Stylesheet Language (XSL) darauf anwendet.

Das zu transformierende XML-Dokument oderString wird an das Attributdoc übergeben, während die anzuwendende XSL an das Attributxslt des Tags<x:transform> übergeben wird.

<x:param> Tag ist ein Untertag von<x:transform> Tag und wird verwendet, um einen Parameter im Transformations-Stylesheet festzulegen.

Ein einfacher Anwendungsfall hat die Form:



    

6. SQL-Tags

JSTL SQL tag library provides tags for performing relational database operations.

Um JSTL-SQL-Tags zu aktivieren, fügen wir unserer JSP die Taglib hinzu:

<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>

JSTL-SQL-Tags unterstützen verschiedene Datenbanken, darunter MySQL, Oracle und Microsoft SQL Server.

Als Nächstes werden wir uns die verschiedenen verfügbaren SQL-Tags ansehen.

6.1. Das<sql:setDataSource>-Tag

Das<sql:setDataSource>-Tag wird zum Definieren der JDBC-Konfigurationsvariablen verwendet.

Diese Konfigurationsvariablen werden in den Attributendriver, url, user, password unddataSource des Tags<sql:setDataSource> gespeichert, wie unten gezeigt:

Oben enthält das Attributvar einen Wert, der die zugehörige Datenbank identifiziert.

6.2. Das<sql:query>-Tag

Das<sql:query>-Tag wird verwendet, um eine SQL SELECT-Anweisung auszuführen, deren Ergebnis in einer Bereichsvariablen gespeichert ist, die in ihremvar-Attribut definiert ist. Normalerweise definieren wir dies wie folgt:


    SELECT * from USERS;

Dassql-Sattribut des<sql:query>-Tags enthält den auszuführenden SQL-Befehl. Andere Attribute umfassenmaxRows,startRow unddataSource.

6.3. Das<sql:update>-Tag

Das Tag<sql:update> ähnelt dem Tag<sql:query>, führt jedoch nur SQL INSERT-, UPDATE- oder DELETE-Operationen aus, für die kein Rückgabewert erforderlich ist.

Eine Beispielverwendung wäre:


    INSERT INTO USERS(first_name, last_name, email) VALUES
      ('Grace', 'Adams', '[email protected]');

Dasvar-Sattribut des<sql:update>-Tags enthält die Anzahl der Zeilen, die von der im Attributsqlangegebenen SQL-Anweisung betroffen waren.

6.4. Das<sql:param>-Tag

Das<sql:param>-Tag ist ein Sub-Tag, das innerhalb des<sql:query>- oder<sql:update>-Tags verwendet werden kann, um einen Wert für einen Wertplatzhalter in der SQL-Anweisung wie folgt anzugeben:


    DELETE FROM USERS WHERE email = ?
    

Das Tag von<sql:param>hat ein einzelnes Attribut. value, das den zu liefernden Wert enthält.

6.5. Das<sql:dateParam>-Tag

Das Tag<sql:dateParam> wird innerhalb des Tags<sql:query> oder<sql:update> verwendet, um einen Datums- und Zeitwert für einen Wertplatzhalter in der SQL-Anweisung anzugeben.

Wir können dies in unserer JSP folgendermaßen definieren:


    UPDATE Users SET registered = ? WHERE email = ?
    
    

Wie das Tag<sql:param>hat das Tag<sql:dateParam>ein Attributvalue mit einem zusätzlichen Attributtype, dessen Wertdate, time odertimestamp ( Datum (und Uhrzeit).

6.6. Das<sql:transaction>-Tag

Das Tag<sql:transaction> wird verwendet, um eine transaktionsähnliche JDBC-Operation zu erstellen, indem die Tags<sql:query> und<sql:update>wie folgt zusammengefasst werden:


    
        UPDATE Users SET first_name = 'Patrick-Ellis' WHERE
          email='[email protected]'
    
    
        UPDATE Users SET last_name = 'Nelson' WHERE
          email ='[email protected]'
    
    
        INSERT INTO Users(first_name, last_name, email)
          VALUES ('Grace', 'Adams', '[email protected]');
    

Das Tag<sql:transaction>tellt sicher, dass alle Datenbankoperationen erfolgreich verarbeitet (festgeschrieben) oder alle ordnungsgemäß fehlgeschlagen (zurückgesetzt) ​​werden, wenn bei einer der Operationen ein Fehler auftritt.

7. JSTL-Funktionen

JSTL-Methoden sind Dienstprogramme zur Datenbearbeitung in JSP. Während einige Funktionen unterschiedliche Datentypen annehmen, sind die meisten für die Manipulation vonStringvorgesehen.

Um JSTL-Methoden in JSP zu aktivieren, fügen wir die Taglib zu unserer Seite hinzu:

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

Schauen wir uns diese Funktionen und ihre Verwendung an.

7.1. fn:contains() und fn: enthältIgnoreCase ()

Die Methodefn:contains() wertetString aus, um zu überprüfen, ob sie einen bestimmten Teilstring wie den folgenden enthält:



    

Found 'first' in string

Die Funktionfn:contains()akzeptiert zwei Argumente vonString. Das erste ist die QuelleString und das zweite Argument ist der Teilstring. Abhängig vom Ergebnis der Auswertung wird ein Boolescher Wert zurückgegeben.

Die Funktionfn:containsIgnoreCase() unterscheidet die Groß- und Kleinschreibung nicht von der Methodefn:contains()und kann folgendermaßen verwendet werden:


    

Found 'first' string

Found 'FIRST' string

7.3. Diefn:endsWith() Funktion

Die Funktionfn:endsWith() wertetString aus, um zu überprüfen, ob das Suffix mit einem anderen Teilstring übereinstimmt. Es braucht zwei Argumente; Das erste Argument istString, dessen Suffix getestet werden soll, während das zweite Argument das getestete Suffix ist.

Wir können dies wie folgt definieren:


    

String ends with 'string'

7.4. Diefn:escapeXml() Funktion

Die Funktionfn:escapeXML() wird verwendet, um das XML-Markup in der EingabeStringwie folgt zu umgehen:

${fn:escapeXml(string1)}

7.5. Diefn:indexOf() Funktion

Die Funktionfn:indexOf() durchsucht einString und gibt den Index des ersten Auftretens eines bestimmten Teilstrings zurück.

Es braucht zwei Argumente; Das erste ist die QuelleString und das zweite Argument ist der Teilstring, der übereinstimmt und das erste Vorkommen zurückgibt.

Die Funktionfn:indexOf()gibt eine Ganzzahl zurück und kann wie folgt verwendet werden:

Index: ${fn:indexOf(string1, "first")}

7.6. Diefn:join() Funktion

Die Funktionfn:join() verkettet alle Elemente eines Arrays zu einem einzigenString und kann wie folgt verwendet werden:


7.7. Diefn:length() Funktion

Die Funktionfn:length() gibt die Anzahl der Elemente in der angegebenen Sammlung oder die Anzahl der Zeichen in den angegebenenString. zurück

Die Funktionfn:length() verwendet ein einzelnesObject, das entweder eine Sammlung oder einString sein kann, und gibt eine ganze Zahl wie folgt zurück:

Length: ${fn:length(string1)}

7.8. Diefn:replace() Funktion

Die Funktionfn:replace() ersetzt alle Vorkommen eines Teilstrings in einem String durch ein anderesString.

Es braucht drei Argumente; Die QuelleString,ist der Teilstring, der in der Quelle gesucht werden soll, und derString, um alle Vorkommen des Teilstrings wie folgt zu ersetzen:

7.9. Diefn:split() Funktion

Die Funktionfn:split() führt eine Aufteilungsoperation fürString unter Verwendung des angegebenen Trennzeichens durch. Hier ist ein Anwendungsbeispiel:

7.10. Diefn:startsWith() Funktion

Die Funktionfn:startsWith() überprüft das Präfix vonString und gibt true zurück, wenn es mit einem bestimmten Teilstring wie folgt übereinstimmt:


    

String starts with 'This'

7.11. Diefn:substring() Funktion

Die Funktionfn:substring() erstellt einen Teilstring aus einer QuelleString an den angegebenen Start- und Endindizes. Wir würden es so verwenden:

7.12. Diefn:substringAfter() Funktion

Die Funktionfn:substringAfter() prüft eine QuelleString auf eine bestimmte Teilzeichenfolge und gibt dieString unmittelbar nach dem ersten Auftreten der angegebenen Teilzeichenfolge zurück.

Wir würden es so verwenden:

7.13. Diefn:substringBefore() Funktion

Die Funktionfn:substringBefore() prüft eine QuelleString auf eine bestimmte Teilzeichenfolge und gibt dieString unmittelbar vor dem ersten Auftreten der angegebenen Teilzeichenfolge zurück.

Auf unserer JSP-Seite sieht es folgendermaßen aus:

7.14. Diefn:toLowerCase() Funktion

Die Funktionfn:to LowerCase() wandelt alle Zeichen inString in Kleinbuchstaben um und kann wie folgt verwendet werden:

7.15. Diefn:toUpperCase() Funktion

Die Funktionfn:toUpperCase() wandelt alle Zeichen inString in Großbuchstaben um:

7.16. Diefn:trim() Funktion

Die Funktionfn:trim() entfernt vorhergehende und nachfolgende Leerzeichen inString:

9. Fazit

In diesem ausführlichen Artikel haben wir uns die verschiedenen JSTL-Tags und ihre Verwendung angesehen.

Wie üblich können Codefragmenteover on GitHub gefunden werden.