JSTL (biblioteka znaczników standardowych JSP)

⚡ Inteligentne podsumowanie

JSP Standard Tag Library (JSTL) to zbiór niestandardowych bibliotek tagów JSP, które zapewniają typowe funkcje tworzenia stron internetowych, takie jak iteracja, logika warunkowa, obsługa wyjątków, importowanie i przekierowywanie. Dzięki nim kod JSP jest czystszy, przenośny i łatwiejszy do odczytania niż skryptlety.

  • 🏷️ Definicja JSTL: Standardowa kolekcja niestandardowych bibliotek tagów JSP do typowych zadań internetowych.
  • ✨ Zalety: Tworzy czysty, przenośny kod, który jest łatwiejszy do odczytania dla ludzi i narzędzi niż skryptlety.
  • 🔧 Tagi główne: out, catch, import, forEach, if i redirect obsługują dane wyjściowe, błędy, elementy dołączone, pętle i warunki.
  • 🔁 Iteracja i logika: forEach pętle po zakresach, podczas gdy if i catch dodają obsługę warunkową i wyjątków.
  • 🛠️. Tagi niestandardowe: Utwórz tagi zdefiniowane przez użytkownika, rozszerzając SimpleTagSupport, nadpisując doTag() i mapującping w domenie najwyższego poziomu.
  • 📄 Interfejs tagów: Biblioteka tagów Descriptlub (TLD) mapuje nazwy tagów na ich klasy obsługi dla kontenera JSP.

JSTL – Biblioteka standardowych tagów JSP

Czym jest JSTL Java?

JSTL oznacza Java standardowa biblioteka znaczników stron serwera i jest to zbiór niestandardowych bibliotek znaczników JSP, które zapewniają typowe funkcje tworzenia stron internetowych. JSTL to standardowa biblioteka znaczników JSP.

Zalety JSTL

Poniżej znajdują się zalety JSTL:

  1. Standardowy znacznik: Zapewnia bogatą warstwę przenośnych funkcjonalności stron JSP. Programiście łatwo jest zrozumieć kod.
  2. Code Schludnie i czysto: Ponieważ skryptlety dezorientują programistów, użycie JSTL sprawia, że ​​kod jest schludny i czysty.
  3. automatycznie JavabeansWsparcie interospekcji: Ma przewagę JSTL nad skryptletami JSP. Uchwyty języka JSTL Expression JavaKod fasoli bardzo łatwo. Nie musimy odrzucać obiektów, które zostały pobrane jako atrybuty o określonym zasięgu. Używanie kodu skryptletów JSP będzie skomplikowane, a JSTL uprościł ten cel.
  4. Łatwiejsze do odczytania przez ludzi:JSTL opiera się na XML, który jest bardzo podobny do HTML. Dlatego programiści mogą łatwo to zrozumieć.
  5. Łatwiejsze do zrozumienia dla komputerów: Narzędzia takie jak Dreamweaver i strona główna generują coraz więcej kodu HTML. Narzędzia HTML świetnie radzą sobie z formatowaniem kodu HTML. Kod HTML jest mieszany z kodem skryptowym. Ponieważ JSTL jest wyrażany jako znaczniki zgodne z XML, generowanie HTML może łatwo przeanalizować kod JSTL w dokumencie.

Tagi JSTL

Tagi podstawowe są najczęściej używanymi tagami w JSP. Zapewniają wsparcie dla

  • Iteracja
  • Logika warunkowa
  • Złap wyjątek
  • adres URL do przodu
  • Przekierowanie itp.

Aby użyć podstawowych znaczników, musimy najpierw zdefiniować bibliotekę znaczników. Poniżej znajduje się składnia obejmująca bibliotekę znaczników.

Składnia :

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

Tutaj,

  • przedrostek może być użyty do zdefiniowania wszystkich podstawowych znaczników i
  • uri jest biblioteką taglib, z której jest importowany

Przyjrzyjmy się szczegółowo niektórym podstawowym tagom,

1. Wyjście

  • Wynik wyrażenia jest wyświetlany w znaczniku out
  • Może bezpośrednio uciec od tagów XML. Dlatego nie są one oceniane jako rzeczywiste znaczniki

Składnia:

<c:out value="" default="" escapeXML="">
  • Tutaj wartość reprezentuje informację na wyjściu i jest obowiązkowa
  • Wartość domyślna to brak informacji wyjściowych i nie jest to obowiązkowe
  • escapeXML – jest prawdą, jeśli ucieka ze znaków XML.

