JSTL (Biblioteca de tags padrão JSP)

⚡ Resumo Inteligente

A JSP Standard Tag Library (JSTL) é uma coleção de bibliotecas de tags JSP personalizadas que fornecem funcionalidades comuns de desenvolvimento web, como iteração, lógica condicional, tratamento de exceções, importação e redirecionamento, tornando o código JSP mais limpo, portátil e fácil de ler do que os scriptlets.

  • 🏷️ Definição de JSTL: Uma coleção padrão de bibliotecas de tags JSP personalizadas para tarefas comuns na web.
  • Vantagens: Produz código limpo e portátil, mais fácil de ler para humanos e ferramentas do que scriptlets.
  • 🔧 Etiquetas principais: Os métodos `out`, `catch`, `import`, `forEach`, `if` e `redirect` lidam com saída, erros, inclusões, loops e condições.
  • 🔁 Iteração e Lógica: O loop forEach percorre intervalos, enquanto os loops if e catch adicionam tratamento condicional e de exceções.
  • 🛠️ Tags personalizadas: Crie tags definidas pelo usuário estendendo SimpleTagSupport, sobrescrevendo doTag() e mapeando-as.ping em um TLD.
  • 📄 Interface de tags: A Biblioteca de Etiquetas Descriptou (TLD) mapeia nomes de tags para suas classes de manipulador para o contêiner JSP.

JSTL - Biblioteca de tags padrão JSP

O que é JSTL em Java?

JSTLName é um anagrama para Java biblioteca de tags padrão de páginas do servidor e é uma coleção de bibliotecas de tags JSP personalizadas que fornecem funcionalidade comum de desenvolvimento web. JSTL é uma biblioteca de tags padrão do JSP.

Vantagens do JSTL

Abaixo estão as vantagens do JSTL:

  1. Etiqueta padrão: fornece uma rica camada de funcionalidade portátil de páginas JSP. É fácil para um desenvolvedor entender o código.
  2. Code Arrumado e limpo: Como os scriplets confundem o desenvolvedor, o uso de JSTL torna o código organizado e limpo.
  3. Automático JavaSuporte de interospecção de beans: tem uma vantagem do JSTL sobre os scriptlets JSP. Alças de linguagem de expressão JSTL JavaCódigo Bean com muita facilidade. Não precisamos fazer downcast dos objetos, que foram recuperados como atributos com escopo definido. Usar o código de scriptlets JSP será complicado e o JSTL simplificou esse propósito.
  4. Mais fácil para os humanos lerem: JSTL é baseado em XML, que é muito semelhante ao HTML. Portanto, é fácil para os desenvolvedores entenderem.
  5. Mais fácil para os computadores entenderem: Ferramentas como Dreamweaver e a primeira página estão gerando cada vez mais código HTML. As ferramentas HTML fazem um ótimo trabalho de formatação de código HTML. O código HTML é misturado com o código scriptlet. Como JSTL é expresso como tags compatíveis com XML, é fácil para a geração de HTML analisar o código JSTL dentro do documento.

Etiquetas JSTL

As tags principais são tags usadas com mais frequência em JSP. Eles fornecem suporte para

  • Iteração
  • Lógica condicional
  • Pegar exceção
  • URL para frente
  • Redirecionar, etc.

Para usar tags principais, precisamos primeiro definir a biblioteca de tags e abaixo está a sintaxe para incluir uma biblioteca de tags.

Sintaxe:

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

Aqui,

  • prefixo pode ser usado para definir todas as tags principais e
  • uri é a biblioteca do taglib da qual é importado

Vamos ver algumas das tags principais em detalhes,

1. Fora

  • O resultado da expressão é exibido na tag out
  • Ele pode escapar diretamente das tags XML. Portanto, eles não são avaliados como tags reais

Sintaxe:

<c:out value="" default="" escapeXML="">
  • Aqui o valor representa informações para a saída e é obrigatório
  • O padrão é a falha na saída de informações e não é obrigatório
  • escapeXML – É verdadeiro se escapar caracteres XML.

Exemplo:

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>

Explicação do código:

Code Linha 3: Este prefixo taglib é necessário para todas as tags e o prefixo adicionado é 'c'. Portanto, pode ser usado como prefixo para todas as coretags.

Code Linha 12: Aqui estamos usando coretag out com o prefixo “c” e isso imprimirá o valor na tag de expressão. Portanto, a saída será o nome

Ao executar o código acima, você obtém a seguinte saída:

Tags principais JSTL - Saída

Saída:

  • Estamos obtendo o valor como um nome da tag principal “out” que será impressa no fluxo de saída.

2. Pegar

  • Ele captura qualquer exceção que pode ser lançada que ocorre no corpo e é mostrada como saída.
  • É usado para lidar com os erros e capturá-los.

Sintaxe:

<c:catchvar="">

Aqui var representa o nome da variável, que conterá uma exceção que pode ser lançada.

Exemplo:

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

Explicação do código:

