JSTL – Exemplo de um cadastro web

 

Caro leitor, continuando com a nossa saga em desbravar a tecnologia JSTL, vamos aprender nesse artigo, como criar uma tela de cadastro simples, e um processo de inserção de registros  em uma tabela de banco de dados usando somente as tags JSTL.

 

Lembrando que esse assunto foi iniciado em nosso artigo anterior, intitulado “JSTL – Aplicações web simples e fácil em Java”, portando, é importante que o leia, para melhor entender alguns detalhes nesse artigo.

 

Nossa pequena aplicação terá 2(duas) páginas JSP, uma contendo um formulário com alguns campos para cadastro de cliente, e outra com o código JSTL para processamento dos dados enviados via requisição POST  e gravação dos mesmos no banco de dados.

 

Para melhor aproveitamento do exemplo que será exposto neste artigo, observe na Figura 01, as tabelas CLIENTES e ESTADOS que servirão de base para nossa pequena aplicação.

 

jstl-fig01.JPG

Figura 01 – Tabelas da aplicação.

 

É importante lembrar, que neste exemplo, estou usando o FireBird 1.5, portando, é importante que você saiba que como configurar o driver JDBC do mesmo  em sua aplicação, no caso, está sendo usando no exemplo o driver JayBird-2.0.1, mas você pode sentir-se a vontade para usar o driver ou até mesmo outro banco de dados de sua preferência.

 

Caso queira usar essas tabelas, abaixo na listagem 01, têm os scripts SQL para a criação das mesmas, lembrando que, estão no padrão SQL usado pelo FireBird.

 

/* Criação da tabela Estados */

CREATE TABLE ESTADOS (

    SIGLA  VARCHAR(2) NOT NULL,

    NOME   VARCHAR(50) NOT NULL,

    PAIS   VARCHAR(30)

);

ALTER TABLE ESTADOS ADD CONSTRAINT PK_ESTADOS PRIMARY KEY (SIGLA);

 

 

/*Povoando a tabela ESTADOS  */

INSERT INTO ESTADOS (SIGLA,NOME,PAIS) VALUES ('AM','Amazonas','Brasil');

INSERT INTO ESTADOS (SIGLA,NOME,PAIS) VALUES ('AP','Amapá','Brasil');

INSERT INTO ESTADOS (SIGLA,NOME,PAIS) VALUES ('PA','Pará','Brasil');

 

 

 

/* Criação da tabela Clientes */

CREATE TABLE CLIENTES (

    CODIGO    VARCHAR(8) NOT NULL,

    NOME      VARCHAR(80) NOT NULL,

    CPF       VARCHAR(20),

    RG        VARCHAR(20),

    TELEFONE  VARCHAR(20),

    EMAIL     VARCHAR(60),

    ESTADO    VARCHAR(2)

);

 

ALTER TABLE CLIENTES ADD CONSTRAINT PK_CLIENTES PRIMARY KEY (CODIGO);

 

ALTER TABLE CLIENTES ADD CONSTRAINT FK_CLIENTES_1 FOREIGN KEY (ESTADO) REFERENCES ESTADOS (SIGLA);

Listagem 01 – Scripts SQL para a criação das tabelas.

 

Agora usando a IDE de sua familiaridade, crie um novo projeto web, de preferência usando o container TomCat(estou usando no exemplo a versão 5.5.17) e crie dois arquivos JSP, um chamado index.jsp contendo um formulário com os campos referentes ao cadastro simples de clientes(ver listagem 02) e outro chamado gravaCliente.jsp, que executar o inserção na tabela do banco de dados, usando os valores enviados pela página index.jsp por método POST  (ver listagem 03).

 

É importante lembrar que a tecnologia JSTL, é uma biblioteca de extensão da tecnologia JSP, por isso, criamos arquivos   “.jsp” para que através de chamadas específicas das taglibs, passemos a usar os recursos oferecidos pela JSTL.

 

Note que os exemplos abaixo, estão comentados em formato web com os marcadores <!-- e  -->.

 

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

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

 

<!--Chamada aos TLD's de cada pacote JSTL -->

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

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

 

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">

 

