Escolar Documentos
Profissional Documentos
Cultura Documentos
1. Construindo a aplicao
Iniciando a construo da aplicao, vamos criar um formulrio de cadastro de compromisso, um bean que
representa as regras de negcios, e um arquivo JSP que processa o formulrio. Criaremos tambm um
formulrio idntico ao primeiro mas que mostra possveis erros ocorridos no cadastro. E por ltimo, uma
pgina HTML simples que indica se o cadastro foi realizado ou no.
// Metodo que checa se o campos e nulo e retorna a uma String no formato carreto
public String RetString(String campo,String tipo) {
String resultDados="";
if ((campo == null) || (tipo.trim().equals("D"))) {
if (tipo.trim().equals("D")) {
if (campo == null) {resultDados = "";}
else {resultDados =
campo.substring(8,10)+"/"+campo.substring(5,7)+"/"+campo.substring(0,4);}
}
else if (tipo.trim().equals("N")) {
if (campo == null) {resultDados = "0";}
}
else {resultDados = "";}
}
else {resultDados = campo;}
return resultDados;
}
import java.util.Vector;
import java.sql.ResultSet;
/*
Classes Agenda (Bean)
Autores: Silvio Fernandes M. Vasconcelos
*/
// Variaveis privadas
private String ageId;
private String ageDesc;
private String ageData;
private String ageHora;
private String ageStatus;
// Metodo Construtor
public BeanAgenda() {
LimparVariaveis();
}
Vamos fazer uma pgina que nos indica se a operao foi realizada com sucesso. Sempre que houve
xito, redirecionaremos a aplicao para esta pgina.
3. Servlets
3.1 Servlets
Servlets uma vez iniciados so mantidos na memria. Ento toda requisio que chega, vai para o
Servlet na memria e este gera uma resposta. Esta caracterstica de manter na memria faz com que
usar Java Servlets seja um mtodo extremamente rpido e eficiente para construir aplicaes Web.
O mtodo Class.forName() faz com que a JVM carregue o driver na memria. Voc pode pensar que
tem que instanciar a classe do driver e usar a referncia a ele para acessar o banco de dados, mas
JDBC no funciona desta maneira. Quando o driver carregado na memria da JVM, ele se registra
com a classe java.sql.DriverManager. Ento voc usa mtodos estticos da classe DriverManager para
obter referncia ao objeto Connection, que ento fornecer acesso ao banco de dados.
jdbc:driver-id://host/database
ou
jdbc:driver-id:database-id
Connection connection;
try {
Class.forName("org.gjt.mm.mysql.Driver");
connection = DriverManager.getConnection("jdbc:mysql://servidor/database", user , password );
}
catch (ClassNotFoundException ex) {
System.out.println("N~ ao foi poss vel encontrara classe do Driver do MySQL");
}
catch (SQLException ex) {
System.out.println("N~ ao foi poss vel conectarao servidor");
}
finally {
try { if (connection != null) connection.close(); }
catch (SQLException e) { }
}
Agenda de Compromisso
Antes de poder fazer consultas ao banco de dados com JDBC, voc precisa criar um objeto Statement.
Um objeto Statement pode ser reutilizado atravs de mltiplas requisies SQL. criado pelo objeto
Connection e portanto dependente do driver que voc est usando para conectar ao banco de
dados. muito simples, como voc pode ver:
Fazer uma consulta com JDBC fcil uma vez que voc tenha o objeto Statement: voc simplesmente
passa a consulta como parmetro do mtodo executeQuery(). A tabela de resultados retornada pelo
mtodo como uma instncia da classe ResultSet da API de JDBC. Abaixo est um exemplo de
consulta:
Estes mtodos lanam excees, portanto no seu programa deve estar dentro de um bloco try/catch. O
objeto ResultSet revela o contedo da tabela uma linha por vez e fornece mtodos para acessar dados
de cada coluna da tabela da linha corrente, indicada por um cursor interno. Quando o ResultSet
criado, o cursor de linha no est na primeira linha, mas sim antes dela. Chamando o mtodo next(), o
ResultSet avana o cursor em uma linha, retornando valor verdade se a chamada foi bem sucedida.
Por exemplo, para passar por todas as linhas do ResultSet faramos o seguinte:
while (resultset.next()) {
System.out.println ("Mais uma linha!");
}
Quando o cursor est posicionado em uma linha que voc gostaria de examinar, voc pode chamar
vrios mtodos suportados pelo objeto ResultSet para restaurar dados das colunas e obter
informaes sobre os resultados.
forward(ServletRequest request, ServletResponse response) transfere uma requisio para outro recurso
no mesmo servidor. Este recurso pode ser um servlet, uma pgina JSP ou uma simples pgina HTML.
include(ServletRequest request, ServletResponse response) atua no lado do servidor, inclui a resposta do
recurso dado (Servlet, pgina JSP ou HTML) dentro da resposta de quem chamou o recurso. Para obter
uma referncia a interface RequestDispatcher temos duas for-mas:
ServletContext.getRequestDispatcher(String resource)
ServletRequest.getRequestDispatcher(String resource) Se o servlet subclasse de HttpServletRequest,
simplesmente chama-se o mtodo getRequestDispatcher(String resource) para pegar uma referncia ao
objeto RequestDispatcher.
RequestDispatcher rd;
rd = request.getRequestDispatcher("caminho do recurso");
rd.forward(request, response);
Se nao for subclasse, utilize a outra maneira.
rd = getServletContext().getRequestDispatcher("caminho do recurso");
rd.forward(request, response);
Agenda de Compromisso
package conexao;
import java.sql.*;
public Conexao() {
try {
Class.forName("org.gjt.mm.mysql.Driver");
connection = DriverManager.getConnection("jdbc:mysql://"+"/locadora", "", "");
}
catch (ClassNotFoundException ex) {System.out.println("No foi possvel encontrar a classe "+"do
Driver do MySQL");}
catch (SQLException ex) {System.out.println("No foi possvel conectar ao servidor");}
try {statement = connection.createStatement();}
catch (SQLException ex) {System.out.println("No foi possvel criar a statement");}
}
/**
* Executa um update na base de dados
* @param update String SQL a ser executado
* @throws SQLException se no for possvel executar
O atributo isErrorPage da diretiva page usado para marcar uma pgina JSP que serve como a
pgina de erro para uma ou mais pginas. Como resultado disso, a pgina pode acessar o objeto
implcito exception. J que a maioria das pginas JSP no serve como pginas de erro, o valor padro
para este atributo false.
4. Descritor da aplicao
O arquivo descritor da aplicao chamado de web.xml e reside no diretrio WEB-INF. Este arquivo serve
como um depsito de informaes; os dados que ele armazena sobre ele mesmo so, portanto, considerados
metainformaes, no sentido que so informaes a respeito de informaes. O arquivo web.xml o arquivo
de configurao central da aplicao.
Como sua extenso de arquivo sugere, a linguagem de marcao para os dados no arquivo web.xml XML. O
contedo bsico do descritor e:
<web-app>
</web-app>
Agenda de Compromisso
H uma ordem necessria das configuraes usadas no arquivo web.xml. Trocando a ordem, a
aplicao pode no funcionar. Abaixo est o cdigo:
5. Construindo a aplicao
nome, endereco, telefone, cidade e bairro onde mora e RG. A tabela dobanco de dados tem o nome de
Pessoas e foi criada (como voce deve lembrar) no comeco do curso.
Nas prximas pginas esto os cdigos fonte para realizar tal processo.
<html>
<head>
<style>p, td { font-family:Tahoma,Sans-Serif; font-size:11pt;padding-left:15; }</style>
<title>Cadastro de Pessoa</title>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<form action="ProcessarPessoa.jsp" method=post name="pessoas">
<center>
<table cellpadding=4 cellspacing=2 border=0>
<th bgcolor="#CCDDEE" colspan=2>
<font size=5>Cadastro de Pessoas</font><br>
<font size=1><sup>*</sup> Campos necessários</font>
</th>
<tr bgcolor="#F7F7F7">
<td valign=top>
<b>Nome<sup>*</sup></b><br>
<input type="text" name="nome" value="" size=30 maxlength=50>
</td>
<td valign=top><b>Telefone</b><br>
<input type="text" name="telefone" value="" maxlength=15>
</td>
</tr>
<tr bgcolor="#F7F7F7">
<td valign=top colspan=2>
<b>Email<sup>*</sup></b><br>
<input type="text" name="email" value="" size=30 maxlength=50>
</td>
</tr>
<tr bgcolor="#F7F7F7">
<td valign=top>
<b>Endereo<br>
<TEXTAREA NAME="endereco" ROWS="6" COLS="30"></textarea>
</td>
<td valign=top>
<b>RG<sup>*</sup></b></b><br>
<input type="text" name="RG" value="" maxlength=20>
</td>
</tr>
<tr bgcolor="#F7F7F7">
<td valign=top>
<b>Cidade<sup>*</sup></b></b><br>
<input type="text" name="cidade" value="" maxlength=30>
</td>
<td valign=top>
<b>Bairro<sup>*</sup></b></b><br>
<input type="text" name="bairro" value="" maxlength=40>
</td>
</tr>
<tr bgcolor="#F7F7F7">
<td align=center colspan=2>
<input type="submit" value="Confirma">
<input type="reset" value="Limpar">
</td>
</tr>
</table>
</center>
</form>
</body>
</html>
Agenda de Compromisso
ProcessarPessoa.jsp
RetryPessoa.jsp
BeanPessoa.java
package beans;
import java.util.Hashtable;
/**
* Implementar a classe Serializable e requisito para ser um Enterprise Bean.
* Um objeto de uma classe que implementa esta interface pode ser escrito em disco ou enviado
* Na aplicao do curso no far diferena.
*/
public class BeanPessoa implements java.io.Serializable {
/**
* Nomes dos atributos preferencialmente iguais aos usados no formul ario
*/
private String nome;
private String endereco;
private String cidade;
private String telefone;
private String bairro;
private String RG;
private String email;
/* Este atributo serve para o controle de erros no formul ario */
private Hashtable erros;
public BeanPessoa() {
/* Iniciamos os atributos com o String nulo */
nome = "";
endereco = "";
telefone = "";
cidade = "";
RG = "";
bairro = "";
email = "";
erros = new Hashtable();
}
/**
* M etodos para acessar os atributos.
Agenda de Compromisso
* getNome() para ver ser valor, e setNome() para ajustar seu valor
*/
public String getNome() {return nome;}
public String getEndereco() {return endereco;}
public String getCidade() {return cidade;}
public String getTelefone() {return telefone;}
public String getRG() {return RG;}
public String getBairro() {return bairro;}
public String getEmail() {return email;}
6. Passando Objetos
6.1 Passando objetos para outras partes da aplica cao
Para recuperar ou passar objetos de uma pgina JSP para outra, ou de uma pgina para um servlet (e
vice-versa), uma das maneiras (e a mais comum) usar os metodos get/setAttribute(String chave, String
objeto) disponveis para os objetos implcitos pageContext, request, session e applica-tion.
<html>
<head>
<title>Pgina de Acesso</title>
</head>
<body>
<center>
<form action="VerificarSenha.jsp" method=POST name=login>
<table width=25%>
<tr>
<td colspan=2 align=center bgcolor="#CCDDEE">Pgina de Acesso</td>
</tr>
<tr>
<td bgcolor="#E0E0E0" width=50%>Usurio:</td>
<td bgcolor="#E0E0E0" width=50%><input type=text name=usuario value=""></td>
Agenda de Compromisso
</tr>
<tr>
<td bgcolor="#F3F3F3" width=50%>Senha:</td>
<td bgcolor="#F3F3F3" width=50%><input type=password name=senha></td>
</tr>
<tr>
<td bgcolor="#F0F0F0" align=center width=50%><input type=submit name=enviar
value="Enviar"></td>
<td bgcolor="#F0F0F0" align=center width=50%><input type=reset name=limpar
value="Limpar"></td>
</tr>
</table>
</form>
</center>
</body>
</html>
Pgina de teste (autorizado.jsp. Note a diretiva include no incio do cdigo. Este arquivo (sessao.jsp) que
nos interessa.
A pgina que verifica se a sesso vlida (sessao.jsp) muito simples. Se o objeto implcito session tiver
um atributo chamado de sesso e o valor dele for o String autorizado, este pedao de cdigo da pgina
no faz nada, e ento o cdigo que est a abaixo deste scriptlet ser a mostrado. Caso contrrio,
redireciona para a pgina de erro.
7. Compras
Neste ltimo captulo, vamos construir um carrinho virtual, desses que todo site de loja da internet tem.
package beans;
import java.util.Vector;
import java.util.Enumeration;
public class BeanCarrinho {
Vector v;
String comando = null;
public BeanCarrinho() {v = new Vector();}
private void adicionarItens(String[] array) {
for (int i = 0; i < array.length; i++) v.addElement(array[i]);
}
private void removerItens(String[] array) {
for (int i = 0; i < array.length; i++) v.removeElement(array[i]);
}
public void setComando(String s) { comando = s;}
public String[] getItems() {
String[] s = new String[v.size()];
v.copyInto(s);
return s;
}
public void processar(String[] itens) {
if (itens != null && comando != null) {
if (comando.equals("adicionar")) adicionarItens(itens);
else if (comando.equals("remover")) removerItens(itens);
reset();
}
}
private void reset() {comando = null;}
}
Vamos ver a parte lgica do carrinho agora. Usa-se um bean vlido por toda a sesso. Com o mtodo
processar(..), inclumos ou removemos mdias do BeanCarrinho. Colocando o valor do atributo property da
ao <jsp:setProperty> como *, ele vai, para todos os parmetros presentes na requisio (objeto
request), tentar usar o mtodo setNomeDoParametro() do Bean.
Agenda de Compromisso