desenvolva passo a passo um sistema web utilizando java, hibernate e jsp [ benefrancis do nascimento...
DESCRIPTION
Neste material mostrarei passo a passo o desenvolvimento de uma aplicação web utilizando programação orientada a objeto com Java em conjunto com o framework para mapeamento objeto relacional Hibernate. É indicado para estudantes e profissionais que queiram aprender Java para web, porém que procuram desenvolver softwares mais próximos do que o mercado atualmente exige. Neste material desenvolveremos um sistema para controlar um petshop contendo diversas operações que interagem com banco de dados.TRANSCRIPT
Benefrancis do Nascimento
SISTEMA WEB
1
Neste material mostrarei passo a passo o
desenvolvimento de uma aplicação web
utilizando programação orientada a objeto
com Java em conjunto com o framework
para mapeamento objeto relacional
Hibernate. É indicado para estudantes e
profissionais que queiram aprender Java
para web, porém que procuram
desenvolver softwares mais próximos do
que o mercado atualmente exige. Neste
material desenvolveremos um sistema
para controlar um petshop contendo
diversas operações que interagem com
banco de dados.
SISTEMAWEBDesenvolva passo a passoum sistema web utilizandoJava,HibernateeJSP.
Benefrancis do Nascimento
Benefrancis do Nascimento
SISTEMA WEB
2
NotadoAutor
O material que o leitor tem em mãos, dirigido basicamente, mas não exlusivamente, a alunos
de graduação e pós graduação em cursos de Ciencia da Computação e correlatos, tem como
preocupação fundamental iniciá‐lo no desenvolvimento de aplicações Java, utilizando
Hibernate em ambiente Web.
O objetivo aqui é desenvolver passo a passo um sistema em Java que interage com banco de
dados realcional utilizando o framework de mapeamento objeto relacional Hibernate. Este
sistema, futuramente, será encaminhado a testes de desempenho e segurança para que, em
seguida, possa ser evoluído. Dessa forma, convido você a participar deste projeto que, com
certeza, contribuirá com os seus estudos e futuramente você será capaz de repassar este
conhecimento para outras pessoas.
Não indico a utilização do código fonte deste material para desenvolvimento de sistema
comercial, pois aspectos de segurança nesta obra não foram abordados. Desta forma, não me
responsabilizo por qualquer dano que possa causar a quem quer que seja.
Criticas e sugestões, com objetivo de alimentar o processo de melhoria contínua de minhas
obras, são bem vindas. O contato deverá ser estabelecido pelos meios abaixo.
e‐mail:
twitter:
@Benefrancis
Skype:
Benefrancis.com
Desejo a todos muito sucesso.
Benefrancis do Nascimento
Benefrancis do Nascimento
SISTEMA WEB
3
Aos meus alunos do curso de Pós‐graduação em Desenvolvimento de Sistemas para Web da
Faculdade Anhanguera – Campinas.
Benefrancis do Nascimento
SISTEMA WEB
4
Nota do Autor ............................................................................................................................ 2
Configurando o ambiente ............................................................................................................. 8
Acessando o Mysql .................................................................................................................... 9
Criando o banco de dados do sistema ...................................................................................... 9
Criando uma aplicação Java para web no Netbeans .............................................................. 10
Criando os pacotes da nossa aplicação ................................................................................... 17
Criando as classes da camada de controle .................................................................................. 18
A Classe Pessoa ....................................................................................................................... 19
Métodos da classe pessoa que interagem com o banco de dados ......................................... 21
Mapeando a Classe Pessoa ..................................................................................................... 22
A Classe PF ............................................................................................................................... 27
Mapeando a Classe PF ............................................................................................................. 27
A Classe PJ ............................................................................................................................... 28
Mapeando a Classe PJ ............................................................................................................. 29
A Classe Telefone .................................................................................................................... 30
Métodos da classe Telefone que interagem com o banco de dados ...................................... 30
Mapeando a Classe Telefone .................................................................................................. 31
A classe Endereco .................................................................................................................... 35
Métodos da classe Endereco que interagem com o banco de dados ..................................... 35
Mapeando a classe Endereco .................................................................................................. 36
A classe DocReceita ................................................................................................................. 40
Mapeando a classe DocReceita ............................................................................................... 40
A classe CPF ............................................................................................................................. 43
A classe CNPJ ........................................................................................................................... 44
A classe Animal ........................................................................................................................ 47
Benefrancis do Nascimento
SISTEMA WEB
5
Métodos da classe Animal que interagem com o banco de dados ......................................... 47
Mapeando a classe Animal ...................................................................................................... 48
Informando ao Hibernate quais os atributos da classe animal que serão persistidos ........... 51
A classe Cachorro .................................................................................................................... 53
A classe Gato ........................................................................................................................... 54
A classe abstrata Servico ......................................................................................................... 55
Métodos da classe Servico que interagem com o banco de dados ........................................ 55
Mapeando a Classe Servico ..................................................................................................... 57
Informando ao Hibernate quais os atributos da classe Servico que serão persistidos ........... 58
A classe Banho ......................................................................................................................... 60
A classe Consulta ..................................................................................................................... 61
A classe Tosa ........................................................................................................................... 62
A classe Vacina ........................................................................................................................ 62
Utilizando o Hibernate para criar as tabelas no banco de dados ............................................... 63
Atualizando o arquivo hibernate.cfg.xml ................................................................................ 64
Criando uma conexão com o hibernate .................................................................................. 65
Criando uma classe para testar o funcionamento do Hibernate ............................................ 66
Programando as classes DAO ...................................................................................................... 68
Introdução ............................................................................................................................... 69
Implementado os métodos da classe PessoaDAO .................................................................. 69
Implementado os métodos da classe AnimalDAO .................................................................. 76
Implementado os métodos da classe ServicoDAO .................................................................. 82
Implementado os métodos da classe TelefoneDAO ............................................................... 89
Implementado os métodos da classe EnderecoDAO .............................................................. 95
Testando os métodos das classes do pacote DAO .................................................................... 101
Salvando pessoa, telefone, endereço, animais e serviços. ................................................... 102
Benefrancis do Nascimento
SISTEMA WEB
6
Criando as páginas JSP .............................................................................................................. 106
Mapa do site .......................................................................................................................... 107
Criando diretórios necessários .............................................................................................. 107
Iniciando a programação das páginas JSP ............................................................................. 109
Importando as classes necessárias ........................................................................................ 109
Codificando arquivos do diretório geral ................................................................................... 115
Codificando arquivos do diretório cadastros ............................................................................ 120
Codificando arquivos do diretório serviços ............................................................................... 155
Codificando arquivos do diretório consultas ............................................................................ 173
Considerações finais .................................................................................................................. 265
Benefrancis do Nascimento
SISTEMA WEB
7
Figura 1 ‐ Diagrama de classes do pacote controle
Benefrancis do Nascimento
SISTEMA WEB
8
Configurandooambiente
Benefrancis do Nascimento
SISTEMA WEB
9
AcessandooMysql
Iniciaremos a configuração do nosso ambiente de desenvolvimento, conectando com o Mysql.
Para isso utilizaremos o HeidiSQL1. Conectamos com o usuário root em nossa máquina local.
Figura 2 ‐ Conectando o Heidi SQL
Criandoobancodedadosdosistema
Criaremos agora o nosso database. Para isso, clique com o botão da direita do mouse
no Treeview [email protected]; abrirá um menu suspenso no qual você deverá acessar a
opção Create New / Database. A tela representad na imagem abaixo será aberta.
Preencha os dados conforme a imagem abaixo.
1 Disponível em: http://www.heidisql.com/
Benefrancis do Nascimento
SISTEMA WEB
10
Figura 3 ‐ Criando o banco de dados com o nome estimacao
CriandoumaaplicaçãoJavaparawebnoNetbeans
Criaremos agora uma aplicação java para web no ide Netbeans2. Acesse o menu
Arquivo / Novo projeto. A configuração do projeto segue quatro passos que
descreverei nas imagens a seguir.
2 Disponível em: http://netbeans.org/
Benefrancis do Nascimento
SISTEMA WEB
11
Figura 4 ‐ Criando uma aplicação Java para web no Netbeans [1 º Passo ]
O primeiro passo consiste na escolha do projeto. No nosso caso a categoria do projeto
será java Web e o projeto será Aplicação web.
Benefrancis do Nascimento
SISTEMA WEB
12
Figura 5 ‐ Criando uma aplicação Java para web no Netbeans [2 º Passo ]
No segundo passo demos um nome para o projeto. O nome escolhido foi Estimacao.
Figura 6 ‐ Criando uma aplicação Java para web no Netbeans [3 º Passo ]
Benefrancis do Nascimento
SISTEMA WEB
13
No terceiro passo deveremos escolher o servidor – container para a nossa aplicação.
Escolha o Apache Tomcat. Para a versão do java EE você deverá escolher a 5 ou
superior. O caminho do projeto será sugerido pelo Netbeans. Aceite a sugestão.
Figura 7 ‐ Criando uma aplicação Java para web no Netbeans [4 º Passo ]
O quarto passo será dividido em duas etapas. A primeira é escolher os frameworks que
desejaremos trabalhar em nossa aplicação. Escolha somente o Hibernate 3.x.x. Para
conexão com banco de dados o hibernate trabalha com dialeto, desta maneira ele
saberá tratar as particularidades do banco de dados escolhido. Configuraremos uma
nova conexão com banco de dados. A segunda etapa é apresentada na imagem abaixo:
Benefrancis do Nascimento
SISTEMA WEB
14
Figura 8 ‐ Segunda etapa do 4º passo da configuração do projeto Java para web
A imagem acima mostra como deverá ser configurada a conexão com o banco de dados.
Preencha conforme a imagem, porém você deverá saber qual o usuário e senha do seu banco
de dados Mysql. Após o preenchimento clique em ok para aparecer a tela de finalização da
configuração do projeto (imagem a seguir).
Benefrancis do Nascimento
SISTEMA WEB
15
Figura 9 ‐ Tela de finalização da configuração do projeto
O seu projeto já está configurado para trabalhar com java para web utilizando o
framework Hibernate.
O Netbeans exibirá a estrutura de diretórios conforme imagem a seguir, porém para
visualizar o conteúdo do arquivo hibernate.cfg.xml, você deverá clicar na aba XML do
referido arquivo.
Benefrancis do Nascimento
SISTEMA WEB
16
Figura 10 ‐ o conteúdo do arquivo hibernate.cfg.xml criado pelo ide Netbeans
Figura 11 ‐ Alteramos o arquivo hibernate.cfg.xml
Realizamos a primeira alteração no arquivo hibernate.cfg.xml com o objetivo de que:
1º. Exiba no console os comandos sql;
Benefrancis do Nascimento
SISTEMA WEB
17
2º. Que os comandos sql sejam formatados;
3º. Informando o tamanho do pool de conexões permitidas;
4º. E, por fim, que o hibernate tenha permissão de criar tabelas na nossa base de
dados.
Falta apenas informar neste arquivo quais serão as classes da nossa aplicação que
serão mapeadas para persistirem no banco de dados, mas informaremos após a
criação, codificação e mapeamento das mesmas.
Criandoospacotesdanossaaplicação
A nossa aplicação terá três camadas, porém apenas dois pacotes, pois a camada de
apresentação será composta pelas páginas web que já possuem diretório em nosso projeto.
Veja imagem abaixo.
Figura 12 ‐ Criando Pacotes: controle e modelo – A camada de visão será no diretório
Páginas Web
Cabe informar que apenas o arquivo hibernate.cfg.xml deverá permanecer no pacote padrão.
Benefrancis do Nascimento
SISTEMA WEB
18
Criandoasclassesdacamadadecontrole
Benefrancis do Nascimento
SISTEMA WEB
19
AClassePessoa
Figura 13 ‐ Atributos da Classe abstrata Pessoa.
No momento da criação dos atributos o Netbeans sugere a criação das classes. Por
exemplo, ao digitar public Collection<Telefone> telefone o Netbeans sugere a criação
da classe telefone. Aconselho que criem imediatamente conforme o Netbeans vai
sugerindo, porém depois façam as devidas alterações visto que, por exemplo, ao
digitar public DocReceita docReceita ele sugere a criação de uma classe, mas
conforme nosso diagrama UML, DocReceita é uma interface. Altere.
Benefrancis do Nascimento
SISTEMA WEB
20
Figura 14 ‐ Diretório após a criação das classes do pacote modelo
Neste momento criei as classes DAO – Data Access Object ‐ Classes responsáveis pela
camada de persistência na minha aplicação, mas sem nenhum código neste momento
(apenas para podermos referenciá‐las nos métodos salvar, alterar, excluir e consultar
nas classes do pacote controle). Criaremos também uma classe para testar o
funcionamento do Hibernate (detalharei estas classes mais adiante).
Benefrancis do Nascimento
SISTEMA WEB
21
MétodosdaclassepessoaqueinteragemcomobancodedadosA seguir os métodos autenticar, existe, salvar, consultar, alterar e excluir da classe Pessoa.
Quando estiver incluindo os métodos abaixo na classe Pessoa o Netbeans irá sugerir a criação
dos métodos na classe PessoaDAO. Aceite a sugestão.
public Autenticavel autenticar(String usuario, String senha) {
return PessoaDAO.autenticar(usuario, senha);
}
public boolean existe(String email) {
return PessoaDAO.existe(email);
}
public boolean existe(DocReceita documento) {
return PessoaDAO.existe(documento);
}
static public boolean salvar(Pessoa p) {
return PessoaDAO.salvar(p);
}
static public ArrayList<Pessoa> consultar() {
return PessoaDAO.consultar();
}
static public Pessoa consultar(int idPessoa) {
return PessoaDAO.consultar(idPessoa);
Benefrancis do Nascimento
SISTEMA WEB
22
}
static public Collection<Pessoa> consultar(String nome) {
return PessoaDAO.consultar(nome);
}
static public boolean alterar(Pessoa p) {
return PessoaDAO.alterar(p);
}
static public boolean excluir(Pessoa p) {
return PessoaDAO.excluir(p);
}
MapeandoaClassePessoa
Iniciaremos o mapeamento Objeto Relacional da classe pessoa
InformandoqueaClassePessoadaráorigemaobjetosqueserãopersistidos
Precisamos informar ao Hibernate que a classe pessoa dará origem a objetos que serão
persistidos em banco de dados. Para isso utilizamos a seguinte anotação:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "tipo")
Benefrancis do Nascimento
SISTEMA WEB
23
As anotações acima deverão ser inseridas antes do nome da classe. Veja imagem abaixo:
Figura 15 ‐ Informando ao Hibernate que a Classe Pessoa será persistida e a estratégia de Herança
utilizada
Ao digitar as anotações o Netbeans sugere algumas importações, você deverá escolher as
importações conforme as linhas que vão de 5 a 8 na imagem acima.
InformandoaoHibernatequalseráoiddatabela
O Netbeans ira sugerir a criação do id para hierarquia da classe, para criar o id – que será o id
da tabela no banco de dados; insira o código abaixo antes do atributo idPessoa. Será
necessário alterar de public para private o atributo idPessoa. Não deixe de fazer as
importações sugeridas pelo Netbeans, porém selecione sempre as que começam com
javax.persistence
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int idPessoa;
Benefrancis do Nascimento
SISTEMA WEB
24
InformandoaoHibernatequaisosatributosdaclassepessoaqueserãopersistidosNecessitamos informar ao Hibernate quais atributos serão persistidos no banco de dados. Para
isso deverão incluir as anotações conforme imagem abaixo:
Benefrancis do Nascimento
SISTEMA WEB
25
Benefrancis do Nascimento
SISTEMA WEB
26
Figura 16 ‐ Atributos da classe pessoa que serão persistidos
EncapsulandoatributosdaclassePessoaPara encapsular os campos da classe Pessoa acesse o menú refatorar / encapsular campos. A
tela abaixo será aberta. Selecione todos os campos e clique em refatorar.
Figura 17 ‐ Encapsulando campos da classe Pessoa
CriandométodosconstrutoresparaaclassePessoaPara criar métodos construtores para a classe telefone coloque o cursor em qualquer parte do
código fonte da classe Pessoa, sugiro que seja logo depois dos atributos, de o comando [
control + espaço ]; abrirá o menú suspenso conforme a imagem abaixo. Clique em cima do
método com o nome da classe (o mesmo que selecionei na imagem). Repita a operação agora
selecionando o método sem atributos.
Benefrancis do Nascimento
SISTEMA WEB
27
Figura 18 ‐ Criando método construtor para a classe Pessoa
Verifiquem em nosso diagrama de classes que Pessoa é classe ansestral das classes PF e PJ
(Pessoa Física e Pessoa Jurídica respectivamente). Criaremos abaixo essas classes:
AClassePFIniciaremos a construção da classe que representará as Pessoas Físicas.
Figura 19 ‐ A classe PF
A classe PF herda os métodos e atributos da classe Pessoa, por este motivo o mapeamento
desta classe é mais simples: bastará informar a estratégia de herança. Veja abaixo:
MapeandoaClassePFIniciaremos o mapeamento Objeto Relacional da classe PF.
Informando que a Classe PF dará origem a objetos que serão persistidos
Precisamos informar ao Hibernate que a classe PF dará origem a objetos que serão
Benefrancis do Nascimento
SISTEMA WEB
28
persistidos em banco de dados e que os objetos do tipo PF em nosso banco de dados possui
identificador 1. Este é o valor que identifica que, dentre as classes filhas de Pessoa, o número 1
será usado para PF. Veja a anotação:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorValue("1")
As anotações acima deverão ser inseridas antes do nome da classe. Veja imagem abaixo:
Figura 20 ‐ Informando ao Hibernate que a Classe PF será persistida, a estratégia de Herança e o valor
que a identifica entre as classes que são filhas da classe Pessoa
AClassePJIniciaremos a construção da classe que representará as Pessoas Jurídicas.
Figura 21 ‐ A classe PJ
Benefrancis do Nascimento
SISTEMA WEB
29
A classe PJ, assim como a classe PF, herda os métodos e atributos da classe Pessoa, por este
motivo o mapeamento desta classe é semelhante ao da classe PF. Assim como PF, bastará
informar a estratégia de herança. Veja abaixo:
MapeandoaClassePJIniciaremos o mapeamento Objeto Relacional da classe PJ.
Informando que a Classe PJ dará origem a objetos que serão persistidos
Precisamos informar ao Hibernate que a classe PJ dará origem a objetos que serão persistidos
em banco de dados e que os objetos do tipo PJ em nosso banco de dados possui identificador
"2". Este é o valor que identifica que, dentre as classes filhas de Pessoa, o número "2" será
usado para PJ. Veja a anotação:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorValue("2")
As anotações acima deverão ser inseridas antes do nome da classe. Veja imagem abaixo:
Figura 22 ‐ Informando ao Hibernate que a Classe PJ será persistida, a estratégia de Herança
e o valor que a identifica entre as classes que são filhas da classe Pessoa
Benefrancis do Nascimento
SISTEMA WEB
30
AClasseTelefone
Figura 23 ‐ Atributos da Classe Telefone
MétodosdaclasseTelefonequeinteragemcomobancodedados
Incluiremos os métodos salvar, consultar, alterar e excluir na classe Telefone. Esses métodos
serão a ligação entre a classe Telefone e a classe telefoneDAO. Abaixo mostramos os métodos
da classe Telefone. Obs: Quando estiver inserindo os métodos abaixo, o Netbeans irá sugerir a
criação dos métodos na Classe TelefoneDAO. Aceite a sugestão.
public static boolean salvar(Telefone t) {
return TelefoneDAO.salvar(t);
}
public static boolean salvar(Pessoa p) {
return TelefoneDAO.salvar(p);
}
public static Telefone consultar(int idTelefone) {
return TelefoneDAO.consultar(idTelefone);
Benefrancis do Nascimento
SISTEMA WEB
31
}
public static Collection<Telefone> consultar(Pessoa p) {
return TelefoneDAO.consultar(p);
}
public static boolean alterar(Telefone t) {
return TelefoneDAO.alterar(t);
}
public static boolean excluir(Telefone t) {
return TelefoneDAO.excluir(t);
}
public static boolean excluir(Pessoa p) {
return TelefoneDAO.excluir(p);
}
MapeandoaClasseTelefone
Iniciaremos o mapeamento objeto relacional da classe Telefone.
InformandoqueaclasseTelefonedaráorigemaobjetosqueserãopersistidos
Para informar que a classe telefone dará origem a objetos que serão persistidos em banco de
dados, basta apenas incluir a anotação @Entity antes do nome da classe.
Benefrancis do Nascimento
SISTEMA WEB
32
InformandoaoHibernatequalseráoIddatabelatelefone
Para criar o id – que será o id da tabela no banco de dados; insira o código abaixo antes do
atributo idTelefone. Não deixe de fazer as importações sugeridas pelo Netbeans, porém
selecione sempre as que começam com javax.persistence.
Figura 24 ‐ Informando ao Hibernate qual será o Id da tabela telefone
InformandoaoHibernatequaisosatributosdaclasseTelefonequeserãopersistidos
Benefrancis do Nascimento
SISTEMA WEB
33
Figura 25 ‐ Atributos da classe Telefone que serão persistidos
EncapsuleosatributosdaclasseTelefone
Para encapsular os campos da classe telefone acesse o menú refatorar / encapsular campos. A
tela abaixo será aberta. Selecione todos os campos e clique em refatorar.
Benefrancis do Nascimento
SISTEMA WEB
34
Figura 26 ‐ Encapsulando os atributos da classe Telefone
CriemétodosconstrutoresparaaclasseTelefonePara criar os métodos construtores da classe telefone coloque o cursor em qualquer parte do
código fonte da classe telefone, sugiro que seja logo depois dos atributos, de o comando [
control + espaço ]; abrirá o menú suspenso conforme a imagem abaixo. Clique em cima do
método com o nome da classe (o mesmo que selecionei na imagem). Repita a operação agora
selecionando o método sem atributos.
Figura 27 ‐ Criando método construtor para a classe Telefone
Benefrancis do Nascimento
SISTEMA WEB
35
AclasseEndereco
Figura 28 ‐ Atributos da classe Endereco
MétodosdaclasseEnderecoqueinteragemcomobancodedados
Incluiremos os métodos salvar, consultar, alterar e excluir na classe Endereco. Esses métodos
serão a ligação entre a classe Endereco e a classe EnderecoDAO. Abaixo mostramos os
métodos da classe Endereco. Obs: Quando estiver inserindo os métodos abaixo, o Netbeans irá
sugerir a criação dos métodos na Classe EnderecoDAO. Aceite a sugestão.
public static boolean salvar(Endereco e) {
return EnderecoDAO.salvar(e);
}
Benefrancis do Nascimento
SISTEMA WEB
36
public static boolean salvar(Pessoa p) {
return EnderecoDAO.salvar(p);
}
public static Endereco consultar(int idEndereco) {
return EnderecoDAO.consultar(idEndereco);
}
public static ArrayList<Endereco> consultar(Pessoa p) {
return EnderecoDAO.consultar(p);
}
public static boolean alterar(Endereco e) {
return EnderecoDAO.alterar(e);
}
public static boolean excluir(Endereco e) {
return EnderecoDAO.excluir(e);
}
public static boolean excluir(Pessoa p) {
return EnderecoDAO.excluir(p);
}
MapeandoaclasseEndereco
Iniciaremos o mapeamento objeto relacional da classe Endereco.
Benefrancis do Nascimento
SISTEMA WEB
37
InformandoqueaclasseEnderecodaráorigemaobjetosqueserãopersistidos
Para informar que a classe Endereco dará origem a objetos que serão persistidos em banco de
dados, basta apenas incluir a anotação @Entity antes do nome da classe.
InformandoaoHibernatequalseráoIddatabelaendereco
Para criar o id – que será o id da tabela no banco de dados; insira o código abaixo antes do
atributo idEndereco. Não deixe de fazer as importações sugeridas pelo Netbeans, porém
selecione sempre as que começam com javax.persistence.
Figura 29 ‐ Informando ao Hibernate qual será o Id da tabela endereço
InformandoaoHibernatequaisosatributosdaclasseEnderecoqueserãopersistidos
Benefrancis do Nascimento
SISTEMA WEB
38
Figura 30 ‐ Os atributos da classe Endereco que serão persistidos
Benefrancis do Nascimento
SISTEMA WEB
39
EncapsuleosatributosdaclasseEndereco
Para encapsular os campos da classe endereco acesse o menú refatorar / encapsular campos.
A tela abaixo será aberta. Selecione todos os campos e clique em refatorar.
Figura 31 ‐ Encapsulando campos da classe endereço
CriemétodosconstrutoresparaaclasseEnderecoPara criar métodos construtores para a classe endereço, coloque o cursor em qualquer parte
do código fonte da classe Endereco, sugiro que seja logo depois dos atributos, de o comando [
control + espaço ]; abrirá o menú suspenso conforme a imagem abaixo. Clique em cima do
método com o nome da classe (o mesmo que selecionei na imagem). Repita a operação agora
selecionando o método sem atributos.
Benefrancis do Nascimento
SISTEMA WEB
40
Figura 32 ‐ Métodos construtores para a classe Endereco
AclasseDocReceita
Codificaremos agora a classe DocReceita.
Figura 33 ‐ A interface DocReceita
MapeandoaclasseDocReceita
Iniciaremos o mapeamento objeto relacional da classe DocReceita.
Benefrancis do Nascimento
SISTEMA WEB
41
InformandoqueaclasseDocReceitadaráorigemaobjetosqueserãopersistidos
Para informar que a classe DocReceita dará origem a objetos que serão persistidos em banco
de dados, basta apenas incluir a anotação @Entity antes do nome da classe, porém docReceita
será a classe mãe de CPF e CNPJ, desta forma será necessário informar qual a estratégia de
herança que utilizaremos.
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "tipo")
InformandoaoHibernatequaisosatributosdaclasseDocReceitaqueserãopersistidos
Benefrancis do Nascimento
SISTEMA WEB
42
Figure 1 ‐ Atributos da classe DocReceita que serão persistidos
Benefrancis do Nascimento
SISTEMA WEB
43
AclasseCPF
Codificaremos agora a classe CPF. Esta classe implementa a Interface DocReceita. Portanto
deverá possuir o método validar e getNumero.
Figura 34 ‐ A classe CPF
OmétodoquevalidaráoCPF
Abaixo apresento o método utilizado para calcular o dígito de um CPF. Na imagem acima ele
está oculto, para melhor visualização.
Benefrancis do Nascimento
SISTEMA WEB
44
Figura 35 ‐ Método utilizado para calcular o dígito de um CPF. Deve estar dentro da classe CPF
AclasseCNPJ
A classe CNPJ, assim como a classe CPF implementa a interface DocReceita, portanto também
deverá possuir os métodos validar e getnumero.
Benefrancis do Nascimento
SISTEMA WEB
45
Figura 36 ‐ A classe CNPJ
OmétodoquevalidaráoCNPJ
Abaixo apresento o método utilizado para calcular o dígito de um CNPJ. Na imagem acima ele
está oculto, para melhor visualização.
Benefrancis do Nascimento
SISTEMA WEB
46
Figura 37 ‐ Método utilizado para calcular o dígito de um CNPJ. Deve estar dentro da classe
CNPJ.
Benefrancis do Nascimento
SISTEMA WEB
47
AclasseAnimal
Iniciaremos a codificação da classe abstrata Animal.
Figura 38 ‐ A classe Abstrata Animal
MétodosdaclasseAnimalqueinteragemcomobancodedados
Incluiremos os métodos salvar, consultar, alterar e excluir na classe Animal. Esses métodos
serão a ligação entre a classe Animal e a classe animalDAO. Abaixo mostramos os métodos da
classe Animal. Obs: Quando estiver inserindo os métodos abaixo, o Netbeans irá sugerir a
criação dos métodos na Classe AnimalDAO. Aceite a sugestão.
public static boolean salvar(Animal a) {
return AnimalDAO.salvar(a);
}
public static boolean salvar(Pessoa p) {
Benefrancis do Nascimento
SISTEMA WEB
48
return AnimalDAO.salvar(p);
}
public static Animal consultar(int idAnimal) {
return AnimalDAO.consultar(idAnimal);
}
public static Collection<Animal> consultar() {
return AnimalDAO.consultar();
}
public static Collection<Animal> consultar(Pessoa p) {
return AnimalDAO.consultar(p);
}
public static boolean alterar(Animal a) {
return AnimalDAO.alterar(a);
}
public static boolean excluir(Animal a) {
return AnimalDAO.excluir(a);
}
public static boolean excluir(Pessoa p) {
return AnimalDAO.excluir(p);
}
MapeandoaclasseAnimal
Iniciaremos o mapeamento objeto relacional da classe Animal.
Benefrancis do Nascimento
SISTEMA WEB
49
InformandoqueaclasseAnimaldaráorigemaobjetosqueserãopersistidos
Precisamos informar ao Hibernate que a classe Animal dará origem a objetos que serão
persistidos em banco de dados e qual será a estratégia para hierarquia. Para isso utilizamos as
seguintes anotações:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "tipo")
As anotações acima deverão ser inseridas antes do nome da classe. Veja imagem abaixo:
Figura 39 ‐ informar ao Hibernate que a classe Animal dará origem a objetos que serão persistidos em
banco de dados e qual será a estratégia para hierarquia
Benefrancis do Nascimento
SISTEMA WEB
50
InformandoaoHibernatequalseráoIddatabelaanimal
O Netbeans ira sugerir a criação do id para hierarquia da classe, para criar o id – que será o id
da tabela no banco de dados; insira o código abaixo antes do atributo idAnimal. Não deixe de
fazer as importações sugeridas pelo Netbeans, porém selecione sempre as que começam com
javax.persistence
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int idAnimal;
Figura 40 ‐ A criação do id para hierarquia da classe
Benefrancis do Nascimento
SISTEMA WEB
51
InformandoaoHibernatequaisosatributosdaclasseanimalqueserãopersistidos
Figura 41 ‐ Os atributos da classe animal que serão persistidos
Benefrancis do Nascimento
SISTEMA WEB
52
EncapsuleosatributosdaclasseAnimal
Para encapsular os campos da classe animal acesse o menú refatorar / encapsular campos. A
tela abaixo será aberta. Selecione todos os campos e clique em refatorar.
Figura 42 ‐ Encapsulando campos da classe Animal
CriemétodosconstrutoresparaaclasseAnimalPara criar métodos construtores para a classe Animal, coloque o cursor em qualquer parte do
código fonte da classe Animal, sugiro que seja logo depois dos atributos, de o comando [
control + espaço ]; abrirá o menú suspenso conforme a imagem abaixo. Clique em cima do
método com o nome da classe (o mesmo que selecionei na imagem). Repita a operação agora
selecionando o método sem atributos.
Figura 43 ‐ Métodos construtores para a classe Animal
Benefrancis do Nascimento
SISTEMA WEB
53
AclasseCachorro
Exibimos abaixo a classe Cachorro já com as devidas anotações e o método construtor.
Figura 44 ‐ A classe Cachorro já com as devidas anotações e o método construtor.
Benefrancis do Nascimento
SISTEMA WEB
54
AclasseGato
Exibimos abaixo a classe Gato já com as devidas anotações e o método construtor.
Figura 45 ‐ A classe Gato já com as devidas anotações e o método construtor
Benefrancis do Nascimento
SISTEMA WEB
55
AclasseabstrataServico
Iniciaremos a codificação da classe abstrata Servico.
Figura 46 ‐ A classe abstrata serviço
MétodosdaclasseServicoqueinteragemcomobancodedados
A seguir os métodos salvar, consultar, alterar e excluir da classe Servico. Quando estiver
incluindo os métodos abaixo na classe Servico o Netbeans irá sugerir a criação dos métodos na
classe ServicoDAO. Aceite a sugestão.
Benefrancis do Nascimento
SISTEMA WEB
56
public static boolean salvar(Servico s) {
return ServicoDAO.salvar(s);
}
public static boolean salvar(Animal a) {
return ServicoDAO.salvar(a);
}
public static Servico consultar(int idServico) {
return ServicoDAO.consultar(idServico);
}
public static Collection<Servico> consultar(Animal a) {
return ServicoDAO.consultar(a);
}
public static Collection<Servico> consultar() {
return ServicoDAO.consultar();
}
public static boolean alterar(Servico s) {
return ServicoDAO.alterar(s);
}
public static boolean excluir(Servico s) {
return ServicoDAO.excluir(s);
}
public static boolean excluir(Animal a) {
return ServicoDAO.excluir(a);
}
Benefrancis do Nascimento
SISTEMA WEB
57
MapeandoaClasseServico
Iniciaremos o mapeamento objeto relacional da classe abstrata Servico.
InformandoqueaclasseServicodaráorigemaobjetosqueserãopersistidos
Precisamos informar ao Hibernate que a classe Servico dará origem a objetos que serão
persistidos em banco de dados. Para isso utilizamos a seguinte anotação:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "tipo")
As anotações acima deverão ser inseridas antes do nome da classe. Veja imagem abaixo:
Figura 47 ‐ A classe Servico dará origem a objetos que serão persistidos em banco de dados
Benefrancis do Nascimento
SISTEMA WEB
58
InformandoaoHibernatequaisosatributosdaclasseServicoqueserãopersistidos
As constantes não serão mapeadas.
Figura 48 ‐ Informando ao Hibernate quais os atributos da classe Servico que serão persistidos
Benefrancis do Nascimento
SISTEMA WEB
59
EncapsuleosatributosdaclasseServico
Para encapsular os campos da classe Servico acesse o menú refatorar / encapsular campos. A
tela abaixo será aberta. Selecione todos os campos e clique em refatorar.
Figura 49 ‐ Encapsulando campos da classe Servico
CriemétodosconstrutoresparaaclasseServicoPara criar métodos construtores para a classe Servico, coloque o cursor em qualquer parte do
código fonte da classe Servico, sugiro que seja logo depois dos atributos, de o comando [
control + espaço ]; abrirá o menú suspenso conforme a imagem abaixo. Clique em cima do
método com o nome da classe (o mesmo que selecionei na imagem). Repita a operação agora
selecionando o método sem atributos.
Benefrancis do Nascimento
SISTEMA WEB
60
Figura 50 ‐ Métodos construtores para a classe Servico
AclasseBanhoAbaixo o código e anotações da classe Banho
Figure 2 ‐ A classe Banho
Benefrancis do Nascimento
SISTEMA WEB
61
AclasseConsultaAbaixo o código e anotações da classe Consulta
Figure 3 ‐ A classe consulta
Benefrancis do Nascimento
SISTEMA WEB
62
AclasseTosaAbaixo o código e anotações da classe Tosa
AclasseVacinaAbaixo o código e anotações da classe Vacina
Benefrancis do Nascimento
SISTEMA WEB
63
UtilizandooHibernateparacriarastabelasnobancodedados
Benefrancis do Nascimento
SISTEMA WEB
64
Atualizandooarquivohibernate.cfg.xml
Neste momento atualizaremos o arquivo hibernate.cfg.xml. Deveremos incluir informação
sobre as classes que foram mapeadas em nossa aplicação Java.
Abra o arquivo e inclua entre as tags <session‐factory> </session‐factory> o código abaixo:
<mapping class="br.com.benefrancis.controle.Pessoa" />
<mapping class="br.com.benefrancis.controle.PF" />
<mapping class="br.com.benefrancis.controle.PJ" />
<mapping class="br.com.benefrancis.controle.DocReceita" />
<mapping class="br.com.benefrancis.controle.CPF" />
<mapping class="br.com.benefrancis.controle.CNPJ" />
<mapping class="br.com.benefrancis.controle.Telefone" />
<mapping class="br.com.benefrancis.controle.Endereco" />
<mapping class="br.com.benefrancis.controle.Animal" />
<mapping class="br.com.benefrancis.controle.Cachorro" />
<mapping class="br.com.benefrancis.controle.Gato" />
<mapping class="br.com.benefrancis.controle.Servico" />
<mapping class="br.com.benefrancis.controle.Banho" />
<mapping class="br.com.benefrancis.controle.Consulta" />
<mapping class="br.com.benefrancis.controle.Tosa" />
<mapping class="br.com.benefrancis.controle.Vacina" />
Benefrancis do Nascimento
SISTEMA WEB
65
Criandoumaconexãocomohibernate
Para obter conexões com o Hibernate criamos a classe ConexaoHibernate no pacote modelo.
O código poderá ser visualizado na imagem abaixo:
Figura 51 ‐ A classe ConexaoHibernate
A classe ConexaoHibernate possui um bloco estático no qual por meio da variável
sessionFactory capturamos as configurações inseridas no arquivo hibernate.cfg.xml. Criamos
também um método estático getInstance() que retornará uma sessão.
Benefrancis do Nascimento
SISTEMA WEB
66
CriandoumaclasseparatestarofuncionamentodoHibernate
Criaremos a classe TestandoHibernate no pacote modelo. Esta classe será utilizada para testar
o funcionamento do nosso sistema. A principio criaremos um método estático para gerar as
tabelas no banco de dados. E um método main, pois neste momento poderemos executar o
sistema para testar o funcionamento.
Figura 52 ‐ Testando o funcionamento do Hibernate
Podemos agora executrar este arquivo por meio do atalho [ shift + F6 ] . O console irá imprimir
diversas informações e entre elas os comandos do SQL para criação das tabelas no banco de
dados. Abaixo, segue o que foi imprimido:
Benefrancis do Nascimento
SISTEMA WEB
67
Figura 53 ‐ Saída do console da aplicação quando executamos o método gerarTabelas da classe
TestandoHibernate
Agora voltaremos para o HeidiSQL para verificar as tabelas criadas pela nossa aplicação:
Figura 54 ‐ Verificando no HeidiSql as tabelas geradas
Benefrancis do Nascimento
SISTEMA WEB
68
ProgramandoasclassesDAO
Benefrancis do Nascimento
SISTEMA WEB
69
Introdução
Programaremos os métodos das classes de acesso e manipulação dos dados de nossa
aplicação.
Quando estávamos criando os métodos salvar, consultar, alterar e excluir das classes do
pacote controle, o Netbeans nos sugeria criar os métodos nas classes DAO do pacote modelo.
Caso tenha aceitado conforme orientei os métodos foram criados nas respectivas classes DAO.
Porém o conteúdo dos métodos lança uma exceção dizendo que o método não foi
implementado. Veja a exceção abaixo:
Figura 55 ‐ Exceção de método que não foi implementado
Deveremos inserir o conteúdo dos métodos das classes DAO. E esta será a nossa atividade
neste capitulo. Os códigos das classes DAO serão muito semelhantes aos métodos das outras
classes de acesso e manipulação de dados. Vejam.
ImplementadoosmétodosdaclassePessoaDAO
Para persistir e manipular os dados em nossa aplicação com segurança trabalharemos com o
conceito de transação. O hibernate possui o objeto Transaction para esse fim. Desta forma,
em caso de erro durante o processamento a aplicação fará o rollback, mantendo assim nosso
banco de dados integro.
Toda comunicação nesses métodos dependerão de uma sessão com o hibernate, por esse
motivo utilizaremos a variável session do tipo org.hibernate.Session.
Benefrancis do Nascimento
SISTEMA WEB
70
SalvarNeste método salvaremos uma pessoa no banco de dados. O método espera como parâmetro
um objeto do tipo Pessoa. Poderemos enviar pessoas físicas e pessoas jurídicas, pois este é um
clássico método polifórmico.
Figura 56 ‐ Método salvar da classe PessoaDAO
Para salvar uma pessoa no banco de dados utilizamos polimorfismo por meio de método
polifórmico. Repare que no método salvar o parâmetro esperado é do tipo Pessoa, entretanto
se enviarmos uma PF ou PJ as informações serão salvas corretamente nas tabelas do banco de
dados. Outra técnica importante da orientação a objeto empregada nesta classe é a
sobrecarga de métodos presente no método consultar (veja a assinatura dos métodos).
Benefrancis do Nascimento
SISTEMA WEB
71
ConsultarpessoapeloidNeste método consultaremos uma pessoa pelo id. Este método espera um inteiro como
parâmetro. Retornará um objeto do tipo Pessoa.
Figura 57 ‐ Consultando Pessoa pelo id
Benefrancis do Nascimento
SISTEMA WEB
72
ConsultarTodasaspessoas
Usaremos a sobrecarga de métodos para criar mais uma opção de consulta. Agora
consultaremos todas as pessoas cadastradas.
Figura 58 ‐ Consultando todas as pessoas cadastradas
Benefrancis do Nascimento
SISTEMA WEB
73
Consultarpessoapelonome
Consultaremos pessoa pelo nome. Este método espera como parâmetro uma String e
retornará uma coleção de objetos do tipo pessoa.
Figura 59‐ Consultando pessoas pelo nome
Benefrancis do Nascimento
SISTEMA WEB
74
Alterandopessoas
Agora abordaremos o método alterar. Este método recebe um objeto do tipo pessoa como
parâmetro e retorna verdadeiro; se a atualização for concretizada, ou falso caso aconteça
alguma exceção.
Figura 60 ‐ Alterando pessoa
Benefrancis do Nascimento
SISTEMA WEB
75
Excluindopessoas
Codificaremos o método excluir. Este método recebe como parâmetro um objeto do tipo
pessoa e retornará verdadeiro; se a transação concluir com sucesso, ou falso caso aconteça
alguma exceção.
Figura 61 ‐ Excluindo pessoas
Benefrancis do Nascimento
SISTEMA WEB
76
ImplementadoosmétodosdaclasseAnimalDAO
Salvar
Neste método salvaremos um animal no banco de dados. O método espera como parâmetro
um objeto do tipo Animal. Poderemos enviar cachorros ou gatos, pois este é um clássico
método polifórmico.
Figura 62 ‐ Salvando animais
Benefrancis do Nascimento
SISTEMA WEB
77
Salvandotodososanimaisdeumapessoa
Criamos um método para salvar todos os animais de uma pessoa.
Figura 63 ‐ Salvando todos os animais de uma pessoa
Benefrancis do Nascimento
SISTEMA WEB
78
ConsultandoanimaispeloId
Codificaremos o método que consulta animal pelo id
Figura 64 ‐ Consultando animais pelo Id
Benefrancis do Nascimento
SISTEMA WEB
79
Alterandoanimais
Codificaremos o método alterar da classe animalDAO.
Figura 65 ‐ Alterando animal
Benefrancis do Nascimento
SISTEMA WEB
80
Excluindoanimal
Abaixo o código do método excluir da classe AnimalDAO.
Figura 66 ‐ Excluindo animal
Benefrancis do Nascimento
SISTEMA WEB
81
Excluindotodososanimaisdeumapessoa
Codificaremos um método para exclusão de todos os animais de uma pessoa.
Figura 67 ‐ Excluindo todos os animais de uma pessoa
Benefrancis do Nascimento
SISTEMA WEB
82
ImplementadoosmétodosdaclasseServicoDAO
Iniciaremos agora a codificação dos métodos da classe ServicoDAO.
Salvar
Abaixo o método salvar da classe ServicoDAO.
Figura 68 ‐ Salvando serviços
Benefrancis do Nascimento
SISTEMA WEB
83
Consultandoserviçopeloid
Abaixo o código para consulta de serviço pelo id.
Figura 69 ‐ Consultando serviço pelo id
Benefrancis do Nascimento
SISTEMA WEB
84
Salvandotodososserviçosdeumanimal
Codificaremos um método para salvar todos os serviços de um animal.
Figura 70 ‐ Salvando todos os serviços de um animal
Benefrancis do Nascimento
SISTEMA WEB
85
Consultandotodososserviçosdeumanimal
Codificaremos o método que deverá retornar todos serviços realizados em um animal.
Figura 71 ‐ Consultando todos serviços realizados em um animal
Benefrancis do Nascimento
SISTEMA WEB
86
Excluindotodososserviçosdeumanimal
Codificaremos um método para que seja possível excluir todos os serviços de um animal.
Figura 72 ‐ Excluindo todos os serviços de um animal
Benefrancis do Nascimento
SISTEMA WEB
87
Alterandoserviço
Desenvolvendo método para alterar um serviço.
Figura 73 ‐ Alterando serviço
Benefrancis do Nascimento
SISTEMA WEB
88
Excluindoserviço
Abaixo o código para exclusão de serviço
Figura 74 ‐ Excluindo serviço
Benefrancis do Nascimento
SISTEMA WEB
89
ImplementadoosmétodosdaclasseTelefoneDAO
Iniciaremos agora a codificação dos métodos da classe TelefoneDAO.
salvar
Figura 75 ‐ Salvando um telefone
Benefrancis do Nascimento
SISTEMA WEB
90
ConsultandotelefonepeloId
Figura 76 ‐ Consultando telefone pelo id
Benefrancis do Nascimento
SISTEMA WEB
91
Consultandotodosostelefonesdeumapessoa
O método abaixo prove a consulta de todos os telefones de uma pessoa.
Figura 77 ‐ Consultando todos os telefones de uma pessoa
Benefrancis do Nascimento
SISTEMA WEB
92
Salvandotodosostelefonesdeumapessoa
O método abaixo salva todos os telefones de uma pessoa
Figura 78 ‐ Salvando todos os telefones de uma pessoa
Benefrancis do Nascimento
SISTEMA WEB
93
Excluindotelefone
O método abaixo exclui um telefone da base de dados
Figura 79 ‐ Excluindo telefone
Benefrancis do Nascimento
SISTEMA WEB
94
Excluindotodosostelefonesdeumapessoa
O código abaixo exclui todos os telefones de uma pessoa
Figura 80 ‐ Excluindo todos os telefones de uma pessoa
Benefrancis do Nascimento
SISTEMA WEB
95
ImplementadoosmétodosdaclasseEnderecoDAO
Iniciaremos agora a codificação dos métodos da classe EnderecoDAO.
Salvar
O método abaixo salva um endereço no banco de dados
Figura 81 ‐ Salvando todos os endereços de uma pessoa
Benefrancis do Nascimento
SISTEMA WEB
96
ConsultandoendereçopeloId
O método abaixo consulta endereço pelo Id.
Figura 82‐ Consultando endereço pelo id
Benefrancis do Nascimento
SISTEMA WEB
97
Consultandotodososendereçosdeumapessoa
O método abaixo consulta todos os endereços de uma pessoa.
Figura 83 ‐ Consultando todos os endereços de uma pessoa
Benefrancis do Nascimento
SISTEMA WEB
98
Alterandoumendereço
Abaixo codificaremos um método para alterar endereço
Figura 84 ‐ Alterando um endereço
Benefrancis do Nascimento
SISTEMA WEB
99
Excluindoumendereço
O método abaixo exclui um endereço
Figura 85 ‐ Excluindo endereço
Benefrancis do Nascimento
SISTEMA WEB
100
Excluindotodososendereçosdeumapessoa
O método abaixo exclui todos os endereços de uma pessoa.
Figura 86 ‐ Excluindo todos os endereços de uma pessoa
Benefrancis do Nascimento
SISTEMA WEB
101
TestandoosmétodosdasclassesdopacoteDAO
Benefrancis do Nascimento
SISTEMA WEB
102
Salvandopessoa,telefone,endereço,animaiseserviços.
Testaremos agora os métodos das classes do pacote DAO. Para isso incluiremos um método a
classe TestandoHibernate.
Neste método invocamos apenas o método salvar da classe Pessoa, porém todos os outros
objetos a ela relacionados foram criados.
Veja código abaixo:
private static void persistindo() throws Exception {
PF pf = new PF();
pf.setNome("Benefrancis do Nascimento");
pf.setEmail("[email protected]");
pf.setSenha("root");
DocReceita cpf = new CPF("24878891874");
pf.setDocReceita(cpf);
cpf.setPessoa(pf);
Endereco end = new Endereco();
end.setBairro("Jd Leni");
end.setCep("05818250");
end.setCidade("São Paulo");
end.setLogradouro("Rua faustino Allende");
end.setNumero("39");
end.setUf("SP");
end.setPessoa(pf);
Benefrancis do Nascimento
SISTEMA WEB
103
Collection<Endereco> e = new ArrayList<Endereco>();
e.add(end);
pf.setEndereco(e);
Telefone t = new Telefone();
t.setDdd(11);
t.setNumero("8281‐6536");
t.setPessoa(pf);
Collection<Telefone> tel = new ArrayList<Telefone>();
tel.add(t);
pf.setTelefone(tel);
Animal a = new Cachorro();
Date d = new Date(2000, 5, 15);
a.setDataNascimento(d);
a.setNome("Pluto");
a.setRaca("Vira lata");
a.setSexo('M');
a.setObservacao("Cachorro muito sem vergonha!");
a.setPessoa(pf);
Servico s = new Banho();
Date diaBanho = new Date(2010, 11, 18);
s.setData(diaBanho);
Benefrancis do Nascimento
SISTEMA WEB
104
s.setDescricao("Banho completo");
s.setValor(20.95);
s.setAnimal(a);
Collection<Servico> serv = new ArrayList<Servico>();
serv.add(s);
a.setServico(serv);
Collection<Animal> ani = new ArrayList<Animal>();
ani.add(a);
pf.setAnimal(ani);
pf.salvar(pf);
}
Verificaremos agora no HeidiSql se todos os campos das tabelas foram preenchidos
corretamente.
Para isso executaremos o seguinte comando:
select Pessoa.*, Endereco.*, Animal.*, Servico.* from Pessoa left join Telefone on (Pessoa.idPessoa = Telefone.idPessoa) left join Endereco on (Pessoa.idPessoa = Endereco.idPessoa) left join Animal on (Pessoa.idPessoa = Animal.idPessoa) left join Servico on (Animal.idAnimal = Servico.idAnimal);
Benefrancis do Nascimento
SISTEMA WEB
105
Figura 87 ‐ Resultado da consulta dos dados gravados no banco de dados
Benefrancis do Nascimento
SISTEMA WEB
106
CriandoaspáginasJSP
Benefrancis do Nascimento
SISTEMA WEB
107
Mapadosite
O nosso sistema web deverá seguir a estrutura representada no mapa do site abaixo:
Index.jsp
Inicio.jsp
Pessoa.jsp Registrar.jsp Animal.jsp
Animal.jsp
Detalhe_animal.jsp
Editar_animal.jsp
Excluir_animal.jsp
Pessoa.jsp
Detalhe_pessoa.jsp
Editar_pessoa.jsp
Excluir_pessoa.jsp
Servico.jsp
Detalhe_servico.jsp
Editar_servico.jsp
Excluir_servico.jsp
cadastros serviços consultas
Figura 88‐ Mapa do site
Criandodiretóriosnecessários
Agora trabalharemos com a camada de apresentação e, desta forma será necessário criar
diretórios para armazenar imagens, css, javascript e etc. Para criar um diretório no seu projeto
web.
Clique com o botão direito do mouse em cima da pasta Páginas web um menú suspenso
aparecerá; nele selecione: Novo / Diretório. A janela abaixo será exibida.
Benefrancis do Nascimento
SISTEMA WEB
108
Figura 89 ‐ Criando um novo diretório acessível para a internet no seu projeto web
Crie os diretórios conforme tabela abaixo:
Tabela 1 – Os diretórios do nosso sistema web. Neles estão as imagem, css, javascript e etc. (Solicite
para o professor pelo e‐mail: [email protected])
NOME Motivo
images Será o local onde guardaremos as imagens do
nosso sistema web.
css Onde serão inseridos os arquivos de estilo.
javascript Onde estarão os arquivos Java script
geral Onde estará o conteúdo html que aparecerá
em todas as telas:
head.jsp – onde faremos os importes
necessários.
topo.jsp – topo do site e o menú
rodapé.jsp – rodapé do site
inicio.jsp – tela de boas vindas do
sistema (após autenticação)
Benefrancis do Nascimento
SISTEMA WEB
109
IniciandoaprogramaçãodaspáginasJSP
ImportandoasclassesnecessáriasPara se trabalhar com classes Java em páginas JSP, necessitaremos fazer o importe das classes
que precisaremos utilizar. Portanto em nossa aplicação necessitaremos fazer o importe das
classes do pacote controle. Para evitar esquecimento de alguma classe poderemos fazer o
importe de todas as classes deste pacote. Veja como fazer na segunda linha do código na
imagem abaixo:
Figura 90 ‐ Importando todas as classes do pacote controle
Portanto inclua a tag <%@page import="br.com.benefrancis.controle.*"%> em todas as
páginas de nosso sistema web.
Index.jspO arquivo index.jsp deverá está na raiz da nossa aplicação web (diretório Páginas web).
Na pagina index, ou seja, a primeira página que será aberta em nossa aplicação.
Desenvolveremos uma tela onde o usuário deverá ser autenticado.
A tela deverá ter um formulário. Veja a tag:
<form name="FrmLogin" id="FrmLogin" method="POST" action="index.jsp">
<!—Incluir os campos do formulário aqui ‐‐>
</form>
Deverá possuir um campo oculto, dois campos editáveis e um botão obedecendo ao que
descreve a tabela abaixo:
TIPO NOME SIZE VALUE
text usuario 15
password senha 15
hidden op ‐ 1
submit btn_autenticar Autenticar
Benefrancis do Nascimento
SISTEMA WEB
110
O design semelhante à tela da imagem a seguir:
Figura 91 ‐ Layout da página index.jsp
CódigofonteJavadapaginaindex.jspO código fonte da imagem abaixo recebe na linha 52 o valor do campo hidden e o converte
para inteiro, já nas linhas 57 e 58 receberá os parâmetros sobre usuário e senha do formulário
e aciona o método autenticar do objeto PF.
Benefrancis do Nascimento
SISTEMA WEB
111
Figura 92 ‐ Autenticando ‐ index.jsp
Códigofontecompletodapaginaindex.jsp
<%@page contentType="text/html" pageEncoding="UTF‐8"%>
<%@page import="br.com.benefrancis.controle.*"%>
<!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>PETSHOP</title>
<link rel="stylesheet" type="text/css" href="css/Estilo.css">
</head>
<body>
Benefrancis do Nascimento
SISTEMA WEB
112
<form name="FrmLogin" id="FrmLogin" method="POST" action="index.jsp">
<table width="103%" border="0" cellpadding="0" cellspacing="0"align="center" >
<tr>
<td align="center" valign="middle">
<table width="750" border="0" cellspacing="0" cellpadding="0" align="center"
>
<tr>
<td width="40%" height="500" align="center" valign="middle">
<img src="images/login.png" alt="Petshop"/>
</td>
<td width="60%" align="center" valign="middle">
<table border="0" >
<tr>
<td class="Txt">USUARIO</td>
<td class="Txt"><input type="text" name="usuario" value=""
size="15"/></td>
</tr>
<tr>
<td class="Txt">SENHA</td>
<td class="Txt"><input type="password" name="senha" value=""
size="15" /></td>
</tr>
<tr>
<td colspan="2"><hr size="1"><input type="hidden" name="op"
value="1" /></td>
</tr>
<tr>
Benefrancis do Nascimento
SISTEMA WEB
113
<td></td>
<td><input type="submit" value="Autenticar"
name="btn_autenticar" /></td>
</tr>
<tr><td colspan="2" class="Txt">
<%
String usuario = "";
String senha = "";
int op = 0;
try {
op = Integer.parseInt(request.getParameter("op"));
} catch (Exception ex) {}
try {
if (op == 1) {
usuario = request.getParameter("usuario");
senha = request.getParameter("senha");
Autenticavel p = new PF().autenticar(usuario, senha);
if (p != null) {
session.setAttribute("Usuario", p);
String novaURL = "geral/inicio.jsp";
response.sendRedirect(novaURL);
} else {
out.print("<br>");
out.print("<center><font face='verdana' color='red' " +
"size='2'>Usuario ou senha inválidos</font></center>");
out.print("<br>");
Benefrancis do Nascimento
SISTEMA WEB
114
}
}
} catch (Exception e) {}
%>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</form>
</body>
</html>
Benefrancis do Nascimento
SISTEMA WEB
115
Codificandoarquivosdodiretóriogeral
Benefrancis do Nascimento
SISTEMA WEB
116
Head.jsp
Abaixo o conteúdo do arquivo head.jsp
Figura 93 ‐ conteúdo do arquivo head.jsp
Benefrancis do Nascimento
SISTEMA WEB
117
Topo.jsp
Abaixo o conteúdo do arquivo topo.jsp
Figura 94 ‐ Código do arquivo topo.jsp
Rodapé.jsp
Abaixo o código do arquivo rodapé.jsp
Figura 95 ‐ Código do arquivo rodapé.jsp
Benefrancis do Nascimento
SISTEMA WEB
118
Inicio.jsp
Abaixo o código do arquivo inicio.jsp. A tela de boas vindas da nossa aplicação.
Figura 96 ‐ Código do arquivo inicio.jsp
Benefrancis do Nascimento
SISTEMA WEB
119
Layoutdateladeboasvindas
Abaixo a tela de boas vindas da nossa aplicação.
Figura 97 ‐ A tela de boas vindas da nossa aplicação
Benefrancis do Nascimento
SISTEMA WEB
120
Codificandoarquivosdodiretóriocadastros
Benefrancis do Nascimento
SISTEMA WEB
121
Pessoa.jsp
O arquivo pessoa.jsp do diretório cadastros será a nossa tela para cadastramento de pessoas
em nosso sistemas. Uma pessoa será um usuário ‐ utilizador do sistema. O sistema deverá
verificar se existe uma pessoa cadastrada no sistema. Para fazer a verificação deveremos
verificar, antes do cadastramento de uma pessoa, se:
1º. O e‐mail informado já está registrado no banco de dados;
2º. Se o documento da receita já está cadastrado no sistema.
A tela deverá possuir um formulário. Veja a tag:
<form action="pessoa.jsp" method="post" name="Formulario" >
<!—Incluir os elementos do formulário aqui ‐‐>
</form>
ElementosdoformulárioAbaixo segue a lista dos elementos e suas propriedades:
Tabela 2 ‐ Elementos do formulário da página para cadastramento de pessoa
Índice Id Nome Tipo Valor Tamanho Tamanho
máximo
0 Tipo Tipo select
1 razao razao text 50 100
2 CNPJ CNPJ text 24 18
3 Nome Nome text 50 100
4 CPF CPF text 17 14
5 email email text 50 200
6 senha senha text 50 200
7 TelDDD TelDDD text 2 2
8 Tel Tel text 12 10
Benefrancis do Nascimento
SISTEMA WEB
122
9 TelCelDDD text 2 2
10 TelCel text 12 10
11 TelFaxDDD text 2 2
12 TelFax text 12 10
13 logradouro text 50 50
14 Numero text 10 10
15 Complemento text 30 50
16 Bairro text 30 50
17 Cidade text 30 50
18 uf select
19 CEP text 12 9
20 op hidden 1
21 Btn_Entrar button Cadastrar
CódigofonteJavadoarquivopessoa.jsp
Exibiremos abaixo o código fonte da página de cadastramento de pessoas. Não será necessário
digitar o código abaixo, pois o arquivo foi disponibilizado.
Benefrancis do Nascimento
SISTEMA WEB
123
<%@page contentType="text/html" pageEncoding="UTF‐8"%>
<%@page import="br.com.benefrancis.controle.*" %>
<%@page import="br.com.benefrancis.util.Util" %>
<%@page import="java.util.ArrayList" %>
<%@page import="java.util.Date" %>
<!DOCTYPE HTML PUBLIC "‐//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<jsp:include page="../geral/head.jsp" />
<body>
<form action="pessoa.jsp" method="post" name="Formulario" >
<table width="750" border="0" cellpadding="0" cellspacing="0" align="center">
<tr>
<td colspan="2">
<jsp:include page="../geral/topo.jsp" />
</td>
</tr>
<tr>
<td colspan="2">
<%
int op = 0;
String tipo = null;
Pessoa pessoa = null;
String username = null;
String senha = null;
DocReceita docReceita = null;
try {
op = Integer.parseInt(Util.SoNumero(request.getParameter("op")));
} catch (Exception ex) {
Benefrancis do Nascimento
SISTEMA WEB
124
}
try {
if (op == 1) {//O formulário foi enviado
try {
tipo = request.getParameter("Tipo");
} catch (Exception ex) {
}
if (tipo == "PJ") {
String razao = null;
try {
razao = request.getParameter("razao");
docReceita = new CNPJ(request.getParameter("CNPJ"));
//Criando uma pessoa juridica
pessoa = new PJ();
pessoa.setDocReceita(docReceita);
pessoa.setNome(razao);
docReceita.setPessoa(pessoa);
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException("<center>" +
"<font face='verdana' color='red' " +
"size='2'>Erro ao cadastrar Utilizador." +
"<br /> Verifique os dados de Pessoa Jurídica" +
" tente novamente</font></center>");
}
} else {
try {
String nome = request.getParameter("Nome");
Benefrancis do Nascimento
SISTEMA WEB
125
docReceita = new CPF(request.getParameter("CPF"));
//Criando uma pessoa física
pessoa = new PF();
pessoa.setDocReceita(docReceita);
pessoa.setNome(nome);
docReceita.setPessoa(pessoa);
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException("<center>" +
"<font face='verdana' color='red' " +
" size='2'>Erro ao cadastrar Utilizador." +
"<br /> Verifique os dados de Pessoa física" +
" tente novamente</font></center>");
}
}
//Já existe pessoa com o CPF ou CNPJ informado?
if (pessoa.existe(docReceita) == true) {
if (pessoa.getTipo() == 1) {
throw new RuntimeException("<br>" +
"<center><font face='verdana' " +
"color='red' size='2'><br />" +
"já existe cliente cadastrado com" +
" o CPF informado</font></center><br>");
} else {
throw new RuntimeException("<br>" +
"<center><font face='verdana' " +
"color='red' size='2'><br />" +
"já existe cliente cadastrado com" +
" o CNPJ informado</font></center><br>");
Benefrancis do Nascimento
SISTEMA WEB
126
}
}
try {
username = request.getParameter("email");
senha = request.getParameter("senha");
} catch (Exception ex) {
throw new RuntimeException("Verifique " +
"se o e‐mail e senha foram " +
"digitados corretamente");
}
if (username == "" || senha == "") {
throw new RuntimeException("<center>" +
"<font face='verdana' color='red'" +
" size='2'><br />Verifique o e‐mail " +
"e senha foram digitados corretamente" +
"</font></center>");
} else if (pessoa.existe(username) == true) {
throw new RuntimeException("<br><center>" +
"<font face='verdana' color='red' " +
" size='2'><br />já existe usuário " +
"cadastrado com o e‐mail digitado</font>" +
"</center><br>");
} else {
pessoa.setEmail(username);
pessoa.setSenha(senha);
}
//Telefones da pessoa
ArrayList<Telefone> telefone = new ArrayList<Telefone>();
Benefrancis do Nascimento
SISTEMA WEB
127
try {
int dddTel = Integer.parseInt(Util.SoNumero(request.getParameter("TelDDD")));
String Tel = Util.SoNumero(request.getParameter("Tel"));
if (dddTel != 0 && Tel != "") {
telefone.add(new Telefone(dddTel, Tel, pessoa));
}
} catch (Exception eTel) {
}
try {
int dddCel = Integer.parseInt(Util.SoNumero(request.getParameter("TelCelDDD")));
String Cel = Util.SoNumero(request.getParameter("TelCel"));
if (dddCel != 0 && Cel != "") {
telefone.add(new Telefone(dddCel, Cel, pessoa));
}
} catch (Exception eCel) {
}
try {
int dddFax = Integer.parseInt(Util.SoNumero(request.getParameter("TelFaxDDD")));
String Fax = Util.SoNumero(request.getParameter("TelFax"));
if (dddFax != 0 && Fax != "") {
telefone.add(new Telefone(dddFax, Fax, pessoa));
}
} catch (Exception eFax) {
}
//Endereços da pessoa
ArrayList<Endereco> end = new ArrayList<Endereco>();
Endereco endereco = new Endereco();
String logradouro = "";
String numero = "";
Benefrancis do Nascimento
SISTEMA WEB
128
String complemento = "";
String bairro = "";
String cep = "";
String cidade = "";
String uf = "";
try {
logradouro = request.getParameter("logradouro");
numero = request.getParameter("Numero");
complemento = request.getParameter("Complemento");
bairro = request.getParameter("Bairro");
cep = Util.SoNumero(request.getParameter("CEP"));
cidade = request.getParameter("Cidade");
uf = request.getParameter("uf");
if (logradouro == "" || numero == ""
|| bairro == "" || cidade == ""
|| uf == "" || cep == "") {
throw new RuntimeException("O endereço deve conter" +
" logradouro, número, Bairro, " +
"Cidade, Estado e CEP");
} else {
endereco.setLogradouro(logradouro);
endereco.setBairro(bairro);
endereco.setCep(cep);
endereco.setCidade(cidade);
endereco.setComplemento(complemento);
endereco.setNumero(numero);
endereco.setUf(uf);
endereco.setPessoa(pessoa);
end.add(endereco);
Benefrancis do Nascimento
SISTEMA WEB
129
}
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException("Logradouro é um campo obrigatório");
}
//Salvando a pessoa e todos os seua relacionamentos em banco de dados
//Adicionando a Pessoa
pessoa.setTelefone(telefone);
pessoa.setEndereco(end);
pessoa.setAnimal(null);
//Salvando:
pessoa.salvar(pessoa);
out.print("<br>");
out.print("<br>");
out.print("<br>");
out.print("<center><font face='verdana' color='blue' size='2'>Utilizador cadastrado com sucesso</font></center>");
out.print("<br>");
out.print("<br>");
out.print("<br>");
} else {//Se op for diferente de 1
%>
</td>
</tr>
<tr>
<td width="162" class="Txt">Tipo</td>
<td width="436" class="Txt">
<select name="Tipo" id="Tipo" onChange="showCampo(document.forms[0][this.name].options[document.forms[0][this.name].selecte
Benefrancis do Nascimento
SISTEMA WEB
130
dIndex].value,'campo_hidden');">
<option value="0">Selecione</option>
<option value="PJ">PJ</option>
<option value="PF">PF</option>
</select>
</td>
</tr>
<tr id="campo_hiddenPJ" style="display:none">
<td height="104" colspan="2" valign="top">
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<!‐‐DWLayoutTable‐‐>
<tr>
<td height="1" colspan="2" valign="top"><hr size="1"></td>
</tr>
<tr>
<td height="22" colspan="2" valign="top" class="Txt"><strong>PESSOA JURÍDICA </strong></td>
</tr>
<tr>
<td width="23%" height="27" valign="top" class="Txt">RAZÃO SOCIAL</td>
<td width="77%" valign="top" class="Txt"><input name="razao" type="text" id="razao" size="50" maxlength="100">
<span class="style1">*</span></td>
</tr>
<tr>
<td height="27" valign="top" class="Txt">CNPJ</td>
<td valign="top" class="Txt"><input name="CNPJ" type="text" id="CNPJ" OnKeyPress="formatar(this, '##.###.###/####‐##')" onKeyUp="javascript:Sonumero(this)" size="24" maxLength="18" >
Benefrancis do Nascimento
SISTEMA WEB
131
+ </td>
</tr>
</table>
</td>
</tr>
<tr id="campo_hiddenPF" style="display:none">
<td height="104" colspan="2" valign="top">
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<!‐‐DWLayoutTable‐‐>
<tr>
<td height="1" colspan="2" valign="top"><hr size="1"></td>
</tr>
<tr>
<td height="22" colspan="2" valign="top" class="Txt"><strong>PESSOA FÍSICA </strong></td>
</tr>
<tr>
<td width="20%" valign="top" class="Txt">Nome Completo </td>
<td width="80%" valign="top" class="Txt"><input name="Nome" type="text" id="Nome" size="50" maxlength="100">
<span class="style1">*</span></td>
</tr>
<tr>
<td width="25%" valign="top" class="Txt">CPF</td>
<td width="75%" valign="top" class="Txt"><input name="CPF" type="text" id="CPF" OnKeyPress="formatar(this, '###.###.###‐##')" onKeyUp="javascript:Sonumero(this)" size=17 maxlength="14">
Benefrancis do Nascimento
SISTEMA WEB
132
+ </td>
</tr>
</table>
</td>
</tr>
<tr>
<td id="contato" height="104" colspan="2" valign="top">
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<!‐‐DWLayoutTable‐‐>
<tr>
<td colspan="2"><hr size="1"></td>
<td></td>
</tr>
<tr>
<td colspan="2" class="Txt"><strong>USUARIO DO SISTEMA</strong></td>
<td></td>
</tr>
<tr>
<td width="162" height="27" valign="top" class="Txt">E‐mail</td>
<td width="436" valign="top" class="Txt"><input name="email" type="text" id="email" size="50" maxlength="200">
<span class="style1">*</span></td>
</tr>
<tr>
<td width="162" height="27" valign="top" class="Txt">Senha</td>
<td width="436" valign="top" class="Txt"><input name="senha" type="text"
Benefrancis do Nascimento
SISTEMA WEB
133
id="senha" size="50" maxlength="200">
<span class="style1">*</span></td>
</tr>
<tr>
<td colspan="2"><hr size="1"></td>
<td></td>
</tr>
<tr>
<td colspan="2" class="Txt"><strong>CONTATO</strong></td>
<td></td>
</tr>
<tr>
<td class="Txt">Telelefone</td>
<td class="Txt">(<input name="TelDDD" type="text" id="TelDDD" onKeyUp="javascript:Sonumero(this)" size="2" maxlength="2">) <input name="Tel" type="text" id="Tel" OnKeyPress="formatar(this, '####‐####')" onKeyUp="javascript:Sonumero(this)" size="12" maxlength="10"></td>
<td></td>
</tr>
<tr>
<td class="Txt">Celular</td>
<td class="Txt">(<input name="TelCelDDD" type="text" onKeyUp="javascript:Sonumero(this)" size="2" maxlength="2">) <input name="TelCel" type="text" OnKeyPress="formatar(this, '####‐####')" onKeyUp="javascript:Sonumero(this)" size="12" maxlength="10"></td>
<td></td>
</tr>
<tr>
<td class="Txt">Fax</td>
<td class="Txt">(<input name="TelFaxDDD" type="text" onKeyUp="javascript:Sonumero(this)" size="2" maxlength="2">) <input name="TelFax" type="text" OnKeyPress="formatar(this, '####‐####')" onKeyUp="javascript:Sonumero(this)" size="12"
Benefrancis do Nascimento
SISTEMA WEB
134
maxlength="10"></td>
<td></td>
</tr>
<tr>
<td colspan="2"><hr size="1"></td>
<td></td>
</tr>
<tr>
<td colspan="2" class="Txt"><strong>ENDEREÇO</strong></td>
<td></td>
</tr>
<tr>
<td class="Txt">LOGRADOURO</td>
<td class="Txt"><input name="logradouro" type="text" size="50" maxlength="50"></td>
<td></td>
</tr>
<tr>
<td class="Txt">Nº</td>
<td class="Txt"><input name="Numero" type="text" size="10" maxlength="10"></td>
<td></td>
</tr>
<tr>
<td class="Txt">Complemento</td>
<td class="Txt"><input name="Complemento" type="text" size="30" maxlength="50"></td>
<td></td>
</tr>
<tr>
<td class="Txt">Bairro</td>
Benefrancis do Nascimento
SISTEMA WEB
135
<td class="Txt"><input name="Bairro" type="text" size="30" maxlength="50"></td>
<td></td>
</tr>
<tr>
<td class="Txt">Cidade</td>
<td class="Txt"><input name="Cidade" type="text" size="30" maxlength="50"></td>
<td></td>
</tr>
<tr id="estados" >
<td class="Txt">Estado</td>
<td class="Txt">
<select name="uf">
<option value="">Selecione</option>
<option value="AC">AC</option>
<option value="AL">AL</option>
<option value="AP">AP</option>
<option value="AM">AM</option>
<option value="BA">BA</option>
<option value="CE">CE</option>
<option value="DF">DF</option>
<option value="ES">ES</option>
<option value="GO">GO</option>
<option value="MA">MA</option>
<option value="MT">MT</option>
<option value="MS">MS</option>
<option value="MG">MG</option>
<option value="PA">PA</option>
<option value="PB">PB</option>
<option value="PR">PR</option>
Benefrancis do Nascimento
SISTEMA WEB
136
<option value="PE">PE</option>
<option value="PI">PI</option>
<option value="RJ">RJ</option>
<option value="RN">RN</option>
<option value="RS">RS</option>
<option value="RO">RO</option>
<option value="RR">RR</option>
<option value="SC">SC</option>
<option value="SP">SP</option>
<option value="SE">SE</option>
<option value="TO">TO</option>
</select></td>
<td></td>
</tr>
<tr>
<td class="Txt">CEP</td>
<td class="Txt">
<input name="CEP" type="text" OnKeyPress="formatar(this, '#####‐###')" onKeyUp="javascript:Sonumero(this)" size="12" maxlength="9">
+ </td>
<td></td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="2"> </td>
<td></td>
</tr>
<tr><td> </td></tr>
Benefrancis do Nascimento
SISTEMA WEB
137
<tr>
<td class="Txt" width="20"> </td>
<td class="Txt" width="80" align="left">
<input type="hidden" name="op" value="1" />
<input type="button" name="Btn_Entrar" value="Cadastrar" onClick="Validar(document.Formulario);" >
</td>
</tr>
<tr><td> </td></tr>
<%}
} catch (Exception e) {
out.print("<br>");
out.print("<center><font face='verdana' color='red' size='2'>"
+ "Erro ao cadastrar Utilizador</font></center>");
out.print(e.getMessage());
}
%>
<tr>
<td colspan="2">
<jsp:include page="../geral/rodape.jsp" />
</td>
</tr>
</table>
</form>
</body>
</html>
Figura 98 ‐ Código fonte do arquivo pessoa.jsp do diretório cadastros
Layoutdapáginadecadastramentodepessoa
Benefrancis do Nascimento
SISTEMA WEB
138
Abaixo o layout da página de cadastramento de pessoa.
Figura 99 ‐ Layout da página de cadastramento de pessoa
Animal.jsp
Para cadastrar um animal o usuário deverá primeiro selecionar o dono do animal e em seguida
pressionar o botão prosseguir. Em seguida digitar os dados do animal e por fim pressionar o
botão cadastrar.
ElementosdoformulárioAbaixo segue a lista dos elementos e suas propriedades:
Benefrancis do Nascimento
SISTEMA WEB
139
Tabela 3 ‐ Elementos do formulário para cadastramento de animal
Índice Id Nome Tipo Valor Tamanho Tamanho
máximo
0 idPessoa hidden 1
1 tipoAnimal tipoAnimal select
2 nome nome text 50 100
3 raca raca text 24 50
4 dataNascimento text 11 10
5 sexo sexo select
6 observacao textarea
7 op hidden 2
8 Btn_Entrar button Cadastrar
Codificaremos agora a página para cadastramento de animais.
Benefrancis do Nascimento
SISTEMA WEB
140
<%‐‐
Document : animal.jsp
Created on : 22/11/2010, 16:35:56
‐‐%>
<%@page contentType="text/html" pageEncoding="UTF‐8"%>
<%@page import="br.com.benefrancis.controle.*" %>
<%@page import="br.com.benefrancis.util.Util" %>
<%@page import="java.util.List" %>
<%@page import="java.util.ListIterator" %>
<%@page import="java.util.ArrayList" %>
<%@page import="java.util.Collection" %>
<%@page import="java.util.Date" %>
<%
//Operações:
// 0 = nenhuma. Neste caso exibiremos o formulário pedindo para selecionar o
// dono do animal. Após selecionado submit será executado.
// 1 = buscar os animais do dono:
// 1a) Mostraremos os dados do dono(apagaremos o combobox de listagem de donos);
// 1b) Aguardamos que o usuário escolha o animal. Após selecionado submit será
executado.
// 2 = registraremos o serviço executado.
//Iniciando a variável op
Benefrancis do Nascimento
SISTEMA WEB
141
int op = 0;
//verificando a variável op enviada pelo formulário:
try {
op = Integer.parseInt(Util.SoNumero(request.getParameter("op")));
} catch (Exception ex) {
ex.printStackTrace();
}
List<Pessoa> pList = new ArrayList<Pessoa>();
%>
<!DOCTYPE HTML PUBLIC "‐//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<jsp:include page="../geral/head.jsp" />
<body>
<table width="750" border="0" cellpadding="0" cellspacing="0" align="center">
<tr>
<td colspan="2">
<jsp:include page="../geral/topo.jsp" />
</td>
</tr>
<tr>
<td height="22" colspan="2" valign="top" class="Txt"><strong>CADASTRAMENTO DE
Benefrancis do Nascimento
SISTEMA WEB
142
ANIMAL DE ESTIMAÇÃO</strong></td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
<tr>
<td colspan="2">
</td>
</tr>
<% if (op == 0) {%>
<tr>
<td colspan="2">
<form action="animal.jsp" method="post" name="Formulario" >
<table width="750" border="0" cellpadding="0" cellspacing="0">
<tr>
<td colspan="2">
<tr>
<td width="162" class="Txt">Dono do animal</td>
<td width="436" class="Txt">
<select name="idPessoa">
<option value="0"> Selecione </option>
<%
pList = Pessoa.consultar();
for (ListIterator iter = pList.listIterator(); iter.hasNext();) {
Benefrancis do Nascimento
SISTEMA WEB
143
Pessoa achei = (Pessoa) iter.next();
%>
<option value="<% out.print(achei.getIdPessoa());%>"><%
out.print(achei.getNome());%></option>
<%
}
%>
</select>
</td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
<tr>
<td class="Txt"> </td>
<td class="Txt"><input type="hidden" name="op" value="1" />
<input type="button" name="Btn_Entrar" value="Prosseguir >>"
onClick="ValidarRegistro1(document.Formulario);" >
</td>
</tr>
<tr>
<td colspan="2"> </td>
Benefrancis do Nascimento
SISTEMA WEB
144
</tr>
</table>
</form>
<jsp:include page="../geral/rodape.jsp" />
</td>
</tr>
<% } else if (op == 1) {%>
<tr>
<td colspan="2">
<form action="animal.jsp" method="post" name="Formulario" >
<table width="750" border="0" cellpadding="0" cellspacing="0">
<%
int idPessoa =
Integer.parseInt(Util.SoNumero(request.getParameter("idPessoa")));
Pessoa donoAnimal = Pessoa.consultar(idPessoa);
%>
<tr>
<td colspan="2">
<input type="hidden" name="idPessoa"
value="<%out.print(donoAnimal.getIdPessoa());%>" />
<table width="100%" border="0" cellpadding="0" cellspacing="0">
Benefrancis do Nascimento
SISTEMA WEB
145
<tr>
<td width="20%" class="TopoTit">CLIENTE: </td>
<td class="TextoTit"><% out.print(donoAnimal.getNome());%></td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="2"><hr size="1"></td>
</tr>
<tr>
<td height="22" colspan="2" valign="top"
class="Txt"><strong>ANIMAL</strong></td>
</tr>
<tr>
<td colspan="2">
<table width="100%" border="0" cellpadding="0" cellspacing="0"
align="center">
<tr>
<td width="162" class="Txt">Tipo</td>
<td width="436" class="Txt">
<select name="tipoAnimal" id="tipoAnimal">
<option value="0">Selecione</option>
<option value="1">Cachorro</option>
<option value="2">Gato</option>
</select>
Benefrancis do Nascimento
SISTEMA WEB
146
</td>
</tr>
<tr>
<td width="162" height="27" valign="top" class="Txt">Nome</td>
<td width="436" valign="top" class="Txt"><input name="nome"
type="text" id="nome" size="50" maxlength="100">
<span class="style1">*</span></td>
</tr>
<tr>
<td height="27" valign="top" class="Txt">Raça</td>
<td valign="top" class="Txt"><input name="raca" type="text"
id="raca" size="24" maxLength="50" ></td>
</tr>
<tr>
<td height="27" valign="top" class="Txt">Data de Nascimento</td>
<td valign="top" class="Txt"><input name="dataNascimento"
type="text" size="11" maxLength="10" OnKeyPress="formatar(this, '##/##/####')"
onKeyUp="javascript:Sonumero(this)"></td>
</tr>
<tr>
<td height="27" valign="top" class="Txt">Sexo</td>
<td valign="top" class="Txt">
<select name="sexo" id="sexo">
<option value="0">Selecione</option>
<option value="M">Macho</option>
<option value="F">Femea</option>
</select>
Benefrancis do Nascimento
SISTEMA WEB
147
<td>
</tr>
<tr>
<td height="27" valign="top" class="Txt">Observacao</td>
<td valign="top" class="Txt">
<textarea name="observacao" rows="4" cols="50"></textarea>
<td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
<tr>
<td class="Txt" width="23%"> </td>
<td class="Txt" width="77%">
<input type="hidden" name="op" value="2" />
<input type="button" name="Btn_Entrar" value="Cadastrar"
onClick="ValidarAnimal(document.Formulario);" >
</td>
</tr>
<tr>
Benefrancis do Nascimento
SISTEMA WEB
148
<td colspan="2"> </td>
</tr>
</table>
<jsp:include page="../geral/rodape.jsp" />
</form>
</td>
</tr>
<%} else if (op == 2) {%>
<tr>
<td colspan="2">
<%
//Declarando variáveis
//Pessoa
Pessoa pessoa = null;
int idPessoa = 0;
//Animal
Animal animal = null;
int tipoAnimal = 0;
String nome = null;
String raca = null;
String dataNascimento = null;
String sexo = null;
Benefrancis do Nascimento
SISTEMA WEB
149
String observacao = null;
//Tipo, nome, data de nascimento e sexo são obrigatórios
try {
try {
idPessoa =
Integer.parseInt(Util.SoNumero(request.getParameter("idPessoa")));
pessoa = Pessoa.consultar(idPessoa);
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException("Erro ao construir o Objeto pessoa");
}
try {
tipoAnimal =
Integer.parseInt(Util.SoNumero(request.getParameter("tipoAnimal")));
if (tipoAnimal == 1) {
animal = new Cachorro();
} else if (tipoAnimal == 2) {
animal = new Gato();
} else {
throw new RuntimeException("<br><center><font face='verdana'
color='red' size='2'><br />Selecione o Tipo do animal</font></center><br>");
}
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException("<br><center><font face='verdana'
Benefrancis do Nascimento
SISTEMA WEB
150
color='red' size='2'><br />Erro ao pegar o tipo do animal</font></center><br>");
}
try {
nome = request.getParameter("nome");
if (nome == null || nome == "" || nome == "0") {
throw new RuntimeException("<br><center><font face='verdana'
color='red' size='2'><br />Informe o nome do animal</font></center><br>");
} else {
animal.setNome(nome);
}
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException("<br><center><font face='verdana'
color='red' size='2'><br />Erro ao pegar o nome do animal</font></center><br>");
}
try {
raca = request.getParameter("raca");
animal.setRaca(raca);
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException("<br><center><font face='verdana'
color='red' size='2'><br />Erro ao capturar a raça do animal</font></center><br>");
}
Benefrancis do Nascimento
SISTEMA WEB
151
try {
dataNascimento = request.getParameter("dataNascimento");
//validar data e construir um objeto Date() caso a data seja válida
if (dataNascimento == null || dataNascimento == "" || dataNascimento ==
"0") {
throw new RuntimeException("<br><center><font face='verdana'
color='red' size='2'><br />Informe a data de nascimento do animal</font></center><br>");
} else if (Util.validarData(dataNascimento) != true) {
throw new RuntimeException("<br><center><font face='verdana'
color='red' size='2'><br />A data de nascimento do animal é inválida</font></center><br>");
} else {
animal.setDataNascimento(new Date(dataNascimento));
}
} catch (Exception ex) {
ex.printStackTrace();
}
try {
sexo = request.getParameter("sexo");
if (sexo == null || sexo == "" || sexo == "0") {
throw new RuntimeException("<br><center><font face='verdana'
color='red' size='2'><br />Informe o sexo do animal</font></center><br>");
} else {
animal.setSexo(sexo.charAt(0));
}
} catch (Exception ex) {
Benefrancis do Nascimento
SISTEMA WEB
152
ex.printStackTrace();
throw new RuntimeException("<br><center><font face='verdana'
color='red' size='2'><br />Informe o sexo do animal</font></center><br>");
}
try {
observacao = request.getParameter("observacao");
if (observacao != "") {
animal.setObservacao(observacao);
}
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException("<br><center><font face='verdana'
color='red' size='2'><br />Erro ao pegar o parâmetro Observação</font></center><br>");
}
animal.setPessoa(pessoa);
animal.setIdAnimal(1);
//Adicionando a uma lista os servicos executados
ArrayList<Servico> servico = new ArrayList<Servico>();
animal.setServico(servico);
//salvando
animal.salvar(animal);
out.print("<br><center><font face='verdana' color='blue' size='2'><br
/>Animal cadastrado com sucesso em nosso banco de dados</font></center><br><br><br>");
} catch (Exception ex) {
ex.printStackTrace();
Benefrancis do Nascimento
SISTEMA WEB
153
out.print("<br>");
out.print("<br>");
out.print("<br>");
out.print("<br><center><font face='verdana' color='red' size='2'><br />Erro
ao cadastrar o animal</font></center><br>");
out.print(ex.getMessage());
out.print("<br>");
out.print("<br>");
}
%>
<jsp:include page="../geral/rodape.jsp" />
</td>
<tr>
<% }//fim do if de op%>
</table>
</body>
</html>
Figura 100 ‐ código fonte da página para cadastramento de animais
Benefrancis do Nascimento
SISTEMA WEB
154
Layoutdapáginapararegistrodeanimal
Figura 101 ‐ Layout da página para registro de animal
Benefrancis do Nascimento
SISTEMA WEB
155
Codificandoarquivosdodiretórioserviços
Benefrancis do Nascimento
SISTEMA WEB
156
Introdução
Neste diretório teremos apenas um arquivo; O registra.jsp que será o responsável pelo
cadastramento de serviços realizados no animal.
registrar.jsp
Para registrar um serviço, será necessário selecionar uma pessoa, e em seguida o animal desta
pessoa, para que seja aberto o formulário com os campos para cadastramento do serviço.
A tela deverá possuir um formulário. Veja a tag:
<form action="registrar.jsp" method="post" name="Formulario" >
<!—Incluir os elementos do formulário aqui ‐‐>
</form>
Elementosdoformuláriopararegistrodeserviço
Tabela 4 ‐ Elementos do formulário para registro de serviço
Índice Id Nome Tipo Valor Tamanho Tamanho
máximo
0 idPessoa hidden 1
1 servico servico select
2 nome nome text 50 100
3 valor text 11 10
4 observacao textarea
5 op hidden 3
6 idAnimal hidden 1
7 Btn_Entrar button Cadastrar
Benefrancis do Nascimento
SISTEMA WEB
157
Codificaremosagoraapáginapararegistrodeserviço.
<%@page contentType="text/html" pageEncoding="UTF‐8"%>
<%@page import="br.com.benefrancis.controle.*" %>
<%@page import="br.com.benefrancis.util.Util" %>
<%@page import="java.util.List" %>
<%@page import="java.util.Date" %>
<%@page import="java.util.ListIterator" %>
<%@page import="java.util.ArrayList" %>
<%@page import="java.util.Collection" %>
<%@page import="java.util.Date" %>
<%
//Operações:
// 0 = nenhuma. Neste caso exibiremos o formulário pedindo para selecionar o dono do
animal. Após selecionado submit será executado.
// 1 = buscar os animais do dono:
// 1a) Mostraremos os dados do dono(apagaremos o combobox de listagem de donos);
// 1b) Aguardamos que o usuário escolha o animal. Após selecionado submit será
executado.
// 2 = registraremos o serviço executado.
//Iniciando a variável op
int op = 0;
//verificando a variável op enviada pelo formulário:
try {
op = Integer.parseInt(Util.SoNumero(request.getParameter("op")));
} catch (Exception ex) {
Benefrancis do Nascimento
SISTEMA WEB
158
ex.printStackTrace();
}
List<Pessoa> pList = new ArrayList<Pessoa>();
List<Animal> aList = new ArrayList<Animal>();
//Serviço
int servicoEscolhido = 0;
Servico servico = null;
String nome = null;
%>
<!DOCTYPE HTML PUBLIC "‐//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<jsp:include page="../geral/head.jsp" />
<body>
<table width="750" border="0" cellpadding="0" cellspacing="0" align="center">
<tr>
<td colspan="2">
<jsp:include page="../geral/topo.jsp" />
</td>
</tr>
Benefrancis do Nascimento
SISTEMA WEB
159
<tr>
<td height="22" colspan="2" valign="top" class="Txt"><strong>CADASTRAMENTO DE
SERVIÇOS NO ANIMAL</strong></td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
<tr>
<td colspan="2">
</td>
</tr>
<% if (op == 0) {%>
<tr>
<td colspan="2">
<form action="registrar.jsp" method="post" name="Formulario" >
<table width="750" border="0" cellpadding="0" cellspacing="0" align="center">
<tr>
<td colspan="2">
<tr>
<td width="162" class="Txt">Dono do animal</td>
<td width="436" class="Txt">
<select name="idPessoa">
<option value="0"> Selecione </option>
<%
pList = Pessoa.consultar();
for (ListIterator iter = pList.listIterator(); iter.hasNext();) {
Benefrancis do Nascimento
SISTEMA WEB
160
Pessoa achei = (Pessoa) iter.next();
%>
<option value="<% out.print(achei.getIdPessoa());%>"><%
out.print(achei.getNome());%></option>
<%
}
%>
</select>
</td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
<tr>
<td class="Txt"> </td>
<td class="Txt"><input type="hidden" name="op" value="1" />
<input type="button" name="Btn_Entrar" value="Prosseguir >>"
onClick="ValidarRegistro1(document.Formulario);" >
</td>
</tr>
<tr>
<td colspan="2"> </td>
Benefrancis do Nascimento
SISTEMA WEB
161
</tr>
</table>
</form>
<jsp:include page="../geral/rodape.jsp" />
</td>
</tr>
<% } else if (op == 1) {%>
<tr>
<td colspan="2">
<form action="registrar.jsp" method="post" name="Formulario" >
<table width="750" border="0" cellpadding="0" cellspacing="0" align="center">
<%
int idPessoa =
Integer.parseInt(Util.SoNumero(request.getParameter("idPessoa")));
Pessoa donoAnimal = Pessoa.consultar(idPessoa);
%>
<tr>
<td colspan="2">
<input type="hidden" name="idPessoa"
value="<%out.print(donoAnimal.getIdPessoa());%>" />
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="20%" class="TopoTit">CLIENTE: </td>
<td class="TextoTit"><% out.print(donoAnimal.getNome());%></td>
</tr>
</table>
Benefrancis do Nascimento
SISTEMA WEB
162
</td>
</tr>
<tr>
<td colspan="2"> </td>
<tr>
<td width="162" class="Txt">ANIMAL DE ESTIMAÇÃO</td>
<td width="436" class="Txt">
<select name="idAnimal">
<option value="0"> Selecione </option>
<%
aList = (ArrayList<Animal>) Animal.consultar(donoAnimal);
for (ListIterator iter = aList.listIterator(); iter.hasNext();) {
Animal acheiAnimal = (Animal) iter.next();
%>
<option value="<% out.print(acheiAnimal.getIdAnimal());%>"><%
out.print(acheiAnimal.getNome());%></option>
<%
}
%>
</select>
</td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
<tr>
Benefrancis do Nascimento
SISTEMA WEB
163
<td colspan="2"> </td>
</tr>
<tr>
<td class="Txt"> </td>
<td class="Txt">
<input type="hidden" name="op" value="2" />
<input type="button" name="Btn_Entrar" value="Prosseguir >>"
onClick="ValidarRegistro2(document.Formulario);" >
</td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
</table>
<jsp:include page="../geral/rodape.jsp" />
</form>
</td>
</tr>
<%} else if (op == 2) {%>
<tr>
<td height="104" colspan="2" valign="top" >
<form action="registrar.jsp" method="post" name="Formulario" >
Benefrancis do Nascimento
SISTEMA WEB
164
<table width="100%" border="0" cellpadding="0" cellspacing="0"
align="center">
<!‐‐DWLayoutTable‐‐>
<%
int idPessoa =
Integer.parseInt(Util.SoNumero(request.getParameter("idPessoa")));
Pessoa donoAnimal = Pessoa.consultar(idPessoa);
int idAnimal =
Integer.parseInt(Util.SoNumero(request.getParameter("idAnimal")));
Animal animal = Animal.consultar(idAnimal);
%>
<tr>
<td colspan="2">
<input type="hidden" name="idPessoa"
value="<%out.print(donoAnimal.getIdPessoa());%>" />
<table width="100%" border="0" cellpadding="0" cellspacing="0"
align="center">
<tr >
<td width="20%" class="TopoTit">CLIENTE: </td>
<td class="TextoTit"><% out.print(donoAnimal.getNome());%></td>
</tr>
<tr>
<td width="20%" class="TopoTit">ANIMAL DE ESTIMAÇÃO: </td>
<td class="TextoTit" ><% out.print(animal.getNome());%></td>
</tr>
</table>
Benefrancis do Nascimento
SISTEMA WEB
165
</td>
</tr>
<tr>
<td colspan="2"><hr size="1"></td>
</tr>
<tr>
<td height="22" colspan="2" valign="top" class="Txt"><strong>SERVIÇO
EXECUTADO</strong></td>
</tr>
<tr>
<td colspan="2">
<table width="100%" border="0" cellpadding="0" cellspacing="0"
align="center">
<tr>
<td width="165" class="Txt">Serviço</td>
<td width="581" class="Txt">
<select name="servico" id="servico">
<option value="0">Selecione</option>
<option value="1">Consulta Veterinária</option>
<option value="2">Banho</option>
<option value="3">Tosa</option>
<option value="4">Vacina</option>
</select>
</td>
</tr>
<tr>
<td width="165" height="27" valign="top" class="Txt">Nome /
Benefrancis do Nascimento
SISTEMA WEB
166
Descrição </td>
<td width="581" valign="top" class="Txt">
<input name="nome" type="text" id="nome" size="50"
maxlength="100">
<span class="style1">*</span></td>
</tr>
<tr>
<td height="27" valign="top" class="Txt">Valor R$ </td>
<td valign="top" class="Txt">
<input name="valor" type="text" size="11" maxLength="10"
onKeyUp="javascript:Sonumero(this)">
</td>
</tr>
<tr>
<td height="27" valign="top" class="Txt">Observacao</td>
<td valign="top" class="Txt">
<textarea name="observacao" rows="4" cols="50"></textarea>
<td width="10">
</tr>
<tr>
<td colspan="2"> </td>
</tr>
</table>
</td>
</tr>
Benefrancis do Nascimento
SISTEMA WEB
167
<tr>
<td colspan="2"> </td>
</tr>
<tr>
<td class="Txt" width="23%"> </td>
<td class="Txt" width="77%">
<input type="hidden" name="op" value="3" />
<input type="hidden" name="idAnimal" value="<%
out.print(Util.SoNumero(request.getParameter("idAnimal")));%>" />
<input type="button" name="Btn_Entrar" value="Cadastrar"
onClick="ValidarRegistro(document.Formulario);" >
</td>
</tr>
</table>
</form>
</td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
<tr>
<td colspan="2">
<jsp:include page="../geral/rodape.jsp" />
</td>
</tr>
Benefrancis do Nascimento
SISTEMA WEB
168
<%} else if (op == 3) {%>
<tr>
<td colspan="2">
<%
try{
Animal animal=null;
try {
//Cadastraremos o serviço executado no animal de estimação de uma pessoa
//Buscando Animal
int idAnimal =
Integer.parseInt(Util.SoNumero(request.getParameter("idAnimal")));
animal = Animal.consultar(idAnimal);
if (animal == null) {
throw new RuntimeException("Erro na busca dos dados do animal.");
}
//Criando um objeto serviço conforme o serviço escolhido:
try {
servicoEscolhido =
Integer.parseInt(Util.SoNumero(request.getParameter("servico")));
switch (servicoEscolhido) {
case 1:
servico = new Banho();
break;
case 2:
servico = new Consulta();
break;
Benefrancis do Nascimento
SISTEMA WEB
169
case 3:
servico = new Tosa();
break;
case 4:
servico = new Vacina();
break;
default:
throw new RuntimeException("Serviço inválido! Favor selecionar o
serviço executado.");
}
} catch (Exception ex) {
}
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException("<br><center><font face='verdana'
color='red' size='2'><br />Erro ao pegar o nome do serviço efetuado</font></center><br>");
}
double valor = 0;
try {
valor = Double.parseDouble(request.getParameter("valor"));
servico.setValor(valor);
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException("<br><center><font face='verdana'
color='red' size='2'><br />Informe corretamente o valor do serviço
executado</font></center><br>");
}
Benefrancis do Nascimento
SISTEMA WEB
170
String descricao = null;
try {
descricao = request.getParameter("nome");
servico.setDescricao(descricao);
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException("<br><center><font face='verdana'
color='red' size='2'><br />Erro ao pegar o nome / descrição do serviço
efetuado</font></center><br>");
}
String observacao = null;
try {
observacao = request.getParameter("observacao");
servico.setObservacao(observacao);
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException("<br><center><font face='verdana'
color='red' size='2'><br />Erro ao pegar observação referente ao serviço
efetuado</font></center><br>");
}
//Adicionando o animal
servico.setAnimal(animal);
servico.setData(new Date());
//salvando
servico.salvar(servico);
out.print("<br>");
out.print("<br>");
Benefrancis do Nascimento
SISTEMA WEB
171
out.print("<br>");
out.print("<br><center><font face='verdana' color='blue' size='2'><br
/>Serviço cadastrado com sucesso</font></center><br>");
out.print("<br>");
out.print("<br>");
} catch (Exception ex) {
ex.printStackTrace();
out.print("<br>");
out.print("<br>");
out.print("<br>");
out.print("<br><center><font face='verdana' color='red' size='2'><br />Erro
ao cadastrar o serviço executado</font></center><br>");
out.print("<br><center><font face='verdana' color='red' size='2'><br />" +
ex.getMessage() + "</font></center><br>");
out.print("<br>");
out.print("<br>");
}
%>
<jsp:include page="../geral/rodape.jsp" />
</td>
</tr>
<% }//fim do if de op%>
</table>
</body>
</html>
Figura 102 ‐ Código fonte da página para registro de serviço
Benefrancis do Nascimento
SISTEMA WEB
172
Layoutdapaginapararegistrodeserviço
Figura 103 ‐ Layout da pagina para registro de serviço
Benefrancis do Nascimento
SISTEMA WEB
173
Codificandoarquivosdodiretórioconsultas
Benefrancis do Nascimento
SISTEMA WEB
174
Introdução
Neste diretório teremos telas para consulta de Pessoas, animais e serviços. No relatório das
consultas terão opções para detalhar, editar, excluir e etc. São arquivos deste diretório:
Tabela 5 ‐ Arquivos do diretório consultas
NOME DESCRIÇÃO
pessoa.jsp Retorna todas as pessoas cadastradas no
sistema. Apresenta link para cadastrar um
novo animal para uma pessoa, visualizar os
dados da pessoa, editar os dados da pessoa
ou excluir a pessoa.
animal.jsp Retorna os animais cadastrados para uma
pessoa selecionada ou todos os animais
registrados. Apresenta link para incluir novo
serviço para o animal, visualizar os dados
deste animal, editar os dados do animal ou
excluir o animal.
servico.jsp Retorna todos os serviços realizados.
Apresenta link para visualizar os dados do
serviço realizado, editar o serviço ou excluir o
serviço.
detalhe_pessoa.jsp Exibe todas as informações de uma pessoa.
detalhe_animal.jsp Exibe todas as informações de um animal.
detalhe_servico.jsp Exibe todas as informações de um serviço
realizado.
editar_pessoa.jsp Permite alterar os dados de uma pessoa
editar_animal.jsp Permite alterar os dados de um animal.
editar_servico.jsp Permite alterar os dados de um serviço
realizado.
excluir_pessoa.jsp Permite excluir uma pessoa do sistema.
excluir_animal.jsp Permite excluir um animal do sistema.
Benefrancis do Nascimento
SISTEMA WEB
175
excluir_serviço.jsp Permite excluir um serviço realizado em um
animal cadastrado no sistema.
Pessoa.jsp
A página pessoa.jsp do diretório consultas lista todas as pessoas cadastradas no sistema. Veja
abaixo o código fonte.
<%@page contentType="text/html" pageEncoding="UTF‐8"%>
<%@page import="br.com.benefrancis.controle.*" %>
<%@page import="br.com.benefrancis.util.Util" %>
<%@page import="java.util.ArrayList" %>
<%@page import="java.util.Date" %>
<%@page import="java.util.List" %>
<%@page import="java.util.ListIterator" %>
<%
//Iniciando variavel que receberá a lista de pessoas
List<Pessoa> pList = new ArrayList<Pessoa>();
%>
<!DOCTYPE HTML PUBLIC "‐//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<jsp:include page="../geral/head.jsp" />
<body>
<table width="750" border="0" cellpadding="0" cellspacing="0" align="center">
<tr>
<td colspan="2">
<jsp:include page="../geral/topo.jsp" />
Benefrancis do Nascimento
SISTEMA WEB
176
</td>
</tr>
<tr>
<td height="22" colspan="2" valign="top"
class="Txt"><strong>PESSOAS</strong></td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
<tr>
<td colspan="2">
</td>
</tr>
<tr>
<td colspan="2"><hr size="1"></td>
</tr>
<tr>
<td colspan="2">
<table border="0" width="100%">
<thead>
<tr class="TopoTit">
<th>NOME</th>
<th>TELEFONES</th>
<th>EMAIL</th>
<th>ANIMAIS</th>
<th>AÇÕES</th>
Benefrancis do Nascimento
SISTEMA WEB
177
</tr>
</thead>
<tbody>
<%
pList = Pessoa.consultar();
for (ListIterator iter = pList.listIterator(); iter.hasNext();) {
Pessoa achei = (Pessoa) iter.next();
%>
<tr>
<td align="left" class="Txt"><% out.print(achei.getNome());%></td>
<td align="left" class="Txt">
<%
List<Telefone> telefones = (List<Telefone>) Telefone.consultar(achei);
for (int i = 0; i <= telefones.size(); i++) {
try {
out.print(telefones.get(i).getDdd());
out.print(" ‐ ");
out.print(telefones.get(i).getNumero()+" ");
} catch (Exception e) {
}
}
%>
</td>
<td align="left" class="Txt"><%out.print(achei.getEmail());%></td>
Benefrancis do Nascimento
SISTEMA WEB
178
<td align="center" class="Txt">
<%
List<Animal> animais = (ArrayList<Animal>) Animal.consultar(achei);
out.print(animais.size());
%>
</td>
<td class="Txt" align="center">
<table border="0" align="center" cellpadding="2" cellspacing="2"
width="100%" >
<tr align="center" valign="middle">
<td>
<a
href="../cadastros/animal.jsp?op=1&idPessoa=<%out.print(achei.getIdPessoa());%>">
<img src="../images/img_gato.png" width="30" height="30"
alt="Inserir animal de estimação" title="Inserir animal de estimação" border="0" />
</a>
</td>
<td>
<a
href="../consultas/detalhe_pessoa.jsp?idPessoa=<%out.print(achei.getIdPessoa());%>">
<img src="../images/img_lupa_transparente.png" width="30"
height="30" alt="consultar" title="consultar" border="0"/>
</a>
</td>
<td>
<a
Benefrancis do Nascimento
SISTEMA WEB
179
href="../consultas/editar_pessoa.jsp?op=2&idPessoa=<%out.print(achei.getIdPessoa());%
>">
<img src="../images/img_caderno_transparente.png" width="30"
height="30" border="0" alt="editar" title="editar"/>
</a>
</td>
<td>
<a
href="../consultas/excluir_pessoa.jsp?idPessoa=<%out.print(achei.getIdPessoa());%>">
<img src="../images/img_lixeira_transparente.png" width="30"
height="30" border="0" alt="excluir" title="excluir"/>
</a>
</td>
</tr>
</table>
</td>
</tr>
<%}%>
</tbody>
</table>
<jsp:include page="../geral/rodape.jsp" />
</td>
</tr>
</table>
</body>
</html>
Benefrancis do Nascimento
SISTEMA WEB
180
Layoutdapáginadeconsultadepessoas
Abaixo o layout da página de consulta de pessoas.
Figure 4 ‐ Layout da página de consulta de pessoas
Editar_pessoa.jspVeja o código da pagina editar_pessoa.jsp
Benefrancis do Nascimento
SISTEMA WEB
181
<%@page contentType="text/html" pageEncoding="UTF‐8"%>
<%@page import="br.com.benefrancis.controle.*" %>
<%@page import="br.com.benefrancis.util.Util" %>
<%@ page import="java.util.List"%>
<%@ page import="java.util.ArrayList"%>
<%@ page import="java.util.ListIterator" %>
<%@ page import="java.util.Collection" %>
<!DOCTYPE HTML PUBLIC "‐//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<jsp:include page="../geral/head.jsp" />
<body>
<form action="editar_pessoa.jsp" method="post" name="Formulario" >
<table width="750" border="0" cellpadding="0" cellspacing="0" align="center">
<tr>
<td colspan="2">
<jsp:include page="../geral/topo.jsp" />
</td>
</tr>
<tr>
<td colspan="2">
<%
//iniciando variáveis:
int op = 0;
String tipo = null;
Benefrancis do Nascimento
SISTEMA WEB
182
int idPessoa=0;
Pessoa p = null;
String nome = "";
String razao = "";
String docReceita = "";
int dddTel = 0;
String Tel = "";
int dddCel = 0;
String Cel = "";
int dddFax = 0;
String Fax = "";
try {
if (!request.getParameter("op").isEmpty()) {
op = Integer.parseInt(request.getParameter("op"));
}
} catch (Exception ex) {
throw new RuntimeException("<center><font face='verdana' color='red'
size='2'>Erro ao tentar localizar dados da pessoa.<br /> Verifique os dados e tente
novamente</font></center>");
}
try{
idPessoa = Integer.parseInt(Util.SoNumero(request.getParameter("idPessoa")));
}catch(Exception e){
throw new RuntimeException("<center><font face='verdana' color='red'
size='2'>Erro ao tentar localizar dados da pessoa.<br /> Verifique os dados e tente
Benefrancis do Nascimento
SISTEMA WEB
183
novamente</font></center>");
}
p = new PF().consultar(idPessoa);
try {
if (op == 1) {
try{
idPessoa = Integer.parseInt(Util.SoNumero(request.getParameter("idPessoa")));
}catch(Exception e){
throw new RuntimeException("<center><font face='verdana' color='red'
size='2'>Erro ao tentar localizar dados da pessoa.<br /> Verifique os dados e tente
novamente</font></center>");
}
try {
tipo = request.getParameter("Tipo");
} catch (Exception ex) {
}
if (tipo == "PJ") {
p = new PJ().consultar(idPessoa);
try {
nome = request.getParameter("razao");
docReceita = request.getParameter("CNPJ");
docReceita = Util.SoNumero(docReceita);
//Criando uma pessoa juridica
} catch (Exception ex) {
throw new RuntimeException("<center><font face='verdana' color='red'
Benefrancis do Nascimento
SISTEMA WEB
184
size='2'>Erro ao cadastrar Utilizador.<br /> Verifique os dados de Pessoa Jurídica tente
novamente</font></center>");
}
} else {
p = new PF().consultar(idPessoa);
try {
nome = request.getParameter("Nome");
docReceita = request.getParameter("CPF");
docReceita = Util.SoNumero(docReceita);
} catch (Exception ex) {
throw new RuntimeException("<center><font face='verdana' color='red'
size='2'>Erro ao cadastrar Utilizador.<br /> Verifique os dados de Pessoa física tente
novamente</font></center>");
}
}
//Endereço da pessoa
Endereco endereco = new Endereco();
String logradouro = "";
String numero = "";
String complemento = "";
String bairro = "";
String cep = "";
String cidade = "";
String uf = "";
Benefrancis do Nascimento
SISTEMA WEB
185
//Endereço
List<Endereco> novoEndereco = new ArrayList<Endereco>();
try {
logradouro = request.getParameter("logradouro");
numero = request.getParameter("Numero");
complemento = request.getParameter("Complemento");
bairro = request.getParameter("Bairro");
cep = Util.SoNumero(request.getParameter("CEP"));
cidade = request.getParameter("Cidade");
uf = request.getParameter("uf");
if (logradouro == "" || numero == "" || bairro == "" || cidade == "" || uf == ""
|| cep == "") {
throw new RuntimeException("O endereço deve conter logradouro, número,
Bairro, Cidade, Estado e CEP");
} else {
endereco.setLogradouro(logradouro);
endereco.setBairro(bairro);
endereco.setCep(cep);
endereco.setCidade(cidade);
endereco.setComplemento(complemento);
endereco.setNumero(numero);
endereco.setUf(uf);
}
} catch (Exception ex) {
throw new RuntimeException("Logradouro é um campo obrigatório");
}
Benefrancis do Nascimento
SISTEMA WEB
186
//Telefones
ArrayList<Telefone> telefone = new ArrayList<Telefone>();
try {
dddTel = Integer.parseInt(Util.SoNumero(request.getParameter("TelDDD")));
Tel = Util.SoNumeroTel(request.getParameter("Tel"));
} catch (Exception eTel) {
}
try {
dddCel =
Integer.parseInt(Util.SoNumero(request.getParameter("TelCelDDD")));
Cel = Util.SoNumeroTel(request.getParameter("TelCel"));
} catch (Exception eCel) {
}
try {
dddFax =
Integer.parseInt(Util.SoNumero(request.getParameter("TelFaxDDD")));
Fax = Util.SoNumeroTel(request.getParameter("TelFax"));
} catch (Exception eFax) {
}
if (dddTel != 0 && Tel != "") {
telefone.add(new Telefone(dddTel, Tel, p));
}
if (dddCel != 0 && Cel != "") {
Benefrancis do Nascimento
SISTEMA WEB
187
telefone.add(new Telefone(dddCel, Cel, p));
}
if (dddFax != 0 && Fax != "") {
telefone.add(new Telefone(dddFax, Fax, p));
}
//Excluindo endereço anterior
List<Endereco> end = endereco.consultar(p);
for(int i=0; i<end.size();i++){
Endereco.excluir(end.get(i));
}
//Excluindo Telefones anteriores
List<Telefone> tel = (List<Telefone>) Telefone.consultar(p);
for(int i=0; i<tel.size();i++){
Telefone.excluir(tel.get(i));
}
p.setNome(nome);
endereco.setPessoa(p);
novoEndereco.add(endereco);
p.setEndereco(novoEndereco);
p.setTelefone(telefone);
p.alterar(p);
Benefrancis do Nascimento
SISTEMA WEB
188
out.print("<br>");
out.print("<br>");
out.print("<br>");
out.print("<center><font face='verdana' color='blue' size='2'>Utilizador
cadastrado com sucesso</font></center>");
out.print("<br>");
out.print("<br>");
out.print("<br>");
} else if (op == 2) {
%>
</td>
</tr>
<tr>
<td width="162" class="Txt">Tipo</td>
<td width="436" class="Txt">
<select name="Tipo" id="Tipo"
onChange="showCampo(document.forms[0][this.name].options[document.forms[0][this.nam
e].selectedIndex].value,'campo_hidden');">
<option <%if (p.getTipo()==2) {%> selected <%}%> value="PJ" >PJ</option>
<option <%if (p.getTipo()==1) {%> selected <%}%> value="PF" >PF</option>
</select>
</td>
</tr>
Benefrancis do Nascimento
SISTEMA WEB
189
<tr id="campo_hiddenPJ" style<% if (p.getTipo()==2) {%> ="display:''" <%} else {%>
="display:none" <%}%>>
<td height="104" colspan="2" valign="top">
<table width="100%" border="0" cellpadding="0" cellspacing="0" align="center">
<!‐‐DWLayoutTable‐‐>
<tr>
<td height="1" colspan="2" valign="top"><hr size="1"></td>
</tr>
<tr>
<td height="22" colspan="2" valign="top" class="Txt"><strong>PESSOA
JURÍDICA </strong></td>
</tr>
<tr>
<td width="162" height="27" valign="top" class="Txt">RAZÃO SOCIAL</td>
<td width="436" valign="top" class="Txt"><input name="razao" value="<% if
(p.getTipo()==2) {
out.print(p.getNome());
}%>" type="text" id="razao" size="50"
maxlength="100">
<span class="style1">*</span></td>
</tr>
<tr>
<td height="27" valign="top" class="Txt">CNPJ</td>
<td valign="top" class="Txt">
<input name="CNPJ"
Benefrancis do Nascimento
SISTEMA WEB
190
type="text"
id="CNPJ"
OnKeyPress="formatar(this, '##.###.###/####‐##')"
onKeyUp="javascript:Sonumero(this)"
size="24"
maxLength="18"
value="<% if (p.getTipo()==2)
{out.print(p.getDocReceita().getNumero());}%>" >
+ </td>
</tr>
</table>
</td>
</tr>
<tr id="campo_hiddenPF" style<% if (p.getTipo()==1) {%> ="display:''" <%} else {%>
="display:none" <%}%>>
<td height="104" colspan="2" valign="top">
<table width="100%" border="0" cellpadding="0" cellspacing="0" align="center">
<!‐‐DWLayoutTable‐‐>
<tr>
<td height="1" colspan="2" valign="top"><hr size="1"></td>
</tr>
<tr>
<td height="22" colspan="2" valign="top" class="Txt"><strong>PESSOA
FÍSICA </strong></td>
Benefrancis do Nascimento
SISTEMA WEB
191
</tr>
<tr>
<td width="162" height="27" valign="top" class="Txt">Nome Completo
</td>
<td width="436" valign="top" class="Txt">
<input
name="Nome"
value="<% if (p.getTipo()==1) {out.print(p.getNome());}%>"
type="text"
id="Nome"
size="50"
maxlength="100">
<span class="style1">*</span></td>
</tr>
<tr>
<td height="27" valign="top" class="Txt">CPF</td>
<td valign="top" class="Txt">
<input
name="CPF"
type="text"
id="CPF"
OnKeyPress="formatar(this, '###.###.###‐##')"
onKeyUp="javascript:Sonumero(this)"
size=17
maxlength="14"
value="<% if (p.getTipo()==1)
Benefrancis do Nascimento
SISTEMA WEB
192
{out.print(p.getDocReceita().getNumero());}%>">
+ </td>
</tr>
</table>
</td>
</tr>
<tr>
<td id="contato" height="104" colspan="2" valign="top">
<table width="100%" border="0" cellpadding="0" cellspacing="0" align="center">
<!‐‐DWLayoutTable‐‐>
<tr>
<td colspan="3"><hr size="1"></td>
<td></td>
</tr>
<tr>
<td colspan="3" class="Txt"><strong>TELEFONES</strong></td>
</tr>
<%
List<Telefone> telefones = new ArrayList<Telefone>();
Benefrancis do Nascimento
SISTEMA WEB
193
telefones = (List<Telefone>)Telefone.consultar(p);
for (int i = 0; i <= 2; i++) {
if (i == 0) {
try {
%>
<tr>
<td class="Txt">Telefone</td>
<td colspan="2" class="Txt">
<%if (telefones.size() >= 1) {%>
(<input name="TelDDD" value="<%out.print(telefones.get(i).getDdd());%>"
type="text" id="TelDDD" onKeyUp="javascript:Sonumero(this)" size="2" maxlength="2">)
<input name="Tel" value="<%out.print(telefones.get(i).getNumero());%>"
type="text" id="Tel" OnKeyPress="formatar(this, '####‐####')"
onKeyUp="javascript:Sonumero(this)" size="12" maxlength="10">
<%} else {%>
(<input name="TelDDD" type="text" id="TelDDD"
onKeyUp="javascript:Sonumero(this)" size="2" maxlength="2">)
<input name="Tel" type="text" id="Tel" OnKeyPress="formatar(this,
'####‐####')" onKeyUp="javascript:Sonumero(this)" size="12" maxlength="10">
<%}%>
</td>
</tr>
<%
} catch (Exception e) {
e.printStackTrace();
Benefrancis do Nascimento
SISTEMA WEB
194
}
}
if (i == 1) {
try {
%>
<tr>
<td class="Txt">Telefone</td>
<td colspan="2" class="Txt">
<%if (telefones.size() >= 2) {%>
(<input name="TelCelDDD"
value="<%out.print(telefones.get(i).getDdd());%>" type="text"
onKeyUp="javascript:Sonumero(this)" size="2" maxlength="2">)
<input name="TelCel"
value="<%out.print(telefones.get(i).getNumero());%>" type="text" OnKeyPress="formatar(this,
'####‐####')" onKeyUp="javascript:Sonumero(this)" size="12" maxlength="10">
<%} else {%>
(<input name="TelCelDDD" onKeyUp="javascript:Sonumero(this)"
size="2" maxlength="2">)
<input name="TelCel" type="text" OnKeyPress="formatar(this, '####‐
####')" onKeyUp="javascript:Sonumero(this)" size="12" maxlength="10">
<%}%>
</td>
</tr>
<%
} catch (Exception e) {
Benefrancis do Nascimento
SISTEMA WEB
195
e.printStackTrace();
}
}
if (i == 2) {
try {
%>
<tr>
<td class="Txt">Telefone</td>
<td colspan="2" class="Txt">
<%if (telefones.size() >= 3) {%>
(<input name="TelFaxDDD"
value="<%out.print(telefones.get(i).getDdd());%>" type="text"
onKeyUp="javascript:Sonumero(this)" size="2" maxlength="2">)
<input name="TelFax"
value="<%out.print(telefones.get(i).getNumero());%>" type="text" OnKeyPress="formatar(this,
'####‐####')" onKeyUp="javascript:Sonumero(this)" size="12" maxlength="10">
<%} else {%>
(<input name="TelFaxDDD" type="text"
onKeyUp="javascript:Sonumero(this)" size="2" maxlength="2">)
<input name="TelFax" type="text" OnKeyPress="formatar(this, '####‐
####')" onKeyUp="javascript:Sonumero(this)" size="12" maxlength="10">
<%}%>
</td>
</tr>
<%
} catch (Exception e) {
e.printStackTrace();
Benefrancis do Nascimento
SISTEMA WEB
196
}
}
}
%>
<tr>
<td colspan="3"><hr size="1"></td>
<td></td>
</tr>
<%
List<Endereco> enderecos = Endereco.consultar(p);
for (ListIterator iter = enderecos.listIterator(); iter.hasNext();) {
Endereco end = (Endereco) iter.next();
%>
<tr>
<td colspan="3" class="Txt"><strong>ENDEREÇO</strong></td>
</tr>
<tr>
<td class="Txt">LOGRADOURO</td>
<td colspan="2" class="Txt"><input name="logradouro"
value="<%out.print(end.getLogradouro());%>" type="text" size="50" maxlength="50"></td>
</tr>
<tr>
<td class="Txt">Nº</td>
<td colspan="2" class="Txt"><input name="Numero"
value="<%out.print(end.getNumero());%>" type="text" size="10" maxlength="10"></td>
Benefrancis do Nascimento
SISTEMA WEB
197
</tr>
<tr>
<td class="Txt">Complemento</td>
<td colspan="2" class="Txt"><input name="Complemento"
value="<%out.print(end.getComplemento());%>" type="text" size="30" maxlength="50"></td>
</tr>
<tr>
<td class="Txt">Bairro</td>
<td colspan="2" class="Txt"><input name="Bairro"
value="<%out.print(end.getBairro());%>" type="text" size="30" maxlength="50"></td>
</tr>
<tr>
<td class="Txt">Cidade</td>
<td colspan="2" class="Txt"><input name="Cidade"
value="<%out.print(end.getCidade());%>" type="text" size="30" maxlength="50"></td>
</tr>
<tr id="estados" >
<td class="Txt">Estado</td>
<td colspan="2" class="Txt">
<select name="uf">
<option value="AC">AC</option>
<option value="AL">AL</option>
<option value="AP">AP</option>
<option value="AM">AM</option>
<option value="BA">BA</option>
<option value="CE">CE</option>
Benefrancis do Nascimento
SISTEMA WEB
198
<option value="DF">DF</option>
<option value="ES">ES</option>
<option value="GO">GO</option>
<option value="MA">MA</option>
<option value="MT">MT</option>
<option value="MS">MS</option>
<option value="MG">MG</option>
<option value="PA">PA</option>
<option value="PB">PB</option>
<option value="PR">PR</option>
<option value="PE">PE</option>
<option value="PI">PI</option>
<option value="RJ">RJ</option>
<option value="RN">RN</option>
<option value="RS">RS</option>
<option value="RO">RO</option>
<option value="RR">RR</option>
<option value="SC">SC</option>
<option value="SP">SP</option>
<option value="SE">SE</option>
<option value="TO">TO</option>
<option selected="true"
value="<%out.print(end.getUf());%>"><%out.print(end.getUf());%></option>
</select></td>
</tr>
<tr>
Benefrancis do Nascimento
SISTEMA WEB
199
<td class="Txt">CEP</td>
<td colspan="2" class="Txt">
<input name="CEP" value="<%out.print(end.getCep());%>" type="text"
OnKeyPress="formatar(this, '#####‐###')" onKeyUp="javascript:Sonumero(this)" size="12"
maxlength="9">
+ </td>
</tr>
<%}%>
</table>
</td>
</tr>
<tr>
<td colspan="2"> </td>
<td></td>
</tr>
<tr>
<td class="Txt" width="23%"> </td>
<td class="Txt" width="77%">
<input type="hidden" name="op" value="1" />
<input type="hidden" name="idPessoa" value="<%out.print(p.getIdPessoa());%>"
/>
<input type="button" name="Btn_Entrar" value="Alterar"
onClick="Validar(document.Formulario);" >
</td>
<td> </td>
</tr>
<tr>
Benefrancis do Nascimento
SISTEMA WEB
200
<td colspan="2">
<%
}
} catch (Exception e) {
out.print("<br>");
out.print("<center><font face='verdana' color='red' size='2'>Erro ao
cadastrar</font></center>");
out.print("<center><font face='verdana' color='red' size='2'>" + e.getMessage() +
"</font></center>");
}
%>
</td>
</tr>
<tr>
<td colspan="2">
<jsp:include page="../geral/rodape.jsp" />
</td>
</tr>
</table>
</form>
</body>
</html>
Figure 5 ‐ Código fonte da página editar_pessoa
Benefrancis do Nascimento
SISTEMA WEB
201
Layoutdapáginaeditar_pessoa.jsp
Abaixo o layout da página editar_pessoa.jsp
Figure 6 ‐ Layout da página editar_pessoa.jsp
Excluir_pessoa.jspA página excluir_pessoa.jsp do diretório consultas solicita a confirmação da exclusão de uma
pessoa, animais e serviços relacionados àquela pessoa. Veja abaixo o código fonte.
Benefrancis do Nascimento
SISTEMA WEB
202
<%@page contentType="text/html" pageEncoding="UTF‐8"%>
<%@page import="br.com.benefrancis.controle.*" %>
<%@page import="br.com.benefrancis.util.Util" %>
<%@ page import="java.util.List"%>
<%@ page import="java.util.ArrayList"%>
<%@ page import="java.util.ListIterator" %>
<!DOCTYPE HTML PUBLIC "‐//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<jsp:include page="../geral/head.jsp" />
<body>
<table width="750" border="0" cellpadding="0" cellspacing="0" align="center">
<tr>
<td colspan="2">
<jsp:include page="../geral/topo.jsp" />
</td>
</tr>
<tr>
<td colspan="2">
<%
int op = 0;
int idPessoa = 0;
Pessoa p = null;
try {
if (!request.getParameter("op").isEmpty()) {
Benefrancis do Nascimento
SISTEMA WEB
203
op = Integer.parseInt(request.getParameter("op"));
}
} catch (Exception ex) {
ex.printStackTrace();
}
try {
if (!request.getParameter("idPessoa").isEmpty()) {
idPessoa = Integer.parseInt(Util.SoNumero(request.getParameter("idPessoa")));
}
} catch (Exception ex) {
ex.printStackTrace();
}
p = Pessoa.consultar(idPessoa);
try {
if (op == 1 && idPessoa > 0) { //Op =1 : Deletar
p.excluir(p);
out.print("<br>");
out.print("<br>");
out.print("<br>");
out.print("<center><font face='verdana' color='blue' size='2'>Registro excluído
com sucesso</font></center>");
out.print("<br>");
out.print("<br>");
out.print("<br>");
} else {%>
<table border="0" width="100%">
Benefrancis do Nascimento
SISTEMA WEB
204
<thead>
<tr class="TextoTit" align="center">
<th colspan="2" height="50">Esta operação excluirá
<%out.print(p.getNome());%>, seus animais de estimação e serviços realizados do sistema.
</th>
</tr>
</thead>
<tbody>
<tr class="TextoTit">
<td colspan="2"align="center" height="60">Confirma a exclusão?</td>
</tr>
<tr align="center" >
<td width="50%" align="right" height="150"><form
action="excluir_pessoa.jsp" method="post" name="Formulario"> <input type="hidden"
name="op" value="1"><input type="hidden" name="idPessoa"
value="<%out.print(p.getIdPessoa());%>"> <input type="submit" name="btn_sim"
value="SIM"> </form></td>
<td width="50%" align="left" height="150"><form
action="../consultas/pessoa.jsp" method="post" name="Formulario"> <input
type="submit" name="btn_sim" value="NÃO" > </form></td>
</tr>
</tbody>
</table>
<%
}
} catch (Exception e) {
out.print("<br>");
out.print("<center><font face='verdana' color='red' size='2'>Erro ao
excluir</font></center>");
Benefrancis do Nascimento
SISTEMA WEB
205
out.print("<center><font face='verdana' color='red' size='2'>" + e.getMessage() +
"</font></center>");
}
%>
<tr>
<td colspan="2">
<jsp:include page="../geral/rodape.jsp" />
</td>
</tr>
</table>
</body>
</html>
Figure 7 ‐ código fonte da página excluir_pessoa.jsp
Benefrancis do Nascimento
SISTEMA WEB
206
Layoutdapáginaexcluir_pessoa.jsp
Abaixo, o layout da página excluir_pessoa.jsp.
Figure 8 ‐ Layout da página excluir_pessoa.jsp
Animal.jsp
A página animal.jsp do diretório de consultas lista todos os animais registrados no sistema.
Apresenta link para inserir um serviço, detalhar, alterar e excluir.
Abaixo, o código fonte da página animal.jsp.
Benefrancis do Nascimento
SISTEMA WEB
207
<%@page contentType="text/html" pageEncoding="UTF‐8"%>
<%@page import="br.com.benefrancis.controle.*" %>
<%@page import="br.com.benefrancis.util.Util" %>
<%@page import="java.util.List" %>
<%@page import="java.util.ListIterator" %>
<%@page import="java.util.ArrayList" %>
<%
//Lista de animais
List<Animal> pList = new ArrayList<Animal>();
%>
<!DOCTYPE HTML PUBLIC "‐//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<jsp:include page="../geral/head.jsp" />
<body>
<table width="750" border="0" cellpadding="0" cellspacing="0" align="center">
<tr>
<td colspan="2">
<jsp:include page="../geral/topo.jsp" />
</td>
</tr>
<tr>
<td height="22" colspan="2" valign="top"
class="Txt"><strong>ANIMAIS</strong></td>
</tr>
<tr>
Benefrancis do Nascimento
SISTEMA WEB
208
<td colspan="2"> </td>
</tr>
<tr>
<td colspan="2">
</td>
</tr>
<tr>
<td colspan="2"><hr size="1"></td>
</tr>
<tr>
<td colspan="2">
<table border="0" width="100%">
<thead>
<tr class="TopoTit">
<th>NOME</th>
<th>NASCIMENTO</th>
<th>TIPO</th>
<th>RAÇA</th>
<th>QTD SERVIÇOS</th>
<th>AÇÕES</th>
</tr>
</thead>
<tbody>
<%
pList = (List<Animal>) Animal.consultar();
Benefrancis do Nascimento
SISTEMA WEB
209
for (ListIterator iter = pList.listIterator(); iter.hasNext();) {
Animal achei = (Animal) iter.next();
%>
<tr class="Txt" >
<td><%out.print(achei.getNome());%></td>
<td><%out.print(achei.getDataNascimento().toLocaleString().substring(0,
10));%></td>
<td><%out.print(achei.getDescricao());%></td>
<td><%out.print(achei.getRaca());%></td>
<td align="center">
<%
List<Servico> servicos = (List<Servico>)Servico.consultar(achei);
out.print(servicos.size());
%>
</td>
<td class="Txt" align="center">
<%
int idPessoa = achei.getPessoa().getIdPessoa();
%>
<table border="0" align="center" cellpadding="2" cellspacing="2"
width="100%">
<tr align="center" valign="middle">
<td>
<a
href="../servicos/registrar.jsp?op=2&idPessoa=<%out.print(idPessoa);%>&idAnimal=
<%out.print(achei.getIdAnimal());%>">
<img src="../images/img_cesto.png" width="30" height="30"
Benefrancis do Nascimento
SISTEMA WEB
210
alt="Incluir serviço" title="Incluir serviço" border="0"/>
</a>
</td>
<td>
<a
href="../consultas/detalhe_animal.jsp?idAnimal=<%out.print(achei.getIdAnimal());%>">
<img src="../images/img_lupa_transparente.png" width="30"
height="30" alt="consultar" title="consultar" border="0"/>
</a>
</td>
<td>
<a
href="../consultas/editar_animal.jsp?op=1&idAnimal=<%out.print(achei.getIdAnimal());%
>">
<img src="../images/img_caderno_transparente.png" width="30"
height="30" alt="editar" title="editar" border="0"/>
</a>
</td>
<td>
<a
href="../consultas/excluir_animal.jsp?idAnimal=<%out.print(achei.getIdAnimal());%>">
<img src="../images/img_lixeira_transparente.png" width="30"
height="30" alt="excluir" title="excluir" border="0"/>
</a>
</td>
</tr>
</table>
Benefrancis do Nascimento
SISTEMA WEB
211
</td>
</tr>
<%}%>
</tbody>
</table>
<jsp:include page="../geral/rodape.jsp" />
</td>
</tr>
</table>
</body>
</html>
Figure 9 ‐ código fonte da página animal.jsp ‐ diretório consultas
Benefrancis do Nascimento
SISTEMA WEB
212
Layoutdapáginaanimal.jsp
Abaixo, o layout da página animal.jsp, presente no diretório consultas.
Figure 10 ‐ Layout da página animal.jsp
detalhe_animal.jsp
Abaixo, o código da página detalhe_animal.jsp presente no diretório consultas.
Benefrancis do Nascimento
SISTEMA WEB
213
<%@page contentType="text/html" pageEncoding="UTF‐8"%>
<%@page import="br.com.benefrancis.controle.*" %>
<%@page import="br.com.benefrancis.util.Util" %>
<%@page import="java.util.List" %>
<%@page import="java.util.ListIterator" %>
<%@page import="java.util.ArrayList" %>
<%@page import="java.util.Date" %>
<!DOCTYPE HTML PUBLIC "‐//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<jsp:include page="../geral/head.jsp" />
<body>
<form action="animal.jsp" method="post" name="Formulario" >
<table width="750" border="0" cellpadding="0" cellspacing="0" align="center">
<tr>
<td colspan="2">
<jsp:include page="../geral/topo.jsp" />
</td>
</tr>
<tr>
<td height="22" colspan="2" valign="top" class="Txt"><strong>DETALHAMENTO
DO ANIMAL DE ESTIMAÇÃO</strong></td>
</tr>
<%
Animal animal;
int idAnimal = 0;
Benefrancis do Nascimento
SISTEMA WEB
214
try {
try {
idAnimal = Integer.parseInt(Util.SoNumero(request.getParameter("idAnimal")));
animal = Animal.consultar(idAnimal);
} catch (Exception ex) {
throw new RuntimeException("Erro ao construir o Objeto animal");
}
%>
<tr>
<td colspan="2"> </td>
</tr>
<tr>
<td colspan="2">
</td>
</tr>
<%
Pessoa pessoa = Pessoa.consultar(animal.getPessoa().getIdPessoa());
%>
<tr>
<td width="20%" class="TopoTit">Dono do animal</td>
<td width="80%" class="TextoTit">
<% out.print(pessoa.getNome());%>
</td>
</tr>
<tr>
Benefrancis do Nascimento
SISTEMA WEB
215
<td height="104" colspan="2" valign="top">
<table width="100%" border="0" cellpadding="0" cellspacing="0"
align="center">
<tr>
<td colspan="2"><hr size="1"></td>
</tr>
<tr>
<td height="22" colspan="2" valign="top"
class="Txt"><strong>ANIMAL</strong></td>
</tr>
<tr>
<td colspan="2">
<table width="100%" border="0" cellpadding="0" cellspacing="0"
align="center">
<tr>
<td width="162" class="Txt">Tipo</td>
<td width="436" class="Txt">
<%out.print(animal.getDescricao());%>
</td>
</tr>
<tr>
<td width="162" height="27" valign="top" class="Txt">Nome</td>
<td width="436" valign="top" class="Txt">
<%out.print(animal.getNome());%>
</td>
</tr>
<tr>
Benefrancis do Nascimento
SISTEMA WEB
216
<td height="27" valign="top" class="Txt">Raça</td>
<td valign="top" class="Txt">
<%out.print(animal.getRaca());%>
</td>
</tr>
<tr>
<td height="27" valign="top" class="Txt">Data de Nascimento</td>
<td valign="top" class="Txt">
<%out.print(animal.getDataNascimento().toLocaleString().substring(0, 10));%>
</td>
</tr>
<tr>
<td height="27" valign="top" class="Txt">Sexo</td>
<td valign="top" class="Txt">
<%out.print(animal.getSexo());%>
<td>
</tr>
<tr>
<td height="27" valign="top" class="Txt">Observacao</td>
<td valign="top" class="Txt">
<%out.print(animal.getObservacao());%>
<td>
</tr>
<tr>
<td colspan="2"> </td>
Benefrancis do Nascimento
SISTEMA WEB
217
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
</table>
<% } catch (Exception ex) {
ex.printStackTrace();
out.print("<br>");
out.print("<br><center><font face='verdana' color='red' size='2'><br
/>Erro ao consultar o animal</font></center><br>");
out.print(ex.getMessage());
out.print("<br>");
out.print("<br>");
} %>
<jsp:include page="../geral/rodape.jsp" />
</td>
</tr>
</table>
</form>
</body>
</html>
Figure 11 ‐ O código da página detalhe_animal.jsp
Benefrancis do Nascimento
SISTEMA WEB
218
Layoutdapáginadetalhe_animal.jsp
Veja abaixo o layout da página detalhe animal.jsp
Figure 12 ‐ layout da página detalhe_animal.jsp
Editar_animal.jsp
Codificaremos agora a página editar_animal.jsp que deverá estar na pasta consultas.
Benefrancis do Nascimento
SISTEMA WEB
219
<%@page contentType="text/html" pageEncoding="UTF‐8"%>
<%@page import="br.com.benefrancis.controle.*" %>
<%@page import="br.com.benefrancis.util.Util" %>
<%@page import="java.util.List" %>
<%@page import="java.util.ListIterator" %>
<%@page import="java.util.ArrayList" %>
<%@page import="java.util.Date" %>
<%
//Iniciando variaveis
int op = 0;
int idPessoa = 0;
int idAnimal = 0;
//verificando a variável op enviada pelo formulário:
try {
op = Integer.parseInt(Util.SoNumero(request.getParameter("op")));
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException("Não foi informada a operação desejada!");
}
try {
idAnimal = Integer.parseInt(Util.SoNumero(request.getParameter("idAnimal")));
Benefrancis do Nascimento
SISTEMA WEB
220
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException("É necessário informar o id do animal!");
}
//Listando pessoas
List<Pessoa> pList = new ArrayList<Pessoa>();
Animal animal;
%>
<!DOCTYPE HTML PUBLIC "‐//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<jsp:include page="../geral/head.jsp" />
<body>
<form action="editar_animal.jsp" method="post" name="Formulario" >
<table width="750" border="0" cellpadding="0" cellspacing="0" align="center">
<tr>
<td colspan="2">
<jsp:include page="../geral/topo.jsp" />
</td>
</tr>
<tr>
<td height="22" colspan="2" valign="top" class="Txt"><strong>ATUALIZAÇÃO DE
ANIMAL DE ESTIMAÇÃO</strong></td>
</tr>
<tr>
Benefrancis do Nascimento
SISTEMA WEB
221
<td colspan="2">
<%
try {
animal = Animal.consultar(idAnimal);
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException("Animal não encontrado");
}
%>
</td>
</tr>
<tr>
<td ></td>
</tr>
<%if (op != 2) {%>
<tr>
<td colspan="2">
<table width="750" border="0" cellpadding="0" cellspacing="0" align="center">
<tr>
<td width="23%" class="Txt">Dono do animal</td>
<td width="77%" class="Txt">
<select name="idPessoa">
<option value="0"> Selecione </option>
<%
Benefrancis do Nascimento
SISTEMA WEB
222
pList = Pessoa.consultar();
for (ListIterator iter = pList.listIterator(); iter.hasNext();) {
Pessoa achei = (Pessoa) iter.next();
%>
<option value="<% out.print(achei.getIdPessoa());%>" <%if
(animal.getPessoa().getIdPessoa() == achei.getIdPessoa()) {%> selected="true" <%}%> ><%
out.print(achei.getNome());%></option>
<%
}
%>
</select>
</td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
<tr>
<td colspan="2"><hr size="1"></td>
</tr>
</table>
</td>
</tr>
Benefrancis do Nascimento
SISTEMA WEB
223
<%}%>
<% if (op == 1) {%>
<tr>
<td colspan="2">
<table width="750" border="0" cellpadding="0" cellspacing="0" align="center">
<tr>
<td height="22" colspan="2" valign="top"
class="Txt"><strong>ANIMAL</strong></td>
</tr>
<tr>
<td colspan="2">
<table width="100%" border="0" cellpadding="0" cellspacing="0"
align="center">
<tr>
<td width="162" class="Txt">Tipo</td>
<td width="436" class="Txt">
<select name="tipoAnimal" id="tipoAnimal">
<option value="1" <%if (animal.getTipo()==1) {%>
selected="true" <%}%> >Cachorro</option>
<option value="2" <%if (animal.getTipo()==2) {%>
selected="true" <%}%> >Gato</option>
</select>
</td>
</tr>
<tr>
<td width="162" height="27" valign="top" class="Txt">Nome</td>
Benefrancis do Nascimento
SISTEMA WEB
224
<td width="436" valign="top" class="Txt">
<input value="<%out.print(animal.getNome());%>" name="nome"
type="text" id="nome" size="50" maxlength="100">
<span class="style1">*</span></td>
</tr>
<tr>
<td height="27" valign="top" class="Txt">Raça</td>
<td valign="top" class="Txt">
<input value="<%out.print(animal.getRaca());%>" name="raca"
type="text" id="raca" size="24" maxLength="50" >
</td>
</tr>
<tr>
<td height="27" valign="top" class="Txt">Data de Nascimento</td>
<td valign="top" class="Txt">
<input
value="<%out.print(animal.getDataNascimento().toLocaleString().substring(0, 10));%>"
name="dataNascimento" type="text" size="11" maxLength="10"
OnKeyPress="formatar(this, '##/##/####')" onKeyUp="javascript:Sonumero(this)">
</td>
</tr>
<tr>
<td height="27" valign="top" class="Txt">Sexo</td>
<td valign="top" class="Txt">
<select name="sexo" id="sexo">
<option value="M" <%if (animal.getSexo() == 'M') {%>
selected="true" <%}%> >Macho</option>
<option value="F" <%if (animal.getSexo() == 'F') {%>
Benefrancis do Nascimento
SISTEMA WEB
225
selected="true" <%}%> >Femea</option>
</select>
<td>
</tr>
<tr>
<td height="27" valign="top" class="Txt">Observacao</td>
<td valign="top" class="Txt">
<textarea name="observacao" rows="4" cols="50">
<%
if (animal.getObservacao() != null) {
out.print(animal.getObservacao());
}
%>
</textarea>
<td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
Benefrancis do Nascimento
SISTEMA WEB
226
<tr>
<td class="Txt" width="23%"> </td>
<td class="Txt" width="77%">
<input type="hidden" name="op" value="2" />
<input type="hidden" name="idAnimal"
value="<%out.print(animal.getIdAnimal());%>" />
<input type="button" name="Btn_Entrar" value="Alterar"
onClick="ValidarAnimal(document.Formulario);" >
</td>
</tr>
<tr>
<td colspan="2">
<jsp:include page="../geral/rodape.jsp" />
</td>
</tr>
</table>
</td>
</tr>
<%} else if (op == 2) {%>
<tr>
<td colspan="2">
<%
//Declarando variáveis
//Pessoa
Benefrancis do Nascimento
SISTEMA WEB
227
Pessoa pessoa = null;
//Animal
int tipoAnimal = 0;
String nome = null;
String raca = null;
String dataNascimento = null;
String sexo = null;
String observacao = null;
//Tipo, nome, data de nascimento e sexo são obrigatórios
try {
try {
idPessoa =
Integer.parseInt(Util.SoNumero(request.getParameter("idPessoa")));
pessoa = Pessoa.consultar(idPessoa);
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException("Erro ao construir o Objeto pessoa");
}
try {
tipoAnimal =
Integer.parseInt(Util.SoNumero(request.getParameter("tipoAnimal")));
if (tipoAnimal == 0) {
throw new RuntimeException("Selecione o Tipo do animal");
} else {
Benefrancis do Nascimento
SISTEMA WEB
228
animal.setTipo(tipoAnimal);
}
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException("Erro ao pegar o tipo do animal");
}
try {
nome = request.getParameter("nome");
if (nome == null || nome == "" || nome == "0") {
throw new RuntimeException("Informe o nome do animal");
} else {
animal.setNome(nome);
}
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException("Erro ao capturar o nome do animal");
}
try {
raca = request.getParameter("raca");
animal.setRaca(raca);
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException("Erro ao capturar a raça do animal");
}
Benefrancis do Nascimento
SISTEMA WEB
229
try {
dataNascimento = request.getParameter("dataNascimento");
//validar data e construir um objeto Date() caso a data seja válida
if (dataNascimento == null || dataNascimento == "" || dataNascimento
== "0") {
throw new RuntimeException("Informe a data de nascimento do
animal");
} else if (Util.validarData(dataNascimento) != true) {
throw new RuntimeException("A data de nascimento do animal é
inválida");
} else {
animal.setDataNascimento(new Date(dataNascimento));
}
} catch (Exception ex) {
ex.printStackTrace();
}
try {
sexo = request.getParameter("sexo");
if (sexo == null || sexo == "" || sexo == "0") {
throw new RuntimeException("Informe o sexo do animal");
} else {
animal.setSexo(sexo.charAt(0));
}
} catch (Exception ex) {
ex.printStackTrace();
Benefrancis do Nascimento
SISTEMA WEB
230
throw new RuntimeException("Informe o sexo do animal");
}
try {
observacao = request.getParameter("observacao");
if (observacao != "") {
animal.setObservacao(observacao.trim());
}
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException("Erro ao pegar o parâmetro Observação");
}
animal.setIdAnimal(idAnimal);
animal.setPessoa(pessoa);
Animal.alterar(animal);
out.print("<br><center><font face='verdana' color='blue' size='2'><br
/>Animal atualizado com sucesso em nosso banco de dados</font></center><br>");
} catch (Exception ex) {
ex.printStackTrace();
out.print("<br>");
out.print("<br>");
out.print("<br>");
out.print("<br><center><font face='verdana' color='red' size='2'><br
/>Erro ao atualizar dados do animal</font></center><br>");
out.print("<br><center><font face='verdana' color='red' size='2'><br />" +
ex.getMessage() + "</font></center><br>");
out.print("<br>");
out.print("<br>");
Benefrancis do Nascimento
SISTEMA WEB
231
}
%>
<jsp:include page="../geral/rodape.jsp" />
</td>
<tr>
<% }//fim do if de op%>
</table>
</form>
</body>
</html>
Figure 13 – código fonte da página editar_animal.jsp
Benefrancis do Nascimento
SISTEMA WEB
232
Layoutdapáginaeditar_animal.jsp
Veja o layout da página editar_animal.jsp.
Figure 14 ‐ Layout da página editar_animal.jsp
Excluir_animal.jsp
Segue o código fonte da página que exclui um animal do sistema.
Benefrancis do Nascimento
SISTEMA WEB
233
<%@ page contentType="text/html" pageEncoding="UTF‐8"%>
<%@ page import="br.com.benefrancis.controle.*" %>
<%@ page import="br.com.benefrancis.util.Util" %>
<%@ page import="java.util.List"%>
<%@ page import="java.util.ArrayList"%>
<%@ page import="java.util.ListIterator" %>
<!DOCTYPE HTML PUBLIC "‐//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<jsp:include page="../geral/head.jsp" />
<body>
<table width="750" border="0" cellpadding="0" cellspacing="0" align="center">
<tr>
<td colspan="2">
<jsp:include page="../geral/topo.jsp" />
</td>
</tr>
<tr>
<td colspan="2">
<%
int op = 0;
Benefrancis do Nascimento
SISTEMA WEB
234
int idAnimal = 0;
Animal a = null;
try {
if (!request.getParameter("op").isEmpty()) {
op = Integer.parseInt(request.getParameter("op"));
}
} catch (Exception ex) {
ex.printStackTrace();
}
try {
if (!request.getParameter("idAnimal").isEmpty()) {
idAnimal =
Integer.parseInt(Util.SoNumero(request.getParameter("idAnimal")));
}
} catch (Exception ex) {
ex.printStackTrace();
}
a = Animal.consultar(idAnimal);
try {
if (op == 1 && idAnimal > 0) { //Op =1 : Deletar
Animal.excluir(a);
out.print("<br>");
out.print("<br>");
Benefrancis do Nascimento
SISTEMA WEB
235
out.print("<br>");
out.print("<center><font face='verdana' color='blue' size='2'>Registro
excluído com sucesso</font></center>");
out.print("<br>");
out.print("<br>");
out.print("<br>");
%>
<%} else {%>
<table border="0" width="100%">
<thead>
<tr class="TextoTit" align="center">
<th colspan="2" height="50">Esta operação excluirá o
<%out.print(a.getDescricao());%> de <font
color="blue"><%out.print(a.getPessoa().getNome());%> </font> chamado:<font color="blue">
<%out.print(a.getNome());%> </font> </th>
</tr>
</thead>
<tbody>
<tr class="TextoTit">
<td colspan="2"align="center" height="60">Confirma a exclusão?</td>
</tr>
<tr align="center" >
<td width="50%" align="right" height="150"><form
action="excluir_animal.jsp" method="post" name="Formulario"> <input type="hidden"
name="op" value="1"><input type="hidden" name="idAnimal"
value="<%out.print(a.getIdAnimal());%>"> <input type="submit" name="btn_sim"
value="SIM"> </form></td>
<td width="50%" align="left" height="150"><form
action="../consultas/animal.jsp" method="post" name="Formulario"> <input
Benefrancis do Nascimento
SISTEMA WEB
236
type="submit" name="btn_sim" value="NÃO" > </form></td>
</tr>
</tbody>
</table>
<%
}
} catch (Exception e) {
out.print("<br>");
out.print("<center><font face='verdana' color='red' size='2'>Erro ao
excluir </font></center>");
out.print("<center><font face='verdana' color='red' size='2'>" +
e.getMessage() + "<br>" + e.getCause() + "</font></center>");
}
%>
</td>
</tr>
<tr>
<td colspan="2">
<jsp:include page="../geral/rodape.jsp" />
</td>
</tr>
</table>
</body>
</html>
Figure 15 ‐ código fonte da página excluir_animal.jsp
Benefrancis do Nascimento
SISTEMA WEB
237
Layoutdapáginaexcluir_animal.jsp
Veja abaixo o layout da página excluir_animal.jsp.
Figure 16 ‐ Layout da página excluir_animal.jsp
servico.jsp
A página servico.jsp do diretório de consultas lista todos os serviços realizados que estão
registrados no sistema. Apresenta link para detalhar, alterar e excluir.
Abaixo, o código fonte da página servico.jsp.
Benefrancis do Nascimento
SISTEMA WEB
238
<%@page contentType="text/html" pageEncoding="UTF‐8"%>
<%@ page import="br.com.benefrancis.controle.*" %>
<%@ page import="br.com.benefrancis.util.Util" %>
<%@page import="java.util.List" %>
<%@page import="java.util.ListIterator" %>
<%@page import="java.util.ArrayList" %>
<%
List<Servico> sList = new ArrayList<Servico>();
String data = "";
%>
<!DOCTYPE HTML PUBLIC "‐//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<jsp:include page="../geral/head.jsp" />
<body>
<table width="750" border="0" cellpadding="0" cellspacing="0" align="center">
<tr>
<td colspan="2">
<jsp:include page="../geral/topo.jsp" />
</td>
</tr>
<tr>
<td height="22" colspan="2" valign="top" class="Txt"><strong>SERVIÇOS
REALIZADOS</strong></td>
</tr>
<tr>
Benefrancis do Nascimento
SISTEMA WEB
239
<td colspan="2"> </td>
</tr>
<tr>
<td colspan="2">
</td>
</tr>
<tr>
<td colspan="2"><hr size="1"></td>
</tr>
<tr>
<td colspan="2">
<table border="0" width="100%">
<thead>
<tr class="TopoTit">
<th>DATA</th>
<th>TIPO</th>
<th>NOME</th>
<th>ANIMAL</th>
<th>VALOR</th>
<th>AÇÕES</th>
</tr>
</thead>
<tbody><%
try {
sList = (List<Servico>)Servico.consultar();
Benefrancis do Nascimento
SISTEMA WEB
240
for (ListIterator iter = sList.listIterator(); iter.hasNext();) {
Servico achei = (Servico) iter.next();
data = achei.getData().toLocaleString().substring(0, 10);
%>
<tr class="Txt" >
<td><%out.print(data);%></td>
<td><%out.print(achei.getNome());%></td>
<td><%out.print(achei.getDescricao());%></td>
<td><% out.print(achei.getAnimal().getNome());%></td>
<td align="right"><%out.print(achei.getValor());%></td>
<td class="Txt" align="center">
<table border="0" align="center" cellpadding="2" cellspacing="2"
width="100%">
<tr align="center" valign="middle">
<td><a
href="../consultas/detalhe_servico.jsp?idServico=<%out.print(achei.getIdServico());%>">
<img src="../images/img_lupa_transparente.png" width="30"
height="30" alt="consultar" title="consultar" border="0"/>
</a>
</td>
<td><a
href="../consultas/editar_servico.jsp?idServico=<%out.print(achei.getIdServico());%>">
<img src="../images/img_caderno_transparente.png"
width="30" height="30" alt="editar" title="editar" border="0"/>
</a>
</td>
<td>
Benefrancis do Nascimento
SISTEMA WEB
241
<a href="../consultas/excluir_servico.jsp?idServico=<%out.print(achei.getIdServico());%>">
<img src="../images/img_lixeira_transparente.png" width="30"
height="30" alt="excluir" title="excluir" border="0"/>
</a>
</td>
</tr>
</table>
</td>
</tr>
<%}
} catch (Exception e) {
out.print("<br>");
out.print("<center><font face='verdana' color='red' size='2'>Erro ao listar
serviços </font></center>");
out.print("<center><font face='verdana' color='red' size='2'>" + e.getMessage()
+ "</font></center>");
}
%>
</tbody>
</table>
<jsp:include page="../geral/rodape.jsp" />
</td>
</tr>
</table>
</body>
</html>
Figure 17 ‐ O código fonte da página servico.jsp
Benefrancis do Nascimento
SISTEMA WEB
242
LayoutdapáginaServiço.jsp
Veja abaixo o layout da página servico.jsp
Figure 18 ‐ Layout da página servico.jsp
detalhe_servico.jsp
Codificaremos agora a página detalhe_servico.jsp.
Benefrancis do Nascimento
SISTEMA WEB
243
<%@page contentType="text/html" pageEncoding="UTF‐8"%>
<%@page import="java.util.*" %>
<%@page import="br.com.benefrancis.controle.*" %>
<%@page import="br.com.benefrancis.util.Util" %>
<!DOCTYPE HTML PUBLIC "‐//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<jsp:include page="../geral/head.jsp" />
<body>
<table width="750" border="0" cellpadding="0" cellspacing="0" align="center">
<tr>
<td colspan="2">
<jsp:include page="../geral/topo.jsp" />
</td>
</tr>
<tr>
<td height="22" colspan="2" valign="top" class="Txt"><strong>DETALHAMENTO DE
SERVIÇO REALIZADO</strong></td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
<tr>
<td colspan="2">
</td>
</tr>
Benefrancis do Nascimento
SISTEMA WEB
244
<tr>
<td height="104" colspan="2" valign="top" >
<form action="registrar.jsp" method="post" name="Formulario" >
<table width="100%" border="0" cellpadding="0" cellspacing="0"
align="center">
<!‐‐DWLayoutTable‐‐>
<tr>
<td colspan="2">
<%
int idServico =
Integer.parseInt(Util.SoNumero(request.getParameter("idServico")));
String data = "";
try {
Servico servico = Servico.consultar(idServico);
data = servico.getData().toLocaleString().substring(0, 10);
%>
<table width="100%" border="0" cellpadding="0" cellspacing="0"
align="center">
<tr >
<td width="20%" class="TopoTit">CLIENTE: </td>
<td class="TextoTit"><%
out.print(servico.getAnimal().getPessoa().getNome());%></td>
</tr>
<tr>
Benefrancis do Nascimento
SISTEMA WEB
245
<td width="20%" class="TopoTit">ANIMAL DE ESTIMAÇÃO: </td>
<td class="TextoTit" ><%
out.print(servico.getAnimal().getNome());%></td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="2"><hr size="1"></td>
</tr>
<tr>
<td height="22" colspan="2" valign="top" class="Txt"><strong>SERVIÇO
EXECUTADO</strong></td>
</tr>
<tr>
<td colspan="2">
<table width="100%" border="0" cellpadding="0" cellspacing="0"
align="center">
<tr>
<td width="162" class="Txt">Serviço</td>
<td width="436" class="Txt">
<% out.print(servico.getNome());%>
</td>
</tr>
<tr>
<td width="162" height="27" valign="top" class="Txt">Nome /
Descrição </td>
Benefrancis do Nascimento
SISTEMA WEB
246
<td width="436" valign="top" class="Txt">
<% out.print(servico.getNome());%>
</td>
</tr>
<tr>
<td height="27" valign="top" class="Txt">Valor R$ </td>
<td valign="top" class="Txt">
<% out.print(servico.getValor());%>
</td>
</tr>
<tr>
<td height="27" valign="top" class="Txt">Data de execução</td>
<td valign="top" class="Txt">
<% out.print(data);%>
</td>
</tr>
<tr>
<td height="27" valign="top" class="Txt">Observacao</td>
<td valign="top" class="Txt">
<% out.print(servico.getObservacao());%>
<td>
</tr>
<tr>
<td colspan="2"> </td>
Benefrancis do Nascimento
SISTEMA WEB
247
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
</table>
</form>
</td>
</tr>
<tr>
<td class="Txt"> </td>
<td class="Txt">
</td>
</tr>
<tr>
<td colspan="2">
<% } catch (Exception ex) {
ex.printStackTrace();
out.print("<br>");
out.print("<br>");
out.print("<br>");
out.print("<br><center><font face='verdana' color='red' size='2'><br
Benefrancis do Nascimento
SISTEMA WEB
248
/>Erro ao cadastrar o serviço executado</font></center><br>");
out.print("<br><center><font face='verdana' color='red' size='2'><br />"
+ ex.getMessage() + "</font></center><br>");
out.print("<br>");
out.print("<br>");
}
%>
<jsp:include page="../geral/rodape.jsp" />
</td>
</tr>
</table>
</body>
</html>
Figure 19 ‐ Código fonte da página detalhe_servico.jsp
Layoutdapáginadetalhe_servico.jsp
Abaixo o layout da página detalhe_servico.jsp.
Benefrancis do Nascimento
SISTEMA WEB
249
Figure 20 ‐ Layout da página detalhe_servico.jsp
Editar_servico.jsp
Codificaremos agora a página editar_servico.jsp.
Benefrancis do Nascimento
SISTEMA WEB
250
<%@page contentType="text/html" pageEncoding="UTF‐8"%>
<%@page import="java.util.*" %>
<%@ page import="br.com.benefrancis.controle.*" %>
<%@ page import="br.com.benefrancis.util.Util" %>
<!DOCTYPE HTML PUBLIC "‐//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<jsp:include page="../geral/head.jsp" />
<body>
<table width="750" border="0" cellpadding="0" cellspacing="0" align="center">
<tr>
<td colspan="2">
<jsp:include page="../geral/topo.jsp" />
</td>
</tr>
<tr>
<td height="22" colspan="2" valign="top" class="Txt"><strong>DETALHAMENTO DE
SERVIÇO REALIZADO</strong></td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
<tr>
<td colspan="2">
</td>
Benefrancis do Nascimento
SISTEMA WEB
251
</tr>
<tr>
<td height="104" colspan="2" valign="top" >
<form action="editar_servico.jsp" method="post" name="Formulario" >
<table width="100%" border="0" cellpadding="0" cellspacing="0"
align="center">
<!‐‐DWLayoutTable‐‐>
<tr>
<td colspan="2">
<%
int op = 0;
try {
op = Integer.parseInt(Util.SoNumero(request.getParameter("op")));
} catch (Exception e) {
e.printStackTrace();
}
int idServico =
Integer.parseInt(Util.SoNumero(request.getParameter("idServico")));
String data = "";
Servico servico = Servico.consultar(idServico);
data = servico.getData().toLocaleString().substring(0, 10);
try {
Benefrancis do Nascimento
SISTEMA WEB
252
if (op == 0) {
%>
<table width="100%" border="0" cellpadding="0" cellspacing="0"
align="center">
<tr >
<td width="20%" class="TopoTit">CLIENTE: </td>
<td class="TextoTit"><%
out.print(servico.getAnimal().getPessoa().getNome());%></td>
</tr>
<tr>
<td width="20%" class="TopoTit">ANIMAL DE ESTIMAÇÃO: </td>
<td class="TextoTit" ><%
out.print(servico.getAnimal().getNome());%></td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="2"><hr size="1"></td>
</tr>
<tr>
<td height="22" colspan="2" valign="top" class="Txt"><strong>SERVIÇO
EXECUTADO</strong></td>
</tr>
<tr>
<td colspan="2">
Benefrancis do Nascimento
SISTEMA WEB
253
<table width="100%" border="0" cellpadding="0" cellspacing="0"
align="center">
<tr>
<td width="162" class="Txt">Serviço</td>
<td width="436" class="Txt">
<select name="servico" id="servico">
<option value="Consulta" <%if
(servico.getNome().equals("Consulta")) {%> selected="true" <%}%> >Consulta
Veterinária</option>
<option value="Banho" <%if
(servico.getNome().equals("Banho")) {%> selected="true" <%}%> >Banho</option>
<option value="Tosa" <%if (servico.getNome().equals("Tosa"))
{%> selected="true" <%}%> >Tosa</option>
<option value="Vacina" <%if
(servico.getNome().equals("Vacina")) {%> selected="true" <%}%> >Vacina</option>
</select>
</td>
</tr>
<tr>
<td width="162" height="27" valign="top" class="Txt">Nome /
Descrição </td>
<td width="436" valign="top" class="Txt">
<input name="nome" value="<%
out.print(servico.getNome());%>"type="text" id="nome" size="50" maxlength="100">
</td>
</tr>
<tr>
<td height="27" valign="top" class="Txt">Valor R$ </td>
<td valign="top" class="Txt">
Benefrancis do Nascimento
SISTEMA WEB
254
<input name="valor" value="<% out.print(servico.getValor());%>"
type="text" size="11" maxLength="10" onKeyUp="javascript:Sonumero(this)">
</td>
</tr>
<tr>
<td height="27" valign="top" class="Txt">Data de execução</td>
<td valign="top" class="Txt">
<input type="text" value="<% out.print(data);%>" name="data" >
</td>
</tr>
<tr>
<td height="27" valign="top" class="Txt">Observacao</td>
<td valign="top" class="Txt">
<textarea name="observacao" rows="4" cols="50"><%
if (servico.getObservacao() != null && servico.getObservacao() != "" &&
servico.getObservacao() != "null") {
out.print(servico.getObservacao().trim());
}%></textarea>
<td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
</table>
</td>
Benefrancis do Nascimento
SISTEMA WEB
255
</tr>
<tr>
<td colspan="2"> </td>
</tr>
<tr>
<td class="Txt" width="23%"> </td>
<td class="Txt" width="77%">
<input type="hidden" name="op" value="3" />
<input type="hidden" name="idAnimal" value="<%
out.print(servico.getAnimal().getIdAnimal());%>" />
<input type="hidden" name="idServico" value="<%
out.print(servico.getIdServico());%>" />
<input type="button" name="Btn_Entrar" value="Alterar"
onClick="ValidarRegistro(document.Formulario);" >
</td>
</tr>
</table>
</form>
</td>
</tr>
<tr>
<td class="Txt"> </td>
<td class="Txt">
<%
} else if (op == 3) {
String servicoEscolhido = "";
String nome = "";
Benefrancis do Nascimento
SISTEMA WEB
256
int periodicidade = 0;
String novaData = "";
//Criando um objeto serviço
servicoEscolhido = request.getParameter("servico");
novaData = request.getParameter("data");
servico = Servico.consultar(servico.getIdServico());
if (Util.validarData(novaData)) {
servico.setData(new Date(novaData));
}
try {
nome = request.getParameter("nome");
if (nome == null || nome == "" || nome == "0") {
throw new RuntimeException("Informe o nome ou descrição do serviço efetuado");
} else {
servico.setNome(nome);
}
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException("Erro ao pegar o nome do serviço efetuado");
}
double valor = 0;
try {
valor = Double.parseDouble(request.getParameter("valor"));
Benefrancis do Nascimento
SISTEMA WEB
257
servico.setValor(valor);
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException("Informe corretamente o valor do serviço executado");
}
String observacao = null;
try {
observacao = request.getParameter("observacao");
servico.setObservacao(observacao);
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException("Erro ao pegar o nome do serviço efetuado");
}
Servico.alterar(servico);
out.print("<br>");
out.print("<br>");
out.print("<br>");
out.print("<br><center><font face='verdana' color='blue' size='2'><br />Serviço atualizado
com sucesso!</font></center><br>");
out.print("<br>");
out.print("<br>");
} else {
throw new RuntimeException("Operação inválida");
}
Benefrancis do Nascimento
SISTEMA WEB
258
%>
</td>
</tr>
<tr>
<td colspan="2">
<% } catch (Exception ex) {
ex.printStackTrace();
out.print("<br>");
out.print("<br>");
out.print("<br>");
out.print("<br><center><font face='verdana' color='red' size='2'><br
/>Erro ao cadastrar o serviço executado</font></center><br>");
out.print("<br><center><font face='verdana' color='red' size='2'><br />"
+ ex.getMessage() + "</font></center><br>");
out.print("<br>");
out.print("<br>");
}
%>
<jsp:include page="../geral/rodape.jsp" />
</td>
</tr>
</table>
</body>
</html>
Figure 19 ‐ Código fonte da página editar_servico.jsp
Benefrancis do Nascimento
SISTEMA WEB
259
Layoutdapáginaeditar_servico.jsp
Abaixo o layout da página editar_servico.jsp.
Figure 20 ‐ Layout da página editar_servico.jsp
Excluir_servico.jsp
E para finalizar codificaremos a página excluir_servico.jsp
Benefrancis do Nascimento
SISTEMA WEB
260
<%@ page contentType="text/html" pageEncoding="UTF‐8"%>
<%@ page import="br.com.benefrancis.controle.*" %>
<%@ page import="br.com.benefrancis.util.Util" %>
<%@ page import="java.util.List"%>
<%@ page import="java.util.ArrayList"%>
<%@ page import="java.util.ListIterator" %>
<!DOCTYPE HTML PUBLIC "‐//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<jsp:include page="../geral/head.jsp" />
<body>
<table width="750" border="0" cellpadding="0" cellspacing="0" align="center">
<tr>
<td colspan="2">
<jsp:include page="../geral/topo.jsp" />
</td>
</tr>
<tr>
<td colspan="2">
<%
int op = 0;
int idServico = 0;
Servico s = null;
Benefrancis do Nascimento
SISTEMA WEB
261
try {
if (!request.getParameter("op").isEmpty()) {
op = Integer.parseInt(request.getParameter("op"));
}
} catch (Exception ex) {
ex.printStackTrace();
}
try {
if (!request.getParameter("idServico").isEmpty()) {
idServico = Integer.parseInt(Util.SoNumero(request.getParameter("idServico")));
}
} catch (Exception ex) {
ex.printStackTrace();
}
s = Servico.consultar(idServico);
try {
if (op == 1 && idServico > 0) { //Op =1 : Deletar
Servico.excluir(s);
out.print("<br>");
out.print("<br>");
out.print("<br>");
out.print("<center><font face='verdana' color='blue' size='2'>Registro excluído
com sucesso</font></center>");
out.print("<br>");
out.print("<br>");
out.print("<br>");
Benefrancis do Nascimento
SISTEMA WEB
262
} else {%>
<table border="0" width="100%">
<thead>
<tr class="TextoTit" align="center">
<th colspan="2" height="50">Esta operação excluirá o serviço referente <%
out.print(s.getNome() +" ‐ "+s.getDescricao() );%> em <font
color="blue"><%out.print(s.getAnimal().getNome());%> </font> que pertence a <font
color="blue"> <%out.print(s.getAnimal().getPessoa().getNome());%></font> </th>
</tr>
</thead>
<tbody>
<tr class="TextoTit">
<td colspan="2"align="center" height="60">Confirma a exclusão?</td>
</tr>
<tr align="center" >
<td width="50%" align="right" height="150"><form
action="excluir_servico.jsp" method="post" name="Formulario"> <input type="hidden"
name="op" value="1"><input type="hidden" name="idServico"
value="<%out.print(s.getIdServico());%>"> <input type="submit" name="btn_sim"
value="SIM"> </form></td>
<td width="50%" align="left" height="150"><form
action="../consultas/servico.jsp" method="post" name="Formulario"> <input
type="submit" name="btn_sim" value="NÃO" > </form></td>
</tr>
</tbody>
</table>
<%
}
Benefrancis do Nascimento
SISTEMA WEB
263
} catch (Exception e) {
out.print("<br>");
out.print("<center><font face='verdana' color='red' size='2'>Erro ao excluir
</font></center>");
out.print("<center><font face='verdana' color='red' size='2'>" + e.getMessage() +
"<br>" + e.getCause() + "</font></center>");
}
%>
</td>
</tr>
<tr>
<td colspan="2">
<jsp:include page="../geral/rodape.jsp" />
</td>
</tr>
</table>
</body>
</html>
Figure 21 ‐ Código fonte da página excluir_servico.jsp
Benefrancis do Nascimento
SISTEMA WEB
264
Layoutdapáginaexcluir_servico.jsp
Aprento o layout da página excluir_servico.jsp.
Figure 22 ‐ excluir_servico.jsp
Benefrancis do Nascimento
SISTEMA WEB
265
Consideraçõesfinais
Desenvolvemos um sistema completo e funcional utilizando java, hibernate e JSP. Espero que este artigo se torne um material de grande valor aos estudantes e desenvolvedores de sistemas para web. Este material veio para completar o meu artigo sobre MAPEAMENTO OBJETO RELACIONAL COM HIBERNATE.
Lembrando mais uma vez que estou aberto à criticas e sugestões, com objetivo de alimentar o processo de melhoria contínua de meus artigos. O contato deverá ser estabelecido por meio do seguinte endereço eletrônico:
twitter:
@Benefrancis
Skype:
Benefrancis.com
Importante:1 ‐ Conforme lei 9.610/98, que dispõe sobre direitos autorais, a reprodução parcial ou integral
desta obra sem autorização prévia e expressa do autor constitui ofensa aos seus direitos
autorais (art. 29). Em caso de interesse, em editar ou publicar esta obra entre em contato com
o autor do texto.
2 ‐ Entretanto, de acordo com a lei 9.610/98, art. 46, não constitui ofensa aos direitos autorais
a citação de passagens da obra para fins de estudo, crítica ou polêmica, na medida justificada
para o fim a atingir, indicando‐se o nome do autor (Benefrancis do Nascimento) .