Code Linha 3: Este prefixo taglib é necessário para todas as tags e o prefixo adicionado é 'c', portanto, pode ser usado como prefixo para todas as coretags

Code Linha 11-13: Coretag catch é usado para capturar a exceção e imprimir a exceção. Aqui a exceção é levantada quando 10/0 e essa exceção tem o nome “guruException”.

Code Linha 14: Estamos imprimindo a “guruException”.

Ao executar o código, você obterá a seguinte saída:

Tags principais JSTL - captura

Saída:

  • Estamos obtendo uma exceção aritmética como /by zero, e ela é impressa na saída usando a variável “guruException”

3. Importar

  • Podemos importar o conteúdo de outro arquivo para uma página JSP como fizemos em JSP inclui ação.
  • Aqui também podemos incluir URL e o conteúdo será exibido nessa página.

Sintaxe:

<c:importvar="" uri="">

Aqui var é um nome de variável que é um identificador, que conterá o nome do arquivo/uri. uri é um nome de arquivo relativo ou 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>

Explicação do código:

Coretag_jsp31.jsp

Code Linha 3: Este prefixo taglib é necessário para todas as tags e o prefixo adicionado é 'c', portanto, pode ser usado como prefixo para todas as coretags

Code Linha 11-12: Aqui estamos importando o arquivo coretag_jsp32.jsp para este arquivo usando a tag de importação

Code Linha 13: Aqui estamos imprimindo o arquivo coretag_jsp32.jsp usando a tag out.

Ao executar o código acima, você obtém a seguinte saída.

Tags principais JSTL - Importar

Saída:

  • Coretag_jsp32 é impresso na saída porque este arquivo foi importado em coretag_jsp31.jsp.

4. para cada

  • É usado para iterar o número de elementos em uma série de instruções.
  • É o mesmo que um Java forloop.

Sintaxe:

<c:forEach var="" begin=""  end="">
  • Aqui var representa o nome da variável que conterá o nome do contador
  • Begin representa o valor inicial do contador
  • End representará seu valor final

Exemplo:

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

Explicação do código:

Code Linha 3: Este prefixo taglib é necessário para todas as tags e o prefixo adicionado é 'c', portanto, pode ser usado como prefixo para todas as coretags

Code Linha 11-13: Aqui usamos o loop “forEach” onde o nome da variável é “gurucount”, que começou a contagem como 5 e terminou a contagem como 10. Estamos imprimindo a variável gurucount que tem números começando de 5 a 10.

Ao executar o código, você obtém a seguinte saída

Tags principais JSTL - forEach

Saída:

  • A saída que estamos obtendo vai de 5 a 10.

5. E se

  • É usado para Testes condições.
  • Se a tag for usada para testar uma condição, seja ela verdadeira ou não com base nisso, o bloco de código será executado.

Sintaxe:

<c:if test="${condition}></c:if>

Aqui, se a condição for verdadeira, uma série de instruções será executada.

Exemplo:

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

Explicação do código:

Code Linha 3: Este prefixo taglib é necessário para todas as tags e o prefixo adicionado é 'c', portanto, pode ser usado como prefixo para todas as coretags

Code Linha 11: Aqui estamos definindo a variável nomeada como contagem para 100

Code Linha 12-14: Aqui estamos usando “if condition” onde estamos verificando se a contagem é igual a 100. Se for igual a 100, então obtemos a saída como “A contagem é 100”.

Ao executar o código acima, você obtém a seguinte saída

Tags principais JSTL - se

Saída:

  • Como a condição “se” for verdadeira, obtemos a saída como “A contagem é 100”.

6. redirecionar

  • É utilizado para redirecionar a página atual para outra. URL fornecendo o relativo URL desta etiqueta.
  • Suporta contexto relativo URLs

Sintaxe:

<c:redirect url="" context=""/>

Aqui, url é o URL relativo para o qual deve ser redirecionado e o nome do contexto do aplicativo da web local.

Exemplo:

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

Explicação do código:

Code Linha 3: Este prefixo taglib é necessário para todas as tags e o prefixo adicionado é 'c', portanto, pode ser usado como prefixo para todas as coretags

Code Linha 11: Aqui usamos “redirect tag”, onde especificamos o urlname, e quando clicamos nessa página ela redireciona para o site que foi fornecido para redirecionamento.

Ao executar o código acima, você obtém a seguinte saída;

Tags principais JSTL - Redirecionamento

Saída:

  • Obtemos o URL de saída guru99.com que é redirecionado por coretag_jsp6.jsp

Etiquetas personalizadas JSTL

  • É um definido pelo usuário JSP elemento de linguagem.
  • Quando JSP é traduzido em um servlet, a tag personalizada é convertida em uma classe que executa uma ação em um objeto e é chamada de manipulador de tags.
  • Essas ações quando o servlet é executado são invocadas pelo contêiner da web.
  • Para criar a tag personalizada definida pelo usuário, precisamos criar o manipulador de tags que estenderá o SimpleTagSupport e substituiremos o método doTag().
  • Precisamos criar um TLD onde precisamos mapear o arquivo de classe no TLD.

