JSP Standard Tag Library (JSTL)

Computação II - Ciência da Computação


Prof.: Danilo S. Carvalho

Nessa aula, vamos explorar um conjunto especial de tags no JSP, chamado JSP Standard Tag Library (JSTL).


Ao final da aula, poderemos usar as tags JSTL para melhorar a separação entre os componentes View e Controller do nosso projeto web.

Com o JSP, conseguimos colocar o código responsável por construir a interface com o usuário em arquivos separados dos servlets e da lógica de funcionamento do programa.


Entretanto, ainda precisamos escrever código Java (declarações, scriptlets e expressões JSP) para escrever um documento como resposta a uma requisição.


Podemos minimizar esse código adotando as tags da JSP Standard Tag Library (JSTL).

O JSTL é uma biblioteca que contém um conjunto de tags especiais para serem usadas no JSP.


Essas tags facilitam a declaração de partes do documento e permitem minimizar, ou até mesmo eliminar o uso de scriptlets.

Para usar a JSTL, precisamos primeiro baixar e registrar a biblioteca no servlet container que estivermos usando para servir o JSP (ex: Tomcat).

A biblioteca pode ser encontrada nesse link. Baixe todos os arquivos JAR e coloque dentro do diretório WEB-INF/lib no container.

Em seguida, registre a biblioteca no projeto do Eclipse, clicando com o botão direito no projeto e selecionando "Build Path" -> "Configure Build Path...". Na aba "Libraries", selecione o item "Classpath" e adicione os JARs com o botão "Add JARs...".

A configuração deve ficar similar ao da figura abaixo.

Com a biblioteca instalada, podemos usar as tags JSTL para nos ajudar. Mas quais são elas e para que servem?

As tags JSTL estão separadas em prefixos, de acordo com suas funções.

De acordo com os prefixos usados, precisamos colocar uma diretiva no JSP informando ao compilador das novas tags.

Vejamos então dois prefixos básicos para o uso da JSTL: Core tags e Formatting tags.

Core tags: conjunto central de tags JSTL. Acessamos elas através do prefixo "c", que corresponde à diretiva abaixo:

Alguns exemplos importantes de tags core são:

<c:out />: Coloca um valor na resposta. Similar a uma expressão JSP. O valor a ser colocado pode ser uma variável ou campo de um objeto.

<c:if test="[expressão booleana]"></c:if>: Executa o que está dentro da tag se o resultado da expressão booleana for verdadeiro.

<c:forEach items="${coleção}" var="item"></c:forEach>: Executa o que está dentro da tag para cada item da coleção "items", cujo nome da váriável é dado por "var".

                        
                            <%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
                        
                    
                        
                            <c:out value="${item.nome}" />
                        
                    
                        
                            <c:if test="${item.desconto > 0}">
                                <c:out value="${item.desconto}" />
                            </c:if>
                        
                    
                        
                            <c:forEach items="${menu}" var="item">
                                <c:out value="${item.nome}" /> - <c:out value="${item.valor}" />
                            </c:forEach>
                        
                    

Formatting tags: Tags para formatação de valores. Acessamos elas através do prefixo "fmt", que corresponde à diretiva abaixo:

Alguns exemplos importantes de tags formatting são:

<fmt:formatNumber />: Formata um número de acordo com os parâmetros passados.

<fmt:formatDate />: Formata uma data de acordo com os parâmetros passados.

                        
                            <%@ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt" %>
                        
                    
                        
                            <fmt:formatNumber type = "number" maxIntegerDigits = "3" value = "${item.valor}" />
                            <fmt:formatNumber type = "currency" value = "${item.valor}" />
                        
                    
                        
                            <fmt:formatDate type = "time" value = "${now}" />
      
                            <fmt:formatDate type = "date" value = "${now}" />
      
                            <fmt:formatDate type = "both" value = "${now}" />

                            <fmt:formatDate pattern = "yyyy-MM-dd" value = "${now}" />
                        
                    

Sabemos agora como minimizar o uso de código Java no JSP e com isso melhorar a separação dos componentes View e Controller de um sistema Web Java, e também deixar o código mais uniforme e simples de manter.


Leia o material de apoio para conhecer o restante das tags JSTL e experimente modificar o documento HTML conforme os campos dos objetos vindos da classe controller (servlets ou outras classes).

Exercício:

  1. Crie um JSP (+ JSTL) para implementar a interface gráfica do sistema da biblioteca, que foi desenvolvido como solução da 4ª lista de exercícios.