JSTL – Aplicações web simples e fácil em java

Produtividade! Se existe uma palavra chave no mundo de desenvolvimento é essa, que durante os últimos anos, foi a motivação pela busca de idéias, técnicas e ferramentas para servir de apoio ao ganho de produtividade, criando uma verdadeira sopa de letrinhas que funcionam como uma camada em cima de outra, visando sempre, aumentar a “tal produtividade”.

Em Java, devido ser uma tecnologia free e agora open-source, sempre favorece o surgimento de novas soluções que atendam a área de desenvolvimento, gerando um batalhão de siglas para todos os gostos, que cada um deles, ao seu jeito, jura de “pé juntos” que faz milagres em seu projeto de software.

Nesse artigo, vamos estudar através de um exemplo prático, uma tecnologia que devido a sua simplicidade, é uma verdadeira “mão-na-roda” para o desenvolvimento web usando Java, trata-se do JSTL (Java Server Pages Standard Tag Library), ou em bom português Biblioteca Padrão de Tags JSP.

A idéia central dessa tecnologia consiste que ela funcione como uma extensão da tecnologia JSP, oferecendo ao desenvolvedor, tags que trazem formas mais simples e produtivas, de implementar funcionalidades cruciais de seu código, como por exemplo: laços, estruturas de decisão, conexão a banco dados, execução de query's SQL, etc.

Outro recurso muito importante, introduzido pela JSTL, é a EL, ou seja, Expression Language(Linguagem de Expressão), que é uma forma mais simples de acessar e manipular objetos, sua sintaxe, é composta por um “cifrão”, seguido por um par de chaves, contendo o nome do objeto, por exemplo: ${objeto.nomeAtributo}.

A biblioteca do JSTL está distribuída em 5(cinco) pacotes, agrupados por funcionalidade, veja a tabela 01 contendo a descrição de cada um.

Pacote Sugestão de prefixo Descrição
JSTL Core C Tags relacionadas à lógica e controle como (if, forEach, url, set, import, etc.).
JSTL fmt fmt Tags para formatação e internacionalização de dados
JSTL sql sql Tags para acessar, inserir, alterar e deletar dados em um servidor de banco de dados.
JSTL xml xml Tags para seleção, parser e transformação de modelos XML.
JSTL functions Fn Conjunto de funções para o processamento de objetos Strings e coleções

Esses pacotes, estão definidos em arquivos TLD's(Tag Library Descriptor) que estão disponíveis em 2(dois) arquivos JAR's, o JSTL1.1 standard.jar e o JSTL1.1-jstl.jar , necessários ao uso do JSTL dentro de sua aplicação, portanto, devem ser adicionados ao class-path de sua aplicação(uma dica, no caso específico do NetBeans, basta clicar com o botão direito do mouse sobre o nó Libraries, escolha a opção add Library, procure e escolha a biblioteca JSTL X.X , em seguida conclua clicando em add Library).

É importante você observar que cada pacote, possui seu próprio endereço de URI (Uniforme Resource Identifier), que deverá ser inserido como atributo da tag jsp <%@ taglib /> seguido pela sugestão de prefixo conforme a tabela 01, no formato mostrado baixo:


            <%@ taglib uri="uri_da_taglib" prefix="prefixo" %>

 Observe abaixo, as formas padrões de chamada a cada tld:

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

-  Exemplo: <c:if test="..." ... >...</c:if>

XML library: <%@ taglib uri="http://java.sun.com/jstl/ea/xml" prefix="x" />

- Exemplo: <x:parse>...</x:parse>

Internacionalização:  <%@ taglib uri="http://java.sun.com/jstl/ea/fmt"  prefix="fmt" />

- Exemplo: <fmt:message key="..." />

SQL: <%@ taglib uri="http://java.sun.com/jstl/ea/sql" prefix="sql" />

- Exemplo: <sql:update>...</sql:update>
            

É importante, observar, que uma vez declarado o pacote específico, você irá invocar as tags usando o prefixo definido no atributo prefix, conforme o exemplo abaixo:


            <prefixo:nomeTag atributo="...">

 

                Corpo da tag ...
            
             
            
            </prefixo:nomeTag
            

Ok! Agora como o próprio título do artigo sugere, vamos ao nosso exemplo prático que mostra o uso das tags JSTL, observe que este código, está todo comentado em formato web com uso de <!-- --> .