Vantagens de tags personalizadas em JSP

Aqui estão as vantagens das tags personalizadas em JSP:

  • Portátil: Uma ação descrita em uma biblioteca de tags deve ser utilizável em qualquer contêiner JSP.
  • simples: Usuários não sofisticados devem ser capazes de entender e usar esse mecanismo. Fornecedores de funcionalidade JSP devem achar fácil disponibilizá-la aos usuários como ações.
  • Expressivo: O mecanismo deve oferecer suporte a uma ampla gama de ações, incluindo ações aninhadas, elementos de script dentro de corpos de ação, criação, uso e atualização de variáveis ​​de script.
  • Utilizável em diferentes linguagens de script: Embora a especificação JSP atualmente defina apenas a semântica para scripts no Java linguagem de programação, queremos deixar aberta a possibilidade de outras linguagens de script.
  • Construído sobre conceitos e maquinário existentes: Não queremos reinventar o que existe em outros lugares. Também queremos evitar conflitos futuros sempre que pudermos prevê-los

Sintaxe:

Considere que estamos criando um teste.Guru Podemos usar a classe `taghandlertestTag`, que sobrescreverá o método `doTag()`.

<ex:testGuru/>
Class testTag extends SimpleTagSupport{ public void doTag()}

Além disso, teremos que mapear esta classe testTag no TLD (Tag Library Descriptou) como o contêiner JSP criará automaticamente um mapaping entre o arquivo de classe e o URI que foi mencionado no arquivo TLD.

Interface de tags JSP

  • Esta classe terá que estender a classe SimpleTagSupport.
  • Esta classe terá que substituir o método doTag() que faz parte da classe SimpleTagSupport (a substituição é um método que é herdado da classe pai).
  • Esta interface é uma subinterface da interface JSPTag.
  • Ele fornece métodos para execução no início e no final da tag.
  • Além disso, precisamos mapear esta classe no TLD, ou seja, descritor da biblioteca de tags

Estamos considerando no exemplo abaixo

Método de interface de tags

  • doTag() é um método que precisamos substituir e que terá o conteúdo da tag.
  • Leva o contexto JSP atual usando getJSPContext()

Exemplo:

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>

Personalizado.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");
	}

}

Explicação do código:

guruTag.java(TagHandler)

Code Linha 6:A classe guruTag estende a classe SimpleTagSupport que está presente no jar javax.servlet.JSP

Code Linha 7: Aqui estamos substituindo o método doTag() que lança JspException e IOException.

Code Linha 9-10: Neste método, o código será incorporado a uma tag personalizada que será chamada. Estamos usando um objeto JSP.Writere isso imprimirá “Guru Dia."

Personalizado.tld

Code Linha 6: Aqui, o nome da tag personalizada é “guruTag”.

Code Linha 7:A classe de tag é taghandlerclass, ou seja, guruTag.java. É necessário o caminho completo do arquivo manipulador, que inclui o caminho do diretório da localização do arquivo.

Customtag_jsp1.jsp

Code Linha 3:Este prefixo taglib é necessário para todas as tags e o prefixo adicionado é 'ex', portanto, pode ser usado como um prefixo para todas as coretags e uri é custom.tld que mapeia o manipulador de tags.

Code Linha 11: Aqui estamos definindo a tag customizada “guruTag”, que chamará o método doTag() da classe manipuladora e o código dentro dela será executado.

Ao executar o código acima, você obtém a seguinte saída

Interface de tags JSP

Saída:

  • Obtemos o resultado como “GuruTag” de guruTag.java, ou seja, TagHandler, que sobrescreve o método doTag() e que imprime “Guru Etiqueta” como saída.

Perguntas Frequentes

A JSTL possui cinco grupos de tags: core, formatting (I18N), SQL, XML e functions. As tags core lidam com iteração e lógica, enquanto as tags formatting, SQL, XML e functions abrangem localização, bancos de dados, XML e utilitários de string.

JSTL usa tags legíveis semelhantes a XML para a lógica, enquanto scriptlets incorporam código bruto. Java Em JSP, o JSTL produz páginas mais limpas e fáceis de manter, além de evitar a mistura de linguagens. Java Código com marcação HTML.

Um TLD é um arquivo XML que mapeia nomes de tags personalizadas para suas respectivas classes de manipuladores. O contêiner JSP lê o TLD para saber qual tag usar. Java Classe a ser executada para cada tag personalizada.

Assistentes de IA podem gerar tags JSTL, escrever manipuladores de tags personalizados, converter scriptlets em JSTL e explicar a linguagem de expressões. Eles aceleram o desenvolvimento de JSP enquanto os desenvolvedores revisam o código gerado.

Sim. As ferramentas de IA podem analisar o código de scriptlets e reescrevê-lo usando tags JSTL equivalentes e linguagem de expressão, ajudando no processo de aprendizado.ping Modernizar páginas JSP legadas, preservando sua funcionalidade.

Resuma esta postagem com: