Tutorial JSTL, Exemplo de Tags JSTL

JSTL significa JavaServer Pages Standard Tag Library. JSTL é a biblioteca padrão de tags que fornece tags para controlar o comportamento da página JSP. As tags JSTL podem ser usadas para iteração e declarações de controle, internacionalização, SQL, etc. Vamos analisar as Tags JSTL em detalhes neste tutorial de JSTL. Anteriormente, vimos como podemos usar JSP EL e JSP Action Tags para escrever código JSP semelhante a HTML, mas suas funcionalidades são muito limitadas. Por exemplo, não podemos percorrer uma coleção usando EL ou elementos de ação, e não podemos escapar de tags HTML para mostrá-las como texto no lado do cliente. É aqui que as tags JSTL são úteis, pois podemos fazer muito mais com elas.

JSTL

JSTL faz parte da API Java EE e está incluído na maioria dos contêineres de servlet. Mas para usar JSTL em nossas páginas JSP, precisamos baixar os jars JSTL para o seu contêiner de servlet. Na maioria das vezes, você pode encontrá-los nos projetos de exemplo do download do servidor e pode usá-los. Você precisa incluir essas bibliotecas no diretório do projeto de aplicativo da web WEB-INF/lib.

Jars JSTL

Os jars JSTL são específicos do contêiner, por exemplo, no Tomcat, precisamos incluir os arquivos jar jstl.jar e standard.jar no caminho de construção do projeto. Se eles não estiverem presentes no diretório lib do contêiner, você deve incluí-los em sua aplicação. Se você tiver um projeto Maven, as dependências abaixo devem ser adicionadas no arquivo pom.xml, caso contrário, você receberá o seguinte erro nas páginas JSP – eclipse Não é possível encontrar o descritor da biblioteca de tags para "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>

Tags JSTL

Com base nas funções JSTL, elas são categorizadas em cinco tipos.

  1. JSTL Core Tags: As tags principais do JSTL oferecem suporte para iteração, lógica condicional, captura de exceções, URL, encaminhamento ou redirecionamento de resposta, etc. Para usar as tags principais do JSTL, devemos incluí-las na página JSP da seguinte forma.

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

    Neste artigo, vamos explorar as tags principais importantes do JSTL.

  2. JSTL Formatting and Localisation Tags: As tags de formatação do JSTL são fornecidas para formatação de números, datas e suporte i18n por meio de localidades e pacotes de recursos. Podemos incluir essas tags do JSTL no JSP com a seguinte sintaxe:

    <%@ taglib uri="https://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
    
  3. JSTL SQL Tags: As tags SQL do JSTL oferecem suporte para interação com bancos de dados relacionais como Oracle, MySql, etc. Usando as tags SQL do JSTL, podemos executar consultas de banco de dados. Incluímos essas tags do JSTL no JSP com a seguinte sintaxe:

    <%@ taglib uri="https://java.sun.com/jsp/jstl/sql" prefix="sql" %>
    
  4. Tags XML JSTL: As etiquetas XML JSTL são utilizadas para trabalhar com documentos XML, como análise de XML, transformação de dados XML e avaliação de expressões XPath. A sintaxe para incluir as etiquetas XML JSTL na página JSP é a seguinte:

    <%@ taglib uri="https://java.sun.com/jsp/jstl/xml" prefix="x" %>
  5. Tags Funções JSTL: As etiquetas JSTL fornecem uma série de funções que podemos utilizar para realizar operações comuns, a maioria delas é para manipulação de strings, como concatenação de strings, divisão de strings, etc. A sintaxe para incluir as funções JSTL na página JSP é a seguinte:

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

Observe que todos os URIs das etiquetas padrão JSTL começam com https://java.sun.com/jsp/jstl/, e podemos usar qualquer prefixo que desejarmos, mas é uma prática recomendada usar os prefixos definidos acima, pois são amplamente utilizados, evitando assim qualquer confusão.

Tags Principais do JSTL

Os Tags Principais do JSTL estão listados na tabela abaixo.

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

Tutorial do JSTL

Vamos ver alguns dos usos dos tags principais do JSTL em uma aplicação web simples. Nosso projeto incluirá um Java Bean e criaremos uma lista de objetos e definiremos alguns atributos que serão usados no JSP. A página JSP mostrará como iterar sobre uma coleção, usando lógica condicional com EL e alguns outros usos comuns.

Tutorial do JSTL – Classe Java Bean

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;
	}

}

Tutorial do JSTL – Classe Servlet

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);
	}

}

Tutorial JSTL – Página JSP

home.jsp código:

<%@ 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>

Agora, ao executarmos a aplicação com o URL https://localhost:8080/JSTLExample/HomeServlet, obtemos a resposta conforme a imagem abaixo. No exemplo de JSTL acima, estamos utilizando c:catch para capturar a exceção dentro do método de serviço JSP, o que é diferente do Tratamento de Exceção JSP com configurações de páginas de erro. Isso resume rapidamente as tags JSTL e um exemplo de uso das tags principais do JSTL. Referência: Página Wikipedia do JSTL

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