<html>

    <head>

       

        <!--Criação de um dataSource, que proverá uma conexão ao servidor de banco dados, note que o escopo de conexão está definido como sendo de sessão, dessa forma poderemos usar o mesmo objeto chamado "ds" de qualquer outra página JSP participante do mesmo gerenciamento de sessão.-->

 

        <sql:setDataSource var="ds"

                           driver="org.firebirdsql.jdbc.FBDriver"

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

                           user="sysdba"

                           password="masterkey"

                           scope="session"/>

                          

        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

        <title>Tela Cadastro - Artigo Manoel Pimentel</title>

    </head>

    <body>

       

        <h1>Exemplo JSTL - Tela de Cadastro</h1>

        <hr>

        <form action="gravaCliente.jsp" method="post">

            <label>Código </label><br>

            <input type="text" name="edtCodigo" size="10"/><br>

            <label>Nome: </label><br>

            <input type="text" name="edtNome" size="60"/><br>

            <label>CPF: </label><br>

            <input type="text" name="edtRG" size="15"/><br>

            <label>RG: </label><br>

            <input type="text" name="edtCPF" size="10"/><br>

            <label>Estado: </label><br>

 

            <!--Executa um comando SQL de seleção, gerando um objeto do tipo Result, que  é semelhante a classe ResultSet da API  JDBC -->

 

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

                select * from ESTADOS

                order by

                   NOME

            </sql:query>

 

            <!--Cria um objeto select (estilho comboBox), preenchendo suas opções com um laço forEach na coleção contida em “qryEstados.rows”, armazenando cada registro, na variável estado, e acessando a valor de um determinado campo usando a EL(Expression Language)   ${estado.nome}  -->

 

            <select name="cmbEstados">

                <c:forEach var="estado" items="${qryEstados.rows}">

                    <option value="PA">${estado.nome}</option>

                </c:forEach>

            </select><br>

 

            <label>Telefone: </label><br>

            <input type="text" id="edtTelefone" size="15"/><br>

            <label>E-mail: </label><br>

            <input type="text" name="edtEmail" size="50"/><br>

            <hr>

            <input  accesskey="o" type="submit" name="btnOK" value="OK">

            <input  accesskey="c" type="reset" name="btnCancelar" value="Limpar">

        </form>

    </body>

</html>

 

Listagem 02 – Código da index.jsp, para gerar a tela de cadastro

        

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

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

 

<!--Chamada aos TLD's de cada pacote JSTL -->

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

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

 

<!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=UTF-8">

        <title>Tela Cadastro - Artigo Manoel Pimentel</title>

    </head>

    <body>

       

        <!--Equivalente ao try/catch, a tag catch tenta executar o que estiver dentro de seu corpo, e caso ocorra alguma exceção, será capturada e armazenada na variável "ex". -->

       

        <c:catch var="ex">

           

            <!--Cria uma transação com o banco dados, onde podemos executar de forma mais protegida e seqüencial, várias atualizações ou inserções. -->

           

            <sql:transaction dataSource="${ds}">   

               

                <!--Executa algum comando como insert, update ou delete  e armazena o resultado na varável "gravaCli".  Note que estamos usando a tag sql:param para passar dinamicamente os valores em cada sinal de interrogação da cláusula values, vale lembrar que dessa forma, estaremos gerando uma espécie de sentença preparada, e dessa forma ganharemos performance na execução do comando SQL.  -->

               

                <sql:update var="gravaCli">

                    insert into CLIENTES (CODIGO,NOME,CPF,RG,TELEFONE,EMAIL,ESTADO) 

                    values(?,?,?,?,?,?,?)

                    <sql:param value="${param['edtCodigo']}"/>

                    <sql:param value="${param['edtNome']}"/>

                    <sql:param value="${param['edtCPF']}"/>

                    <sql:param value="${param['edtRG']}"/>            

                    <sql:param value="${param['edtTelefone']}"/>

                    <sql:param value="${param['edtEmail']}"/> 

                    <sql:param value="${param['cmbEstados']}"/> 

                   

                </sql:update>

            </sql:transaction>

        </c:catch>

       

           

            <!--Essa é uma sacada legal, pois na tag “out” abaixo, caso o objeto “ex” esteja nulo(ou seja, sem exceção), será exibido o valor contido no atributo default, dessa forma a mensagem de sucesso só será exibida caso não tenha ocorrido  nenhuma exceção. -->

        <h1>   

            <c:out value="${ex}" default="Gravação executada com sucesso!"/>

        </h1>

       <hr>

        <input type="button" value="Voltar" name="btnVoltar" onclick="history.back();"

     </body>

</html>

Listagem 03 – Código da gravaCliente.jsp, para gravação na tabela de CLIENTES.

 

Pronto, agora bastar rodar sua aplicação e se tudo estiver certo, você terá uma tela de cadastro na página index.jsp como a Figura 02.

 

jstl-fig02.JPG

Figura  02 – Tela de cadastro gerado por index.jsp.

 

E a tela de resultado gerada pela  página gravaCliente.jsp semelhante a Figura 03.

 

jstl-fig03.JPG

Figura  03 – Tela de resultado gerada pela gravaCliente.jsp.

 

Esse foi mais um exemplo de como a tecnologia JSTL pode ser  útil e produtiva, e para terminar, note que em nosso exemplo, não usamos em nenhum momento código puramente Java,  e sim apenas as tags JSP e JSTL, pois com essas  tecnologias,  o código Java, é renderizado(gerado) automaticamente em tempo de execução, sendo que cada página JSP gera um servlet  “temporário”  ao ser processada mediante cada requisição http recebida pelo container TomCat.

 

Espero sinceramente que você tenha gostado e aproveitado ao máximo esse artigo, desejo também que comece a usar JSTL da maneira como achar conveniente em seus projetos web. Obrigado e até a próxima. 

 

Referências:

http://java.sun.com/products/jsp/jstl/

Site da própria SUN sobre JSTL

 

http://www.devmedia.com.br/articles/viewcomp.asp?comp=3746

Artigo JSTL – Aplicações web simples e fácil em Java, que pode servir de base o entendimento  inicial de JSTL.