Tutorial JSTL, Exemplo de Tags JSTL

JSTL significa Biblioteca Padrão de Tags JSP. 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 explorar as Tags JSTL em detalhes neste tutorial sobre JSTL. Anteriormente, vimos como podemos usar JSP EL e Tags de Ação JSP para escrever código JSP semelhante a HTML, mas suas funcionalidades são bastante limitadas. Por exemplo, não podemos percorrer uma coleção usando EL ou elementos de ação, e não podemos escapar das tags HTML para exibi-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ída na maioria dos containers de servlets. Mas para usar JSTL em nossas páginas JSP, precisamos baixar os arquivos JSTL para o seu container de servlets. Na maioria das vezes, você pode encontrá-los nos projetos de exemplo do servidor para download e pode usá-los. Você precisa incluir essas bibliotecas no diretório do projeto da sua aplicação web WEB-INF/lib.

Arquivos JSTL

Os arquivos JSTL são específicos para o container, 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 container, você deve incluí-los em sua aplicação. Se você tiver um projeto Maven, as dependências a seguir devem ser adicionadas no arquivo pom.xml ou 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 do JSTL, elas são categorizadas em cinco tipos.

  1. Tags Principais do JSTL: As tags principais do JSTL fornecem suporte para iteração, lógica condicional, captura de exceções, URL, redirecionamento de resposta etc. Para usar as tags principais do JSTL, devemos incluí-las na página JSP como abaixo.

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

    Neste artigo, examinaremos as tags principais importantes do JSTL.

  2. Tags de Formatação e Localização do JSTL: 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 jstl no JSP com a sintaxe abaixo:

    <%@ taglib uri="https://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
    
  3. Tags SQL do JSTL: As tags SQL do JSTL fornecem 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 JSTL no JSP com a sintaxe abaixo:

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

    <%@ taglib uri="https://java.sun.com/jsp/jstl/xml" prefix="x" %>
    
  5. Tags de Funções do JSTL: As tags do JSTL fornecem uma variedade de funções que podemos usar para realizar operações comuns, sendo 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 do JSTL na página JSP é:

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

Observe que todos os URIs das tags padrão do 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

As Tags Principais do JSTL estão listadas 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 usos das 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, quando executamos a aplicação com o URL https://localhost:8080/JSTLExample/HomeServlet, obtemos a resposta como na imagem abaixo. No exemplo JSTL acima, estamos usando 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 é tudo para uma rápida visão geral das tags JSTL e exemplo de uso das tags principais da JSTL. Referência: Página da Wikipedia sobre JSTL

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