Buscar

JavaBeans em Java para Web

Prévia do material em texto

1
Programação em Java 
para Web
JavaBeans
Prof. Razer Anthom Nizer Rojas Montaño
2012
Prof. Razer A N R Montaño Java Web - JavaBeans 2/33
Introdução
� JavaBean é uma classe Java com uma 
padronização nos nomes dos métodos
� Também conhecidos como Beans
� Há o conceito de propriedade que são acessadas 
por estes métodos padronizados
� São componentes de software
� Componentes encapsulados
� Seus atributos só podem ser acessados via 
métodos
� Propriedades (Atributos) privados
� Métodos acessadores públicos
 
 2
Prof. Razer A N R Montaño Java Web - JavaBeans 3/33
Padrão
� Padrão de métodos acessadores
getXxx
isXxx (quando a propriedade é booleana)
setXxx (opcional)
Onde Xxx é o nome do atributo da classe
� Construtor
� Deve ser sem parâmetros
� JavaBeans devem implementar a interface 
Serializable
� Pode conter métodos diversos para realizar outras 
tarefas
Prof. Razer A N R Montaño Java Web - JavaBeans 4/33
Exemplo
import java.io.Serializable;
public class Aluno implements Serializable {
private int idade;
private boolean matriculado;
public Aluno() {
}
public int getIdade() {
return this.idade;
}
public void setIdade(int idade) {
this.idade = idade;
}
public boolean isMatriculado() {
return this.matriculado;
}
public void setMatriculado(boolean matriculado) {
this.matriculado = matriculado;
}
}
 
 3
Prof. Razer A N R Montaño Java Web - JavaBeans 5/33
Persistência
� Porque implementar a interface Serializable?
� Para que o Bean seja persistente
� Implementando esta interface pode-se serializar um 
objeto
� Serialização
� Salvar o objeto em um stream para posterior recuperação
� Quando houver recuperação, o objeto se comporta como 
antes de ser salvo
� O objeto é recuperado no mesmo estado em que foi salvo
Prof. Razer A N R Montaño Java Web - JavaBeans 6/33
Propriedades
� 4 tipos
� Simples: alteram a aparência ou comportamento do 
bean e são acessados pelos seus métodos
� Ligadas: quando a alteração da propriedade provova 
uma notificação a um outro bean
� Reprimidas: a alteração pode ser vetada pelo próprio 
bean ou por objetos externos
� Indexadas: propriedades acessadas via índice, como 
arrays. 
 
 4
Prof. Razer A N R Montaño Java Web - JavaBeans 7/33
Propriedades Indexadas
� Propriedades Indexadas - Vetores:
private int[] numeros;
� Acesso ao vetor inteiro:
public int[] getNumeros();
public void setNumeros(int[] value);
� Acesso a um elemento específico:
public int getNumeros(int index);
public void setNumeros(int index, int value);
Prof. Razer A N R Montaño Java Web - JavaBeans 8/33
Exemplo
import java.io.Serializable;
public class Teste implements Serializable {
private int[] numeros;
public Teste() {
}
public int[] getNumeros() {
return numeros;
}
public void setNumeros(int[] numeros) {
this.numeros = numeros;
}
public int getNumeros(int index) {
return this.numeros[index];
}
public void setNumeros(int index, int value) {
this.numeros[index] = value;
}
}
 
 5
Prof. Razer A N R Montaño Java Web - JavaBeans 9/33
IDEs x JavaBeans
� Beans podem ser lidos por ferramentas IDEs
� Ferramentas disponibilizam o Bean para o 
programador
� Como uma ferramenta consegue ler, 
genericamente, as propriedades de um Bean?
� Java Reflection API
� A ferramenta procura os métodos públicos e liga-os com 
as propriedades
� Após ter o catálogo de propriedades, disponibiliza para 
uso
� Introspecção
� Processo automatizado de leitura um bean para a 
descoberta de suas propriedades, métodos e eventos
Prof. Razer A N R Montaño Java Web - JavaBeans 10/33
Servlets + JavaBeans
� Usar um Bean em um Servlet é muito natural
� Como um Bean é uma classe, seu pacote pode ser 
importado e objetos podem ser criados 
normalmente
� O acesso às propriedades se dá pelos métodos 
setters/getters
� Uso normal, como uma classe qualquer
 
 6
Prof. Razer A N R Montaño Java Web - JavaBeans 11/33
Exemplo Bean: Aluno
package com.cursojava.beans;
import java.io.Serializable;
public class Aluno implements Serializable {
private int idade;
private String nome;
public Aluno() {
}
public int getIdade() {
return this.idade;
}
public void setIdade(int idade) {
this.idade = idade;
}
public String getNome() {
return this.nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}
beans#1
Prof. Razer A N R Montaño Java Web - JavaBeans 12/33
Exemplo: Uso do Bean Aluno
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import com.cursojava.beans.Aluno;
public class Teste extends HttpServlet {
 public void doGet(HttpServletRequest req, 
 HttpServletResponse resp) 
 throws ServletException, IOException {
 Aluno a = new Aluno();
 a.setNome("Razer");
 PrintWriter out = resp.getWriter();
 resp.setContentType("text/html");
 out.println("<html><head><title>Teste</title></head><body>");
 out.println("Teste de JavaBeans: " + a.getNome());
 out.println("</body></html>");
 out.flush();
 }
}
beans#1
 
 7
Prof. Razer A N R Montaño Java Web - JavaBeans 13/33
JSP + JavaBeans
� Uso em JSP através de tags
<jsp:useBean id="nome" class="pacote.Classe" />
� Onde
� id: identificador da variável que irá referenciar o 
Bean
� class: é o nome da classe, contendo nome do 
pacote
� Se o bean já existir, referencia-o para uso
� Se o bean não existir, cria-o
Prof. Razer A N R Montaño Java Web - JavaBeans 14/33
JSP + JavaBeans
� Para setar uma propriedade de um Bean:
<jsp:useBean id="aluno" class="com.cursojava.Aluno" />
<jsp:setProperty name="aluno" property="nome" value="Razer" />
� Onde
� name: identificador do Bean
� property: é o nome da propriedade a ser setada
� value: valor que a propriedade receberá. Os dados são 
automaticamente convertidos
� Comportamento
� Colocará o valor �Razer� na propriedade �nome� do Bean 
�aluno� (com.cursojava.Aluno)
� Equivale a:
aluno.setNome("Razer");
 
 8
Prof. Razer A N R Montaño Java Web - JavaBeans 15/33
JSP + JavaBeans
� Se quiser que o setProperty seja condicional
� Se o bean já existir, não sobrescrever a propriedade
� Se o bean não existir, cria e inicializa a propriedade
� Use-se useBean com corpo
<jsp:useBean id="aluno" class="com.cursojava.Aluno" >
 <jsp:setProperty name="aluno" property="nome" value="Razer" />
</jsp:useBean>
Prof. Razer A N R Montaño Java Web - JavaBeans 16/33
JSP + JavaBeans
� Para obter o valor de uma propriedade de um Bean:
<jsp:useBean id="aluno" class="com.cursojava.Aluno" />
<jsp:getProperty name="aluno" property="nome" />
� Onde
� name: identificador do Bean
� property: é o nome da propriedade a ser lida
� Comportamento
� Na posição em que for colocado, a tag será substituída pelo 
valor da propriedade �nome� do Bean �aluno�
� Equivale a:
out.println( aluno.getNome() );
 
 9
Prof. Razer A N R Montaño Java Web - JavaBeans 17/33
Exemplo Bean: Aluno
package com.cursojava.beans;
import java.io.Serializable;
public class Aluno implements Serializable {
private int idade;
private String nome;
public Aluno() {
}
public int getIdade() {
return this.idade;
}
public void setIdade(int idade) {
this.idade = idade;
}
public String getNome() {
return this.nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}
beans#2
Prof. Razer A N R Montaño Java Web - JavaBeans 18/33
Exemplo: JSP
<html>
<head><title>Teste de Bean</title></head>
<body>
 <jsp:useBean id="aluno" class="com.cursojava.beans.Aluno" />
 <jsp:setProperty name="aluno" property="nome" 
value="Razer" />
 <h1>Nome do aluno:</h1>
 <h2><jsp:getProperty name="aluno" property="nome" /></h2>
</body>
</html>
beans#2
 
 10
Prof. Razer A N R Montaño Java Web - JavaBeans 19/33
Preenchimento através 
dos Parâmetros
� Se o JSP é invocado diretamente, sem passar por 
um Servlet
<html>
<head><title>Teste</title></head>
<body>
 <form action=�teste.jsp�>
 Nome: <input type=�text� name=�usuario�/>
 <input type=�submit�value=�Enviar�/>
 </form>
</body>
</html>
Prof. Razer A N R Montaño Java Web - JavaBeans 20/33
Preenchimento através 
dos Parâmetros
� Para se obter os dados passados em teste.jsp, 
pode-se (PODE, MAS NÃO DEVE) usar Scriptlet 
para setar uma propriedade:
<jsp:useBean id="p" class="pacote.Pessoa" />
<% p.setNome(request.getParameter(�usuario�)); %>
 
 11
Prof. Razer A N R Montaño Java Web - JavaBeans 21/33
Preenchimento através 
dos Parâmetros
� Ou pode-se usar setProperty com scriptlet 
(Argh!)
<jsp:useBean id="p" class="pacote.Pessoa" />
<jsp:setProperty name="p" property="nome"
 value="<%=request.getParameter("usuario") %>" />
Prof. Razer A N R Montaño Java Web - JavaBeans 22/33
Preenchimento através 
dos Parâmetros
� Melhor Solução!!!
� Usar atributo param no setProperty
� O seguinte trecho de código
 <jsp:useBean id="p" class="pacote.Pessoa" />
 <jsp:setProperty name="p" property="nome" 
param="usuario" />
� Colocará o parâmetro �usuário� passado do 
formulário como valor da propriedade �nome� de 'p'
 
 12
Prof. Razer A N R Montaño Java Web - JavaBeans 23/33
Preenchimento através 
dos Parâmetros
� MELHOR AINDA!!!!!!!!!
� Alterar o formulário para que o nome dos campos 
seja igual ao nome das propriedades do bean
<html>
<head><title>Teste</title></head>
<body>
 <form action=�teste.jsp�>
 Nome: <input type=�text� name=�nome�/>
 <input type=�submit� value=�Enviar�/>
 </form>
</body>
</html>
Prof. Razer A N R Montaño Java Web - JavaBeans 24/33
Preenchimento através 
dos Parâmetros
� Então usa-se
 <jsp:useBean id="p" class="pacote.Pessoa" />
 <jsp:setProperty name="p" property="nome" />
� Colocará o parâmetro passado do formulário 
�nome� como valor da propriedade �nome� de 'p'
 
 13
Prof. Razer A N R Montaño Java Web - JavaBeans 25/33
Preenchimento através 
dos Parâmetros
� ESPETACULAR!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
� Fazer todos os campos do formulário terem nomes 
iguais às propriedades do bean sendo preenchido
� Então usa-se a propriedade '*
 <jsp:useBean id="p" class="pacote.Pessoa" />
 <jsp:setProperty name="p" property="*" />
� Varre os parâmetros da requisição
� Encontra os que coincidem com propriedades do 
bean
� Seta o valor da propriedade com o valor do 
parâmetro
Prof. Razer A N R Montaño Java Web - JavaBeans 26/33
Preenchimento através 
dos Parâmetros
� Por exemplo:
� Seja um formulário com NOME e ENDEREÇO
� Seja um bean com as propriedades Nome e 
Endereço
 
 14
Prof. Razer A N R Montaño Java Web - JavaBeans 27/33
Bean
package com.cursojava.beans;
import java.io.Serializable;
public class Pessoa implements Serializable {
private String nome;
private String endereco;
public Pessoa() {
}
public String getNome() {
return this.nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getEndereco() {
return this.endereco;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
}
beans#3
Prof. Razer A N R Montaño Java Web - JavaBeans 28/33
JSP
<html>
<head><title>Teste de Bean</title></head>
<body>
 <jsp:useBean id="p" class="com.cursojava.beans.Pessoa" />
 <jsp:setProperty name="p" property="*" />
 <form method=�POST�>
 Nome: <input type=�text� name=�nome� /><br/>
 Endereco: <input type=�text� name=�endereco� /><br/>
 <input type=�submit� name=�Ok� /><br/>
 </form>
 <br/><h1>Processado</h1>
 Nome: <jsp:getProperty name=�p� property=�nome� /><br/>
 Endereco: <jsp:getProperty name=�p�
 property=�endereco� /><br/>
</body>
</html>
beans#3
 
 15
Prof. Razer A N R Montaño Java Web - JavaBeans 29/33
Escopo dos Objetos
� Quatro tipos
� page: Página (default)
- Válidos somente na página em que estão declarados
- Referenciados por: pageContext
� request: Requisição
- Válidos durante a requisição
- Referenciados por: request
� session: Sessão
- Válidos durante o uso de sessão
- Referenciados por: session
� application: Aplicação
- Válidas em páginas no mesmo servidor de aplicação
- Referenciados por: application
Prof. Razer A N R Montaño Java Web - JavaBeans 30/33
Escopo dos Objetos
 <jsp:useBean 
id="p" 
scope="session"
class="com.cursojava.beans.Pessoa" />
� Primeiro verifica se existe um bean no escopo 
definido com aquele nome
� Se existe: retorna o bean encontrado
� Se não existe: cria um novo bean e insere-o no 
escopo
beans#4
 
 16
Prof. Razer A N R Montaño Java Web - JavaBeans 31/33
Escopo dos Objetos
<html>
<head><title>Teste Scope Session</title></head>
<body>
<form action="login.jsp" method="POST">
Nome: <input type="text" name="nome"/> <br />
Endereço: <input type="text" name="endereco"/> <br />
<input type="submit" value="OK"/>
</form>
</body>
</html>
beans#4
Prof. Razer A N R Montaño Java Web - JavaBeans 32/33
Escopo dos Objetos
<html>
<head><title>Teste de Bean</title></head>
<body>
 <jsp:useBean id="p" class="com.cursojava.beans.Pessoa"
 scope="session"/>
<jsp:setProperty name="p" property="*" />
<h2>Sessao armazenada</h2>
<a href="listar.jsp">Ver Sessão</a>
</body>
</html>
beans#4
 
 17
Prof. Razer A N R Montaño Java Web - JavaBeans 33/33
Escopo dos Objetos
<html>
<head><title>Teste de Bean</title></head>
<body>
 <jsp:useBean id="p" class="com.cursojava.beans.Pessoa"
 scope="session"/>
 <h2>Dados da Sessão</h2>
 Nome: <jsp:getProperty name="p" property="nome" /><br />
 Endereço: <jsp:getProperty name="p"
 property="endereco" /><br />
</body>
</html>
beans#4