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.

Tabelas da aplicação
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 1. 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 2. 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 3. 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.

Tela de cadastro gerado por index.jsp
Figura 2. Tela de cadastro gerado por index.jsp

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

Tela de cadastro gerado por index.jsp
Figura 3. 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.