JSTL (Biblioteca de tags padrão JSP)

Neste tutorial JSTL, veremos como o uso de diferentes tags JSTL tornará a codificação JSP mais fácil.

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. Código limpo e organizado: 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:

Linha de código 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.

Linha de código 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:

Linha de código 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

Linha de código 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”.

Linha de código 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 o 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

Linha de código 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

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

Linha de código13: 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:

Linha de código 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

Linha de código 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 Ensaios 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:

Linha de código 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

Linha de código 11: Aqui estamos definindo a variável nomeada como contagem para 100

Linha de código 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

  • É usado para redirecionar a página atual para outro URL, fornecendo o URL relativo desta tag.
  • Suporta URLs relativos ao contexto

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:

Linha de código 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

Linha de código 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 a tag testGuru e podemos usar a classe taghandlertestTag, que substituirá 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 contêiner JSP criará automaticamente um mapeamento 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)

Linha de código 6:A classe guruTag estende a classe SimpleTagSupport que está presente no jar javax.servlet.JSP

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

Linha de código 9-10: Neste método, o código será incorporado à tag customizada que será chamada. Estamos pegando um objeto JspWriter e ele imprimirá “Guru Tag”.

Personalizado.tld

Linha de código 6: Aqui, o nome da tag personalizada é “guruTag”.

Linha de código 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

Linha de código 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.

Linha de código 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 a saída como “GuruTag” de guruTag.java, ou seja, TagHandler, que substitui o método doTag() e que imprime “Guru Tag” como saída.

Resumo

  • Nesta seção, aprendemos sobre a biblioteca de tags padrão JSP na qual criamos tags principais e tags personalizadas.
  • As tags principais incluem as tags for, if, redirect, import e catch, que eram tags usadas para propósitos básicos em JSP.
  • Além disso, fizemos tags personalizadas onde podemos definir as tags e usá-las em JSP