Przykład:

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>

Wyjaśnienie kodu:

Code Linia 3: Ten przedrostek taglib jest wymagany dla wszystkich tagów, a dodany przedrostek to „c”. Dlatego może być używany jako przedrostek dla wszystkich znaczników core.

Code Linia 12: Tutaj używamy coretag out z przedrostkiem „c”, a to out wyświetli wartość w tagu wyrażenia. Dlatego wyjście będzie miało nazwę

Po wykonaniu powyższego kodu otrzymasz następujący wynik:

Znaczniki rdzenia JSTL - Out

Wyjście:

  • Wartość jako nazwę otrzymujemy ze znacznika podstawowego „out”, który zostanie wydrukowany w strumieniu wyjściowym.

2. Złap

  • Przechwytuje każdy możliwy do zgłoszenia wyjątek, który występuje w treści i wyświetla się jako wynik.
  • Służy do obsługi błędów i ich wychwytywania.

Składnia:

<c:catchvar="">

Tutaj var reprezentuje nazwę zmiennej, która będzie przechowywać wyjątek, który można zgłosić.

Przykład:

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

Wyjaśnienie kodu:

Code Linia 3: Ten przedrostek taglib jest wymagany dla wszystkich znaczników, a dodany przedrostek to „c”, dlatego może być używany jako przedrostek dla wszystkich znaczników core

Code Linia 11-13: Funkcja Coretag catch służy do przechwytywania wyjątku i drukowania wyjątku. Tutaj wyjątek jest zgłaszany, gdy 10/0 i ten wyjątek ma nazwę „guruException”.

Code Linia 14: Drukujemy „guruException”.

Po wykonaniu kodu otrzymasz następujący wynik:

Tagi podstawowe JSTL – złapanie

Wyjście:

  • Otrzymujemy wyjątek arytmetyczny jako /przez zero i jest on wypisywany na wyjściu za pomocą zmiennej „guruException”

3 Import

  • Możemy zaimportować zawartość innego pliku na stronę JSP, tak jak to zrobiliśmy JSP zawiera akcję.
  • Tutaj możemy również uwzględnić URL a treść będzie wyświetlana na tej stronie.

Składnia:

<c:importvar="" uri="">

Tutaj var jest nazwą zmiennej, która jest identyfikatorem, który będzie przechowywał nazwę pliku/uri. uri jest względną nazwą pliku lub uriname.

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>

Wyjaśnienie kodu:

Coretag_jsp31.jsp

Code Linia 3: Ten przedrostek taglib jest wymagany dla wszystkich znaczników, a dodany przedrostek to „c”, dlatego może być używany jako przedrostek dla wszystkich znaczników core

Code Linia 11-12: Tutaj importujemy plik coretag_jsp32.jsp do tego pliku za pomocą tagu importu

Code Linia 13: Tutaj drukujemy plik coretag_jsp32.jsp przy użyciu tagu out.

Po wykonaniu powyższego kodu otrzymasz następujący wynik.

Tagi podstawowe JSTL — import

Wyjście:

  • Coretag_jsp32 zostanie wydrukowany na wyjściu, ponieważ ten plik został zaimportowany do coretag_jsp31.jsp.

4. dla każdego

  • Służy do iteracji liczby elementów w serii instrukcji.
  • To samo co A Java forpętla.

Składnia:

<c:forEach var="" begin=""  end="">
  • Tutaj var reprezentuje nazwę zmiennej, która będzie przechowywać nazwę licznika
  • Begin reprezentuje wartość początkową licznika
  • Koniec będzie reprezentował jego wartość końcową

Przykład:

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

Wyjaśnienie kodu:

Code Linia 3: Ten przedrostek taglib jest wymagany dla wszystkich znaczników, a dodany przedrostek to „c”, dlatego może być używany jako przedrostek dla wszystkich znaczników core

Code Linia 11-13: Tutaj używamy pętli „forEach”, gdzie nazwa zmiennej to „gurucount”, której zliczanie na początku wynosi 5, a na końcu 10. Drukujemy zmienną gurucount, która ma liczby zaczynające się od 5 do 10.

Po wykonaniu kodu otrzymasz następujący wynik

Tagi podstawowe JSTL — forEach

