JSTL (biblioteka znaczników standardowych JSP)
W tym samouczku dotyczącym JSTL zobaczymy, jak użycie różnych znaczników JSTL ułatwi kodowanie 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:
- Standardowy znacznik: Zapewnia bogatą warstwę przenośnych funkcjonalności stron JSP. Programiście łatwo jest zrozumieć kod.
- Code Schludnie i czysto: Ponieważ skryptlety dezorientują programistów, użycie JSTL sprawia, że kod jest schludny i czysty.
- 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.
- Łatwiejsze do odczytania przez ludzi:JSTL opiera się na XML, który jest bardzo podobny do HTML. Dlatego programiści mogą łatwo to zrozumieć.
- Ł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:
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:
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.
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
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
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:
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
Wyjście:
- Wynik otrzymujemy w postaci „Guru„Tag” z guruTag.java, czyli TagHandler, który nadpisuje metodę doTag() i drukuje „Guru „Tag” jako wynik.
Podsumowanie
- W tej sekcji dowiedzieliśmy się o standardowej bibliotece znaczników JSP, w której zrobiliśmy znaczniki podstawowe i znaczniki niestandardowe.
- Podstawowe znaczniki obejmują znaczniki for, if, redirect, import, catch, które były używane do podstawowych celów w JSP.
- Zrobiliśmy także niestandardowe tagi, w których możemy zdefiniować tagi i używać ich w JSP







