O que é JSTL?

JSTL é o acrônimo de JavaServer Pages Standard Template Library, o qual podemos usar para recuperar dados de forma transparente usando como componente básico da JEE o qual é muito usado na programação pura, como costumo chamar quando programamos diretamente e tão somente no JSP (Java Server Pages).

Pra que serve?

Pode servir, como dito no parágrafo anterior, como mecanismo básico de recuperação de dados, de um banco de dados, de um arquivo de contexto e (ou) XML (XML (Extensible Markup Language) é uma recomendação da W3C para gerar linguagens de marcação para necessidades especiais.) Para maiores informações sobre o XML, clique aqui. Ainda falando sobre o uso da JSTL é bem interessante frisar que podemos através dela (JSTL), usar de maneira embutida, o código de lógica Java, sem necessariamente usar uma classe Java. Porém através do uso de Beans, ficando bem mais transparente e organizado, mas cada caso é um caso e não vamos entrar nesse critério agora para não fugirmos do assunto JSTL, ok?
JSTL ainda nos cabe dizer que visa permitir que os programadores JSP usem tags em vez de código Java. Parece redundante isso, mas então porque vamos querer em algum momento não usar Java, ou uma classe mais especialista pra isso?
Calma, eu respondo, o uso do JSTL é bastante aceito e sugerido quando necessitamos de algo mais rápido, uma simples amostragem, como exemplos rápidos, consultas pré-ordenadas. Como exemplo de mal uso da programação, por vezes um profissional abusa do código junto ao HTML, ou HTML+JSP, enchendo de scriptlets (são comandos Java embutidos dentro do HTML, usando as tags de marcação <% .... %>).

Veja o código abaixo para iniciarmos nossa comparação:


<html>
  <head>
    <title>Usando ScriptLets</title>
  </head>
  <body>
<%
  for(int j=1;j<=10;j++)
{%>
<%=j%><br/>
<%
}
%>
é dá certo também.... mas...poderia ficar melhor!
</body>
</html>
OK, teste esse código no seu editor Java preferido (Eclipse, NetBeans, etc...)
Depois de testado, vamos preparar nossa aplicação.

Preparando sua aplicação para funcionar com o JSTL

Como quase tudo em Java, JSP, EJB, sempre vamos precisar configurar nosso ambiente, nossa aplicação, servidor, etc... Para tal vamos precisar dos arquivos .jar, que são as bibliotecas do JSTL.

Você pode baixar aqui

Teste

Execute numa nova página o código descrito abaixo:


<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<html>
  <head>
    <title>Agora vamos usar a JSTL?</title>
  </head>

  <body>
    <c:forEach var="i" begin="1" end="10" step="1">
      <c:out value="${i}" />

      <br />
    </c:forEach>
E agora? o que achou? 
</body>
</html>

Possíveis Erros!

E isso é bom ler meu amigo... Pode ser que sua aplicação não funcione de primeira, então, verifique os possíveis erros:
- Configurar corretamente sua jar na pasta de bibliotecas corretamente;
- Versão da sua JEE;
-<%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c'%>
no inicio do arquivo, senão der certo mude para:
<%@ taglib uri='http://java.sun.com/jstl/core' prefix='c'%>

Pronto se não deu nenhum problema ou você conseguiu resolver pelo tópico acima, então vamos prosseguir e teste sua aplicação e veja a diferença entre uso de scriptlets e jstl.

Configurando seu web.xml

Na verdade usando o Netbeans e o JEE5, não foi preciso nenhuma configuração, mas se você estiver usando outro Editor, como o Eclipse, pode ser necessário, portanto veja como fazer na edição desse arquivo de contexto.


Fig.1 clique com o botão direito do mouse em web.xml e clique em Editar.

Acrecente essas linhas dentro, entre as tags de aplicação.