Wyjście:

  • Wynik, który otrzymujemy, zaczyna się od 5 do 10.

5. Gdyby

  • To jest używane do Testy warunki.
  • Jeśli tag zostanie użyty do sprawdzenia na tej podstawie warunku, czy jest on prawdziwy, czy nie, blok kodu zostanie wykonany.

Składnia:

<c:if test="${condition}></c:if>

Tutaj, jeśli warunek jest prawdziwy, wykonywana jest seria instrukcji.

Przykład:

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

Wyjaśnienie kodu:

Code Linia 3: Ten przedrostek taglib jest wymagany dla wszystkich znaczników, a dodany przedrostek to „c”, dlatego może być używany jako przedrostek dla wszystkich znaczników core

Code Linia 11: Tutaj ustawiamy zmienną o nazwie as count na 100

Code Linia 12-14: Tutaj używamy „warunku if”, gdzie sprawdzamy, czy liczba jest równa 100. Jest równa 100, więc otrzymujemy wynik „Liczba wynosi 100”.

Po wykonaniu powyższego kodu otrzymasz następujący wynik

Tagi podstawowe JSTL — jeśli

Wyjście:

  • Ponieważ warunek „jeśli” jest prawdziwy, otrzymamy wynik „Liczba wynosi 100”.

6. przekierowanie

  • Służy do przekierowania bieżącej strony na inną URL poprzez podanie względnego URL tego tagu.
  • Obsługuje kontekst względny URLs

Składnia:

<c:redirect url="" context=""/>

Tutaj url jest względnym adresem URL, do którego należy przekierować, i nazwą kontekstową lokalnej aplikacji internetowej.

Przykład:

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

Wyjaśnienie kodu:

Code Linia 3: Ten przedrostek taglib jest wymagany dla wszystkich znaczników, a dodany przedrostek to „c”, dlatego może być używany jako przedrostek dla wszystkich znaczników core

Code Linia 11: Tutaj używamy „tagu przekierowania”, gdzie podajemy nazwę url, a kiedy klikniemy na tę stronę, następuje przekierowanie do witryny, która została podana do przekierowania.

Po wykonaniu powyższego kodu otrzymasz następujący wynik:

Tagi podstawowe JSTL — przekierowanie

Wyjście:

  • Otrzymujemy wyjściowy adres URL guru99.com, który jest przekierowywany przez coretag_jsp6.jsp

Niestandardowe tagi JSTL

  • Jest to zdefiniowane przez użytkownika JSP element języka.
  • Kiedy JSP jest tłumaczony na serwlet, znacznik niestandardowy jest konwertowany na klasę, która podejmuje działanie na obiekcie i jest wywoływana jako procedura obsługi znacznika.
  • Te akcje podczas wykonywania serwletu są wywoływane przez kontener WWW.
  • Aby utworzyć niestandardowy tag zdefiniowany przez użytkownika, musimy utworzyć procedurę obsługi tagów, która będzie rozszerzać SimpleTagSupport i będzie musiała zastąpić metodę doTag().
  • Musimy utworzyć TLD, w której musimy zmapować plik klasy w TLD.

Zalety niestandardowych tagów w JSP

Oto zalety niestandardowych tagów w JSP:

  • Przenośny: Akcja opisana w bibliotece tagów musi być możliwa do użycia w dowolnym kontenerze JSP.
  • Simple: Niedoświadczeni użytkownicy muszą być w stanie zrozumieć i używać tego mechanizmu. Dostawcy funkcjonalności JSP muszą łatwo udostępniać ją użytkownikom jako akcje.
  • Ekspresyjny: Mechanizm musi obsługiwać szeroki zakres działań, w tym działania zagnieżdżone, elementy skryptów wewnątrz treści działań, tworzenie, używanie i aktualizowanie zmiennych skryptów.
  • Można używać w różnych językach skryptowych: Chociaż specyfikacja JSP obecnie definiuje semantykę tylko dla skryptów w Java języka programowania, chcemy pozostawić otwartą możliwość stosowania innych języków skryptowych.
  • Zbudowany na podstawie istniejących koncepcji i mechanizmów: Nie chcemy na nowo wymyślać tego, co istnieje gdzie indziej. Chcemy również unikać przyszłych konfliktów, kiedy tylko możemy je przewidzieć

Składnia:

Załóżmy, że tworzymy testGuru tag i możemy użyć klasy taghandlertestTag, która nadpisze metodę doTag().