Para ser mais objetivo, assumimos que você já possua algum conhecimento sobre páginas JSP, por isso para testar o código abaixo, na IDE de sua preferência, crie um projeto web, adicione os jars da biblioteca JSTL e de conexão JDBC específica ao seu banco de dados, adicione um página JSP(pode ser chamada de index.jsp) e monte o exemplo conforme a listagem 01.




            <%@page contentType="text/html"%>

            <%@page pageEncoding="UTF-8"%>

 

            <!--taglib é uma tag JSP para declaração dos pacotes específicos JSTL através da URI apropriada e da sugestão de prefixo padrão, lembrando que essa etapa é importante, pois, definirá o prefixo de chamada das tags de cada pacote.-->

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

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

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

 

            <html>

            <head>

            <!-- setDataSource é uma tag JSTL para configuração de acesso ao servidor de banco de dados criando um objeto dataSource que será consumido pelas outras tags SQL,     onde devem ser definidos os atributos necessários para especificar: o nome da variável dataSource, driver, url(caminho do servidor), usuário, senha e         principalmente o "escopo" de visibilidade do objeto na aplicação, em nosso caso, definimos que  nosso objeto será compartilhado por todo o tempo de    vida da sessão.-->

        <sql:setDataSource var="ds"

                           driver="org.firebirdsql.jdbc.FBDriver"

                           url="jdbc:firebirdsql:localhost:c:\ACADEMICO.FDB"

                           user="sysdba"

                           password="masterkey"

                           scope="session" />

   

                           <title>Exemplo JSTL - Manoel Pimentel </title>

                           </head>

                           <body>

       

                           <h1>Listagem de Produtos</h1>

                           <hr>

                           <!--A tag query é usada para processar uma setença SQL de seleção de registros e gerar um objeto ResultSet internamente na memória, conforme especificado no atributo   var, usando a conexão aberta  chamada "ds", que neste caso está definido no atributo dataDource através do uso de EL(Expression Language). -->

                           <sql:query var="ResultadoProdutos" dataSource="${ds}">

            select * from PRODUTOS

            </sql:query>

            <table border="1">

            <thead>

            <th>Código</th>

            <th>Nome</th>

            <th>Ultima Compra</th>

            <th>Preco Custo</th>

            <th>Preco Venda</th>

            <th>Margem</th>

            <th>Avaliação</th>

               

            </thead>

            

            <!--forEach, implementa um laço  para fazer a interação no ResultSet  gerado pela tag query  conforme o atributo items.-->

            <c:forEach var="listaProdutos" items="${ResultadoProdutos.rows}">

            <tr>

            <!--A tag out é responsável por gerar uma String de saída na tela -->

            <td><c:out value="${ listaProdutos.CODPRD }"/></td>

            <td><c:out value="${listaProdutos.NOME}"/></td>

                   

            <!--formatDate aplica um padrão de formato, conforme o atributo pattern, em um valor tipo data definido no atributo value. -->

            <td><fmt:formatDate pattern="dd/MM/yyyy" value="${listaProdutos.DATA_ULTIMA_COMPRA}"/></td>

            <td><c:out value="${listaProdutos.PRECO_CUSTO}"/></td>

            <td><c:out value="${listaProdutos.PRECO_VENDA}"/></td>

                   

            <!--A tag set declara e inicializa uma variável conforme o atributo value. -->

            <c:set var="totalPrecoCusto" value="${totalPrecoCusto+listaProdutos.PRECO_CUSTO}"/>

            <c:set var="totalPrecoVenda" value="${totalPrecoVenda+listaProdutos.PRECO_VENDA}"/>

            <c:set var="valorMargem" value="${listaProdutos.PRECO_VENDA-listaProdutos.PRECO_CUSTO}"/>

                   

            <td><c:out value="${valorMargem}"/></td>

                   

            <!--As tags choose, when e otherwise,  aplicam um conjunto de  estrutura de decisão. -->

            <c:choose>

            <c:when test="${valorMargem<=350}">

            <td>Baixa</td>       

            </c:when>

            <c:when test="${valorMargem<=400}">

            <td>Media</td>       

            </c:when>

            <c:otherwise>

            <td>Alta</td>

            <c:otherwise>

            </c:choose>

            </tr>

            </c:forEach>

            <tfoot>

            <th colspan="3">

                Total:

                </th>

                <th>

                <!--formatNumber aplica uma formatação de decimais no atributo value conforme o atributo pattern. -->

                <fmt:formatNumber value="${totalPrecoCusto}" pattern="#,#00.00#"/>

                </th>

                <th>

                <fmt:formatNumber value="${totalPrecoVenda}" pattern="#,#00.00#"/>

                </th>

                </tfoot>

                </table>

                </body>

                </html>           


Listagem 01 – Código completo do exemplo.

Pronto, sem querer parecer um apresentador de programa culinário, mais se você fez todos os passos corretamente, quando colocar e rodar sua aplicação em um container como o TomCat, vai obter uma tela conforme mostra a figura 01 abaixo.

figura1

Bem amigo leitor, essa foi uma pequena mostra de como o JSTL pode funcionar, lembre-se que, usando essas tags, diminuirá a necessidade de inserir códigos Java como scriptlets, declarações> ou expressões diretos na sua página JSP, pois as tags JSTL farão isso para você, com isso você poderá ter um aumento significativo na produtividade de seu projeto(experiência própria hein!), porém, sugiro que a partir desse artigo, procure se aprofundar mais em como JSTL funciona e nas suas outras tags que não abordamos aqui.

Referências:

Site da própria SUN sobre JSTL