<taglib>
    <taglib-uri>http://java.sun.com/jstl/fmt</taglib-uri>
    <taglib-location>/WEB-INF/fmt.tld</taglib-location>
  </taglib>

  <taglib>
    <taglib-uri>http://java.sun.com/jstl/fmt-rt</taglib-uri>
    <taglib-location>/WEB-INF/fmt-rt.tld</taglib-location>
  </taglib>

  <taglib>
    <taglib-uri>http://java.sun.com/jstl/core</taglib-uri>
    <taglib-location>/WEB-INF/c.tld</taglib-location>
  </taglib>

  <taglib>
    <taglib-uri>http://java.sun.com/jstl/core-rt</taglib-uri>
    <taglib-location>/WEB-INF/c-rt.tld</taglib-location>
  </taglib>

  <taglib>
    <taglib-uri>http://java.sun.com/jstl/sql</taglib-uri>
    <taglib-location>/WEB-INF/sql.tld</taglib-location>
  </taglib>

  <taglib>
    <taglib-uri>http://java.sun.com/jstl/sql-rt</taglib-uri>
    <taglib-location>/WEB-INF/sql-rt.tld</taglib-location>
  </taglib>

  <taglib>
    <taglib-uri>http://java.sun.com/jstl/x</taglib-uri>
    <taglib-location>/WEB-INF/x.tld</taglib-location>
  </taglib>

  <taglib>
    <taglib-uri>http://java.sun.com/jstl/x-rt</taglib-uri>
    <taglib-location>/WEB-INF/x-rt.tld</taglib-location>
  </taglib>
Pronto, salve e teste verificando se tudo está certo. Caso dê errado seu Editor dará uma mensagem de erro informando a linha escrita errada, ou caminho inválido, mas tenha certeza que copiou a jstl.jar para sua pasta de biblioteca corretamente.

Lembrando que além de ter certeza do seu .jar, tenha certeza que só é necessário fazer isso em alguns editores, portanto teste primeiro, elimando essa fase desnecessária, conforme eu mencionei no meu caso usando o Netbeans não foi preciso fazer nada disso, ok?

Entendendo as Bibliotecas dentro do Pacote JSTL

XML Tag Library

Usada para acessar os elementos XML. Como o XML é usada em muitos aplicativos da Web, processamento de XML é uma característica importante do JSTL.

Formatting/Internationalization Tag Library


Usada ​​para dados , formatação e análise. Algumas dessas marcas vai analisar dados, tais como datas, de forma diferente dependendo da localidade atual.

Database Tag Library

São tags que pode ser usadas para acessar banco de dados, usando comandos SQL.

Core Tag Library

Contém as tags essenciais, padrão para a execução, por exemplos loops, expressões, etc...Seria o básico do tratamento de entrada e saída, input and output.

EL Expression Language


Não podemos deixar de falar da EL, que o cerne dessa nossa discussão até o momento, é ela que nos permite o comando Java embutido, como uma linguagem padrão num pequeno trecho de código, por exemplo, o que usamos:


    <c:out value="${item}"/>
 
Ou ainda poderíamos usar cálculos matemáticos como:


	<p>
		  O total da compra é.: ${total+produto}
	</p>
Veja agora um outro exemplo:


	<%@page contentType="text/html" pageEncoding="UTF-8"%>
	<%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c'%>
<html>
  <head>
    <title>If with Body</title>
  </head>

  <body>
    <c:if test="${pageContext.request.method=='POST'}">
      <c:if test="${param.question=='javamagazine'}">Voce esta certo!
      <br />

      <br />

      <br />
      </c:if>

      <c:if test="${param.question!='javamagazine'}">Voce errou meu jovem!
      <br />

      <br />

      <br />
      </c:if>
    </c:if>

    <form method="post">Qual a melhor revista de Java?
    <input type="text" name="question" />

    <input type="submit" value="Enviar!" />

    <br />
    </form>
  </body>
</html>

Prontinho, galera, ficamos por aqui tendo alguma dúvida ou sugestão fico feliz em poder ajudá-los, um forte abraço++