<ex:testGuru/>
Class testTag extends SimpleTagSupport{ public void doTag()}

Będziemy musieli także zmapować tę klasę testTag w TLD (Tag Library Descriptlub) jako kontener JSP automatycznie utworzy mapęping pomiędzy plikiem klasy i adresem URI, który został wymieniony w pliku TLD.

Interfejs tagów JSP

  • Ta klasa będzie musiała rozszerzyć klasę SimpleTagSupport.
  • Klasa ta będzie musiała zastąpić metodę doTag(), która jest częścią klasy SimpleTagSupport (przesłonięcie jest metodą dziedziczoną z klasy nadrzędnej).
  • Interfejs ten jest podinterfejsem interfejsu JSPTAg.
  • Zapewnia metody do wykonania na początku i na końcu tagu.
  • Musimy także zmapować tę klasę w TLD, czyli deskryptorze biblioteki znaczników

Rozważamy to w poniższym przykładzie

Metoda interfejsu tagów

  • doTag() to metoda, którą musimy zastąpić i która będzie zawierać zawartość znacznika.
  • Pobiera bieżący kontekst JSP za pomocą getJSPContext()

Przykład:

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

Niestandardowy.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(Handler tagów)

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");
	}

}

Wyjaśnienie kodu:

guruTag.java(Handler tagów)

Code Linia 6:Klasa guruTag rozszerza klasę SimpleTagSupport, która znajduje się w pliku jar javax.servlet.JSP

Code Linia 7: Tutaj nadpisujemy metodę doTag(), która zgłasza wyjątek JspException i IOException.

Code Linia 9-10: W tej metodzie kod zostanie osadzony w niestandardowym znaczniku, który zostanie wywołany. Bierzemy obiekt JspWriteri wydrukuje „Guru Dzień."

Niestandardowy.tld

Code Linia 6: Tutaj nazwa niestandardowego tagu to „guruTag”.

Code Linia 7:Klasa tagu to klasa obsługi tagów, tj. guruTag.java. Przyjmuje pełną ścieżkę pliku obsługi, która obejmuje ścieżkę katalogu lokalizacji pliku.

Niestandardowytag_jsp1.jsp

Code linia 3:Ten przedrostek taglib jest wymagany dla wszystkich tagów, a dodany przedrostek to „ex”, dlatego może być używany jako przedrostek dla wszystkich znaczników core, a uri to niestandardowy.tld, który odwzorowuje procedurę obsługi tagów.

Code Linia 11: Tutaj definiujemy niestandardowy tag „guruTag”, który wywoła metodę doTag() klasy obsługi i wykonany zostanie znajdujący się w nim kod.

Po wykonaniu powyższego kodu otrzymasz następujący wynik

Interfejs tagów JSP

Wyjście:

  • Wynik otrzymujemy w postaci „Guru„Tag” z guruTag.java, czyli TagHandler, który nadpisuje metodę doTag() i drukuje „Guru „Tag” jako wynik.

FAQ

JSTL ma pięć grup tagów: core, formatowanie (I18N), SQL, XML i funkcje. Tagi core obsługują iterację i logikę, natomiast tagi formatowania, SQL, XML i funkcje obejmują lokalizację, bazy danych, XML i narzędzia do obsługi ciągów znaków.

JSTL wykorzystuje czytelne znaczniki podobne do XML dla logiki, podczas gdy skryptlety osadzają surowe Java w JSP. JSTL tworzy czystsze, łatwiejsze w utrzymaniu strony i unika mieszania Java kod z znacznikami HTML.

TLD to plik XML, który mapuje niestandardowe nazwy tagów na ich klasy obsługi. Kontener JSP odczytuje TLD, aby dowiedzieć się, które Java klasa do wykonania dla każdego niestandardowego znacznika.

Asystenci AI mogą generować tagi JSTL, pisać niestandardowe procedury obsługi tagów, konwertować skryptlety do JSTL i objaśniać język wyrażeń. Przyspieszają tworzenie stron JSP, podczas gdy programiści analizują wygenerowany kod.

Tak. Narzędzia AI potrafią analizować kod skryptletu i przepisywać go, używając równoważnych znaczników rdzenia JSTL i języka wyrażeń.ping zmodernizuj starsze strony JSP, zachowując jednocześnie ich funkcjonalność.

Podsumuj ten post następująco: