JSTL (JSP standardní knihovna značek)
⚡ Chytré shrnutí
Knihovna standardních tagů JSP (JSTL) je kolekce vlastních knihoven tagů JSP, které poskytují běžné funkce pro vývoj webu, jako je iterace, podmíněná logika, zpracování výjimek, import a přesměrování, díky čemuž je kód JSP čistší, přenositelnější a snáze čitelný než skriptlety.

V čem je JSTL Java?
JSTL představuje Java standardní knihovna značek serverových stránek a je to kolekce vlastních knihoven značek JSP, které poskytují běžné funkce pro vývoj webu. JSTL je standardní knihovna značek JSP.
Výhody JSTL
Níže jsou uvedeny výhody JSTL:
- Standardní značka: Poskytuje bohatou vrstvu přenosných funkcí stránek JSP. Pro vývojáře je snadné porozumět kódu.
- Code Elegantní a čisté: Jelikož scripty matou vývojáře, použití JSTL dělá kód úhledným a čistým.
- Automatický Javafazole Podpora interospekce: Má výhodu JSTL oproti skriptletům JSP. Popisovač jazyka JSTL Expression JavaBean kód velmi snadno. Nepotřebujeme sejmout objekty, které byly načteny jako atributy s rozsahem. Použití kódu skriptletů JSP bude komplikované a JSTL tento účel zjednodušila.
- Pro lidi snazší číst: JSTL je založen na XML, který je velmi podobný HTML. Proto je pro vývojáře snadné pochopit.
- Snazší pro počítače: Nástroje jako např Dreamweaver a titulní stránka generuje stále více HTML kódu. Nástroje HTML odvádějí skvělou práci při formátování kódu HTML. HTML kód je smíchán s kódem skriptů. Protože je JSTL vyjádřen jako značky kompatibilní s XML, je pro generování HTML snadné analyzovat kód JSTL v dokumentu.
JSTL tagy
Základní tagy jsou nejčastěji používané tagy v JSP. Poskytují podporu pro
- Opakování
- Podmíněná logika
- Chytit výjimku
- url vpřed
- Přesměrování atd.
Abychom mohli používat základní značky, musíme nejprve definovat knihovnu značek a níže je syntaxe pro zahrnutí knihovny značek.
Syntaxe:
<%@ taglib prefix="c" uri=http://java.sun.com/jsp/jstl/core%>
Zde,
- prefix lze použít k definování všech základních značek a
- uri je knihovna taglib, ze které je importována
Podívejme se podrobně na některé základní značky,
1. Ven
- Výsledek výrazu se zobrazí v tagu out
- Může přímo uniknout tagům XML. Nejsou tedy hodnoceny jako skutečné značky
Syntaxe:
<c:out value="" default="" escapeXML="">
- Zde hodnota představuje informaci pro výstup a je povinná
- Výchozí nastavení je selhání výstupu informací a není povinné
- escapeXML – Je to pravda, pokud uniká znaky XML.
Příklad:
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>
Vysvětlení kódu:
Code Řádek 3: Tato předpona taglib je vyžadována pro všechny značky a přidaná předpona je 'c'. Lze jej tedy použít jako předponu pro všechny coretagy.
Code Řádek 12: Zde používáme coretag out s předponou „c“ a tento out vypíše hodnotu ve výrazu tag. Výstupem tedy bude jméno
Když spustíte výše uvedený kód, získáte následující výstup:
Výstup:
- Hodnotu jako název získáváme z hlavní značky „out“, která se vytiskne ve výstupním proudu.
2. Chytit
- Zachytí jakoukoli vrhatelnou výjimku, která se vyskytuje v těle, a zobrazí se jako výstup.
- Slouží k řešení chyb a jejich zachycení.
Syntaxe:
<c:catchvar="">
Zde var představuje název proměnné, která bude obsahovat vyhazovatelnou výjimku.
Příklad:
<%@ 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>
Vysvětlení kódu:
Code Řádek 3: Tato předpona taglib je vyžadována pro všechny značky a přidaná předpona je 'c', proto ji lze použít jako předponu pro všechny coretagy
Code Řádek 11–13: Coretag catch se používá k zachycení výjimky a vytištění výjimky. Zde je výjimka vyvolána, když je 10/0 a tato výjimka má název „guruException“.
Code Řádek 14: Tiskneme „guruException“.
Když spustíte kód, získáte následující výstup:
Výstup:
- Získáváme aritmetickou výjimku jako /by nula a je vytištěna na výstupu pomocí proměnné „guruException“
3. Import
- Můžeme importovat další obsah souboru na stránku JSP, jako jsme to udělali v JSP zahrnují akci.
- Sem můžeme také zahrnout URL a obsah se zobrazí na dané stránce.
Syntaxe:
<c:importvar="" uri="">
Zde var je název proměnné, což je identifikátor, který bude obsahovat název souboru/uri. uri je relativní název souboru nebo 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>
Vysvětlení kódu:
Coretag_jsp31.jsp
Code Řádek 3: Tato předpona taglib je vyžadována pro všechny značky a přidaná předpona je 'c', proto ji lze použít jako předponu pro všechny coretagy
Code Řádek 11–12: Zde importujeme soubor coretag_jsp32.jsp do tohoto souboru pomocí import tagu
Code Řádek 13: Zde tiskneme soubor coretag_jsp32.jsp pomocí značky out.
Když spustíte výše uvedený kód, získáte následující výstup.
Výstup:
- Coretag_jsp32 se vytiskne ve výstupu, protože tento soubor byl importován do coretag_jsp31.jsp.
4. pro Každý
- Používá se k iteraci počtu prvků v řadě příkazů.
- Je to stejné jako a Java forloop.
Syntaxe:
<c:forEach var="" begin="" end="">
- Zde var představuje název proměnné, která bude obsahovat název čítače
- Begin představuje počáteční hodnotu čítače
- End bude představovat jeho koncovou hodnotu
Příklad:
<%@ 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>
Vysvětlení kódu:
Code Řádek 3: Tato předpona taglib je vyžadována pro všechny značky a přidaná předpona je 'c', proto ji lze použít jako předponu pro všechny coretagy
Code Řádek 11–13: Zde používáme smyčku „forEach“, kde název proměnné je „gurucount“, která se začala počítat jako 5 a skončila jako 10. Tiskneme proměnnou gurucount, která má čísla začínající od 5 do 10.
Když spustíte kód, získáte následující výstup
Výstup:
- Výstup, který dostáváme, začíná od 5 do 10.
5. Li
- Používá se pro Testování podmínek.
- Pokud je značka použita k testování podmínky, zda je na základě toho pravdivá či nikoli, provede se blok kódu.
Syntaxe:
<c:if test="${condition}></c:if>
Zde, pokud je podmínka pravdivá, jsou provedeny série příkazů.
Příklad:
<%@ 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>
Vysvětlení kódu:
Code Řádek 3: Tato předpona taglib je vyžadována pro všechny značky a přidaná předpona je 'c', proto ji lze použít jako předponu pro všechny coretagy
Code Řádek 11: Zde nastavujeme proměnnou pojmenovanou jako počet na 100
Code Řádek 12–14: Zde používáme „podmínku if“, kde kontrolujeme, zda se počet rovná 100. Je roven 100, pak dostaneme výstup jako „Počet je 100“.
Když spustíte výše uvedený kód, získáte následující výstup
Výstup:
- Protože je podmínka „if“ pravdivá, dostaneme výstup jako „Počet je 100“.
6. přesměrovat
- Používá se k přesměrování aktuální stránky na jinou. URL poskytnutím relativního URL této značky.
- Podporuje kontextově relativní URLs
Syntaxe:
<c:redirect url="" context=""/>
Zde url je relativní url, na kterou má být přesměrována, a kontextový název lokální webové aplikace.
Příklad:
<%@ 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>
Vysvětlení kódu:
Code Řádek 3: Tato předpona taglib je vyžadována pro všechny značky a přidaná předpona je 'c', proto ji lze použít jako předponu pro všechny coretagy
Code Řádek 11: Zde používáme „redirect tag“, kde zadáváme urlname, a když klikneme na tuto stránku, přesměruje se na stránku, která byla zadána k přesměrování.
Když spustíte výše uvedený kód, získáte následující výstup;
Výstup:
- Získáme výstupní adresu URL guru99.com, která je přesměrována na coretag_jsp6.jsp
Vlastní značky JSTL
- Je to uživatelsky definované JSP jazykový prvek.
- Když je JSP přeložen do servletu, je vlastní značka převedena na třídu, která provádí akci s objektem a je volána jako obslužná rutina značek.
- Tyto akce při spuštění servletu jsou vyvolány webovým kontejnerem.
- Abychom vytvořili uživatelsky definovanou vlastní značku, musíme vytvořit obslužnou rutinu značek, která bude rozšiřovat SimpleTagSupport a bude muset přepsat metodu doTag().
- Musíme vytvořit TLD, kde potřebujeme mapovat soubor třídy v TLD.
Výhody vlastních značek v JSP
Zde jsou výhody vlastních značek v JSP:
- Přenosný: Akce popsaná v knihovně značek musí být použitelná v jakémkoli kontejneru JSP.
- Jednoduché: Nenároční uživatelé musí být schopni pochopit a používat tento mechanismus. Prodejci funkčnosti JSP musí najít snadné zpřístupnění uživatelům jako akce.
- Expresivní: Mechanismus musí podporovat širokou škálu akcí, včetně vnořených akcí, skriptovacích prvků v těle akcí, vytváření, používání a aktualizace skriptovacích proměnných.
- Použitelné z různých skriptovacích jazyků: Ačkoli specifikace JSP v současné době definuje pouze sémantiku pro skripty v Java programovacím jazyku, chceme ponechat otevřenou možnost dalších skriptovacích jazyků.
- Postaveno na stávajících konceptech a strojním vybavení: Nechceme znovu objevovat to, co existuje jinde. Také se chceme vyhnout budoucím konfliktům, kdykoli je můžeme předvídat
Syntaxe:
Představte si, že vytváříme testGuru tag a můžeme použít třídu taghandlertestTag, která přepíše metodu doTag().
<ex:testGuru/> Class testTag extends SimpleTagSupport{ public void doTag()}
Také budeme muset namapovat tuto třídu testTag v TLD (Knihovna značek Descriptnebo) protože JSP kontejner automaticky vytvoří mapuping mezi souborem třídy a URI, který byl zmíněn v souboru TLD.
Rozhraní značek JSP
- Tato třída bude muset rozšířit třídu SimpleTagSupport.
- Tato třída bude muset přepsat metodu doTag(), která je součástí třídy SimpleTagSupport (přepsání je metoda, která je zděděna z nadřazené třídy).
- Toto rozhraní je dílčím rozhraním rozhraní JSPTag.
- Poskytuje metody pro provedení na začátku a na konci značky.
- Také musíme tuto třídu zmapovat v TLD, tj. deskriptoru knihovny značek
Uvažujeme v příkladu níže
Metoda rozhraní tagů
- doTag() je metoda, kterou musíme přepsat a která bude mít obsah značky.
- Přebírá aktuální kontext JSP pomocí getJSPContext()
Příklad:
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>
Custom.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"); } }
Vysvětlení kódu:
guruTag.java(TagHandler)
Code Řádek 6:Třída guruTag rozšiřuje třídu SimpleTagSupport, která je přítomna v jar javax.servlet.JSP
Code Řádek 7: Zde přepisujeme metodu doTag(), která vyvolá výjimku JspException a IOException.
Code Řádek 9–10: V této metodě bude kód vložen do vlastního tagu, který bude volán. Vezmeme objekt JspWritera to vytiskne „Guru Den."
Custom.tld
Code Řádek 6: Zde je název vlastní značky „guruTag“.
Code Řádek 7:Třída značek je taghandlerclass, tj. guruTag.java. Vyžaduje úplnou cestu k souboru obslužné rutiny, která zahrnuje cestu k adresáři umístění souboru.
Customtag_jsp1.jsp
Code linka 3:Tato předpona taglib je vyžadována pro všechny značky a přidaná předpona je 'ex', proto ji lze použít jako předponu pro všechny coretagy a uri je custom.tld, která mapuje obslužný program značek.
Code Řádek 11: Zde definujeme vlastní značku „guruTag“, která zavolá metodu handler class doTag() a kód v ní bude proveden.
Když spustíte výše uvedený kód, získáte následující výstup
Výstup:
- Výstup dostaneme jako „Guru„Tag“ z guruTag.java, tj. TagHandler, který přepíše metodu doTag() a vypíše „Guru „Tag“ jako výstup.







