JSTL (JSP standardní knihovna značek)
V tomto tutoriálu JSTL uvidíme, jak použití různých značek JSTL usnadní kódování JSP.
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.
- Kód čistý 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:
3. řádek kódu: 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.
12. řádek kódu: 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:
3. řádek kódu: 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
Řádek 11–13 kódu: 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“.
14. řádek kódu: 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.
- Zde můžeme také zahrnout URL a obsah se zobrazí na této 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
3. řádek kódu: 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
Řádek 11–12 kódu: Zde importujeme soubor coretag_jsp32.jsp do tohoto souboru pomocí import tagu
Řádek 13 kódu: 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:
3. řádek kódu: 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
Řádek 11–13 kódu: 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:
3. řádek kódu: 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
11. řádek kódu: Zde nastavujeme proměnnou pojmenovanou jako počet na 100
Řádek 12–14 kódu: 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 pro přesměrování aktuální stránky na jinou adresu URL poskytnutím relativní adresy URL této značky.
- Podporuje kontextově relativní adresy URL
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:
3. řádek kódu: 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
11. řádek kódu: 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:
Uvažujme, že vytváříme značku testGuru a můžeme použít třídutaghandlertestTag, 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) jako kontejner JSP automaticky vytvoří mapování mezi souborem třídy a uri, které bylo zmíněno 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)
6. řádek kódu:Třída guruTag rozšiřuje třídu SimpleTagSupport, která je přítomna v jar javax.servlet.JSP
7. řádek kódu: Zde přepisujeme metodu doTag(), která vyvolá výjimku JspException a IOException.
Řádek 9–10 kódu: Při této metodě bude kód vložen do vlastní značky, která bude volána. Vezmeme objekt JspWriter, který vytiskne „Guru Tag“.
Custom.tld
6. řádek kódu: Zde je název vlastní značky „guruTag“.
7. řádek kódu: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
3. řádek kódu: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.
11. řádek kódu: 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 získáme jako „GuruTag“ z guruTag.java, tj. TagHandler, který přepíše metodu doTag() a který vypíše „Guru Tag“ jako výstup.
Shrnutí
- V této části jsme se dozvěděli o standardní knihovně značek JSP, ve které jsme vytvořili základní značky a vlastní značky.
- Mezi základní značky patří značky pro, if, redirect, import, catch, což byly značky používané pro základní účely v JSP.
- Také jsme vytvořili vlastní značky, ve kterých můžeme definovat značky a používat je v JSP