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:

  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.

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

Podsumuj ten post następująco: