JSTL Zelfstudie, Voorbeeld van JSTL-tags

JSTL staat voor JSP Standard Tag Library. JSTL is de standaard tagbibliotheek die tags levert om het gedrag van de JSP-pagina te regelen. JSTL-tags kunnen worden gebruikt voor iteratie en controle-instructies, internationalisatie, SQL, enzovoort. We zullen in deze JSTL-handleiding uitgebreid ingaan op JSTL-tags. Eerder hebben we gezien hoe we JSP EL en JSP Action Tags kunnen gebruiken om JSP-code te schrijven die lijkt op HTML, maar hun functionaliteit is zeer beperkt. Bijvoorbeeld, we kunnen niet door een verzameling bladeren met EL of actie-elementen, en we kunnen HTML-tags niet escapen om ze als tekst aan de clientzijde te tonen. Hier komen JSTL-tags van pas, omdat we met JSTL-tags veel meer kunnen doen.

JSTL

JSTL maakt deel uit van de Java EE API en is opgenomen in de meeste servletcontainers. Maar om JSTL te gebruiken in onze JSP-pagina’s, moeten we de JSTL-jars downloaden voor uw servletcontainer. Meestal kun je ze vinden in de voorbeeldprojecten van serverdownloads en kun je ze gebruiken. U moet deze bibliotheken opnemen in uw webtoepassingsproject WEB-INF/lib map.

JSTL-jars

JSTL-jars zijn containerspecifiek, bijvoorbeeld in Tomcat moeten we de jstl.jar en standard.jar jar-bestanden opnemen in het project build-pad. Als ze niet aanwezig zijn in de container lib-map, moet u ze opnemen in uw toepassing. Als u een Maven-project heeft, moeten onderstaande afhankelijkheden worden toegevoegd in het pom.xml bestand anders krijgt u de volgende fout in JSP-pagina’s – eclipse Kan de taglibrarydescriptor niet vinden voor "https://java.sun.com/jsp/jstl/core"

<dependency>
	<groupId>jstl</groupId>
	<artifactId>jstl</artifactId>
	<version>1.2</version>
</dependency>
<dependency>
	<groupId>taglibs</groupId>
	<artifactId>standard</artifactId>
	<version>1.1.2</version>
</dependency>

JSTL-tags

Op basis van de JSTL-functies zijn ze gecategoriseerd in vijf typen.

  1. JSTL Core-tags: JSTL Core-tags bieden ondersteuning voor iteratie, conditionele logica, uitzonderingen opvangen, URL’s, doorsturen of omleiden van reacties, enzovoort. Om JSTL core-tags te gebruiken, moeten we deze opnemen in de JSP-pagina zoals hieronder.

    <%@ taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c" %>
    

    In dit artikel zullen we belangrijke JSTL core-tags bekijken.

  2. JSTL Formatterings- en Lokalisatietags: JSTL Formatterings-tags worden geleverd voor het formatteren van getallen, datums en i18n-ondersteuning via lokale instellingen en bronbundels. We kunnen deze JSTL-tags opnemen in JSP met de onderstaande syntax:

    <%@ taglib uri="https://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
    
  3. JSTL SQL-tags: JSTL SQL-tags bieden ondersteuning voor interactie met relationele databases zoals Oracle, MySql, enzovoort. Met behulp van JSTL SQL-tags kunnen we databasequery’s uitvoeren, we nemen deze JSTL-tags op in JSP met de onderstaande syntax:

    <%@ taglib uri="https://java.sun.com/jsp/jstl/sql" prefix="sql" %>
    
  4. JSTL XML Tags: JSTL XML-tags worden gebruikt om te werken met XML-documenten, zoals het parseren van XML, het transformeren van XML-gegevens en het evalueren van XPath-expressies. De syntax om JSTL XML-tags in een JSP-pagina op te nemen, is als volgt:

    <%@ taglib uri="https://java.sun.com/jsp/jstl/xml" prefix="x" %>
  5. JSTL Functions Tags: JSTL-tags bieden een aantal functies die we kunnen gebruiken voor veelvoorkomende bewerkingen. De meeste hiervan zijn voor stringmanipulatie, zoals het samenvoegen van strings, het splitsen van strings, enzovoort. De syntax om JSTL-functies in een JSP-pagina op te nemen, is als volgt:

    <%@ taglib uri="https://java.sun.com/jsp/jstl/functions" prefix="fn" %>

Let op dat alle URI’s van de JSTL-standaardtags beginnen met https://java.sun.com/jsp/jstl/ en we kunnen elke gewenste voorvoegsel gebruiken. Het is echter gebruikelijk om het bovenstaande gedefinieerde voorvoegsel te gebruiken, omdat iedereen ze gebruikt en dit geen verwarring zal veroorzaken.

JSTL Core Tags

JSTL Core Tags worden vermeld in de onderstaande tabel.

JSTL Core Tag Description
<c:out> To write something in JSP page, we can use EL also with this tag
<c:import> Same as jsp:include or include directive
<c:redirect> redirect request to another resource
<c:set> To set the variable value in given scope.
<c:remove> To remove the variable from given scope
<c:catch> To catch the exception and wrap it into an object.
<c:if> Simple conditional logic, used with EL and we can use it to process the exception from <c:catch>
<c:choose> Simple conditional tag that establishes a context for mutually exclusive conditional operations, marked by <c:when> and <c:otherwise>
<c:when> Subtag of <c:choose> that includes its body if its condition evalutes to ‘true’.
<c:otherwise> Subtag of <c:choose> that includes its body if its condition evalutes to ‘false’.
<c:forEach> for iteration over a collection
<c:forTokens> for iteration over tokens separated by a delimiter.
<c:param> used with <c:import> to pass parameters
<c:url> to create a URL with optional query string parameters

JSTL Zelfstudie

Laten we eens kijken naar enkele van de JSTL-kernlabels in een eenvoudige webtoepassing. Ons project zal een Java Bean bevatten en we zullen een lijst van objecten maken en enkele attributen instellen die zullen worden gebruikt in de JSP. De JSP-pagina zal laten zien hoe je kunt itereren over een verzameling, gebruikmakend van conditionele logica met EL en enkele andere veelvoorkomende toepassingen.

JSTL Zelfstudie – Java Bean Klasse

package com.journaldev.model;

public class Employee {

	private int id;
	private String name;
	private String role;
	public Employee() {
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getRole() {
		return role;
	}
	public void setRole(String role) {
		this.role = role;
	}

}

JSTL Zelfstudie – Servlet Klasse

package com.journaldev.servlet;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.journaldev.model.Employee;

@WebServlet("/HomeServlet")
public class HomeServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		List<Employee> empList = new ArrayList<Employee>();
		Employee emp1 = new Employee();
		emp1.setId(1); emp1.setName("Pankaj");emp1.setRole("Developer");
		Employee emp2 = new Employee();
		emp2.setId(2); emp2.setName("Meghna");emp2.setRole("Manager");
		empList.add(emp1);empList.add(emp2);
		request.setAttribute("empList", empList);
		
		request.setAttribute("htmlTagData", "<br/> creates a new line.");
		request.setAttribute("url", "https://www.journaldev.com");
		RequestDispatcher rd = getServletContext().getRequestDispatcher("/home.jsp");
		rd.forward(request, response);
	}

}

JSTL Handleiding – JSP Pagina

home.jsp code:

<%@ page language="java" contentType="text/html; charset=US-ASCII"
    pageEncoding="US-ASCII"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Home Page</title>
<%@ taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c" %>
<style>
table,th,td
{
border:1px solid black;
}
</style>
</head>
<body>
<%-- Using JSTL forEach and out to loop a list and display items in table --%>
<table>
<tbody>
<tr><th>ID</th><th>Name</th><th>Role</th></tr>
<c:forEach items="${requestScope.empList}" var="emp">
<tr><td><c:out value="${emp.id}"></c:out></td>
<td><c:out value="${emp.name}"></c:out></td>
<td><c:out value="${emp.role}"></c:out></td></tr>
</c:forEach>
</tbody>
</table>
<br><br>
<%-- simple c:if and c:out example with HTML escaping --%>
<c:if test="${requestScope.htmlTagData ne null }">
<c:out value="${requestScope.htmlTagData}" escapeXml="true"></c:out>
</c:if>
<br><br>
<%-- c:set example to set variable value --%>
<c:set var="id" value="5" scope="request"></c:set>
<c:out value="${requestScope.id }" ></c:out>
<br><br>
<%-- c:catch example --%>
<c:catch var ="exception">
   <% int x = 5/0;%>
</c:catch>

<c:if test = "${exception ne null}">
   <p>Exception is : ${exception} <br>
   Exception Message: ${exception.message}</p>
</c:if>
<br><br>
<%-- c:url example --%>
<a href="<c:url value="${requestScope.url }"></c:url>">JournalDev</a>
</body>
</html>

Als we nu de applicatie uitvoeren met de URL https://localhost:8080/JSTLExample/HomeServlet, krijgen we het antwoord zoals te zien in onderstaande afbeelding. In het bovenstaande JSTL-voorbeeld gebruiken we c:catch om de uitzondering binnen de JSP-service methode op te vangen, dit is anders dan de JSP Uitzonderingsafhandeling met foutpaginaconfiguraties. Dat is alles voor een snelle samenvatting van JSTL-tags en een voorbeeld van het gebruik van JSTL-kern-tags. Referentie: JSTL Wikipedia-pagina

Source:
https://www.digitalocean.com/community/tutorials/jstl-tutorial-jstl-tags-example