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:

  1. Standardní značka: Poskytuje bohatou vrstvu přenosných funkcí stránek JSP. Pro vývojáře je snadné porozumět kódu.
  2. Kód čistý a čistý: Jelikož scripty matou vývojáře, použití JSTL dělá kód úhledným a čistým.
  3. 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.
  4. Pro lidi snazší číst: JSTL je založen na XML, který je velmi podobný HTML. Proto je pro vývojáře snadné pochopit.
  5. 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:

JSTL Core Tags - Out

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:

JSTL Core Tags - Catch

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.

JSTL Core Tags – import

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

JSTL Core Tags - forEach

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

JSTL Core Tags - If

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;

JSTL Core Tags – přesměrování

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

Rozhraní značek JSP

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