Vous êtes sur la page 1sur 390

Curso de JAVA

Sumrio
Introduo

Programao Orientada a Objetos


Introduo Linguagem Java
AWT
Applets
JFC
Threads

Programao em rede
Acesso a Banco de Dados
2

Introduo
Java uma linguagem de programao desenvolvida pela Sun
Microsystems e lanada em verso beta em 1995.
O seu desenvolvimento foi iniciado em 1991 pela equipe
liderada por James Gosling visando o mercado de bens de
eletrnicos de consumo.
Foi criada com o objetivo de ser segura.
uma linguagem orientada a objetos semelhante a C++.

O cdigo Java traduzido para instrues de uma mquina


virtual (bytecotes) para que possa ser executado de forma
independente da plataforma.
Atualmente encontra-se na verso SDK 2 V1.4
3

Introduo
Java como soluo para Internet

Java oferece trs tipos de solues para a Internet:


Applets - Programas Java que rodam no Navegador Internet da
mquina do Cliente.
Servlets - Programas Java que rodam no no servidor Internet
atendendo requisies.
JSP - Pginas contendo scripts Java que quando carregadas iro
gerar Servlets.

Bibliografia
Eckel B. Thinking in Java. 2nd Ed. New Jersey : Prentice Hall, 2000.
Gosling J., Joy W., Steele G. The Java Language Specification. Massachusetts :
Addison-Wesley, 1996.
Oaks S. Java Security. California : OReilly & Associates, Inc, 1998.
Oaks S., Wong H. Java Threads. 2 Ed. California : OReilly & Associates, Inc,
1999.
Watt D. A. Programming Language Concepts and Paradigms. Great Britain :
Prentice Hall, 1990.
Wahli U. e outros. Servlet and JSP Programming with IBM WebSphere Studio
and VisualAge for Java, IBM RedBooks, California, May 2000.

Sadtler C. e outros. Patterns for e-business: User-to-Business Patterns for


Topology 1 and 2 using WebSphere Advanced Edition, IBM RedBooks, California,
April 2000.
5

Bibliografia
H. M. Deitel, P. J. Deitel. Java - Como Programar. 3nd Ed. Porto Alegre :
Bookman, 2001.

Alcione de Paiva Oliveira. Curso Prtico de Java. Departamento de Informtica Universidade Federal de Viosa, 2001.

Links
Revistas
http://www.javaworld.com/
Revista online sobre Java.
Livros
http://www.eckelobjects.com/
Pgina do autor do livro Thinking in Java, atualmente em segunda edio. O livro pode ser
baixado gratuitamente no site.

http://www.redbooks.ibm.com/booklist.html
Livros da IBM
Dicas Java e recursos
http://java.sun.com/
Pgina da Sun com informaes, tutoriais e produtos Java.
http://gamelan.earthweb.com/
Pgina da com informaes, Applets, Lista de discusso, tutoriais.
http://www.inquiry.com/techtips/java_pro

http://www.jguru.com/
http://www.soujava.org.br
7

Programao Orientada a Objetos


O mundo pode ser visto como um conjunto de objetos que se
relacionam.
Os objetos se agrupam em classes.

E possuem propriedades.

Raio
Textura

Programao Orientada a Objetos


As classes podem ser relacionar hierarquicamente.
As Subclasses podem herdar as propriedades das Superclasses .

Programao Orientada a Objetos


As instncias de uma classe so os objetos que pertencem a classe.
E possuem valores particulares para as propriedades da classe.

Raio: 12cm
Material: couro
Presso: 25 lbs
Velocidade: 0m/s
direo:0o

10

Programao Orientada a Objetos


Os objetos de uma classe possuem comportamentos que podem
alterar o valor de suas propriedades.

Raio: 12cm
Material: couro
Presso: 25 lbs
0 m/s
Velocidade: 25m/s
direo:0o

11

Programao Orientada a Objetos


Podemos utilizar uma linguagem de programao convencional
para modelar as classes e objetos do mundo real.

Exemplo: Pascal
Em Pascal podemos modelar uma classe definindo uma estrutura
contendo variveis que representam as propriedades:

type TEsfera = record


raio
: real;
material: array [1..30] of char;
pressao : real;
velocidade: real;
direcao : real;
end;
12

Programao Orientada a Objetos


Os objetos podem ser criados a partir de declaraes de
variveis do tipo definido.

type TEsfera = record


raio
: real;
material: array [1..30] of char;
pressao : real;
velocidade: real;
direcao : real;
end;

var esfera1 : TEsfera;


13

Programao Orientada a Objetos


As propriedades dos objetos podem ser manipuladas atravs de
funes e procedimentos.

procedure atribuiVelocidade(v: real;


var e: TEsfera);
begin
e.velocidade := v;

end;

14

Programao Orientada a Objetos


No entanto, existem algumas limitaes das linguagens
convencionais na modelagem de objetos.
No existem recursos para ocultar a estrutura de dados de
mdulos que no foram projetados para a sua manipulao.

No existem recursos para herana de propriedades entre


classes e subclasses.
No existe uma forma de relacionar explicitamente as
estruturas de dados com as funes que as manipulam.

15

Programao Orientada a Objetos


E se crissemos uma estrutura que relacionasse explicitamente
as estruturas de dados com as funes que as manipulam?

Teramos em programao uma forma de representar as


classes e objetos do mundo real.

Essa estrutura existe e possui o mesmo nome, ou seja:

16

Programao Orientada a Objetos


Java uma linguagem totalmente orientada a objetos.

Possui estruturas para representao direta de classes e objetos.

class
type TEsfera
tEsfera {
= record
float
raio;
Raio
: real;
float
velocidade;
Velocidade: real;
float
direcao;
Direcao : real;
end;void atribuiVelocidade(float v)
{velocidade = v;};

}
As funes declaradas nas classes so chamadas de mtodo.

17

Programao Orientada a Objetos


Para declarar uma varivel do tipo da classe basta preceder a
varivel com o nome da classe.
TEsfera esfera;
At esse momento nenhum objeto foi criado. Para criar um
objeto (instncia) usado o operador new.

esfera = new TEsfera();


A partir de ento possvel acessar os mtodos do objeto
atravs do operador ..
esfera.atribuiVelocidade(10);
No preciso passar o objeto, j que criada uma cpia do
mtodo para cada objeto.
18

Programao Orientada a Objetos


A grosso modo podemos dizer que cada instncia da classe
recebe uma cpia das variveis e dos mtodos da classe.

Podemos impedir o acesso direto s variveis dos objetos por


meio do qualificador private.

class TEsfera {
private float
private float
private float

raio;
velocidade;
direcao;

void atribuiVelocidade(float v)
{velocidade = v;};
}
19

Programao Orientada a Objetos


Para criar uma subclasse de uma classe existente utilizamos o
operador extends.

class TEsferaColorida extends TEsfera{


private Color cor;
void atribuiCor(Color c) {cor = c;};
}
A subclasse herda todos os mtodos e variveis da superclasse.

20

Programao Orientada a Objetos


Sobrescrita e Sobrecarga
Podemos definir mais de um mtodo com o mesmo nome na
mesma classe ou subclasses.
Caso o mtodo possua a mesma assinatura (nmero e tipos de
argumentos e tipo de retorno) de outro j definido, ento o
mtodo no pode pertencer mesma classe do anterior.
Se ambos os mtodos estiverem na mesma linha hierrquica
(classe/subclasse), dizemos que o mtodo da subclasse
sobrescreve o mtodo da superclasse. O mtodo que ser
executado depender da classe do objeto.
21

Programao Orientada a Objetos


Sobrescrita e Sobrecarga
class Empregado
{
protected float salario;
public float getSalario() {return salario;}
}

class Vendedor extends Empregado


{
protected float comissao;
public float getSalario()
{
return salario+comissao;
}
}
22

Programao Orientada a Objetos


Sobrescrita e Sobrecarga
Se a assinatura do mtodo for diferente de outro mtodo com o
mesmo nome definido anteriormente na mesma classe ou em
outra classe da mesma linha hierrquica, ento estamos
realizando uma sobrecarga sobre o identificador do mtodo.
Quando for usado o identificador dentro do cdigo de um
programa o mtodo invocado ser determinado pela classe a
que pertence o objeto do mtodo e pelo nmero e tipos dos
argumentos passados para o mtodo.

23

Programao Orientada a Objetos


Sobrescrita e Sobrecarga
class Empregado
{
protected float salario;
public void aumento()
{
salario= salario*10.0;
}
public void aumento(float porcent)
{
salario= salario*porcent;
}
}
24

Programao Orientada a Objetos


Observaes sobre as convenes
Na linguagem Java foram adotadas as seguintes convenes de
nomeao:
Toda classe, interface e classe abstrata inicia com letra
Maiscula.

Toda varivel e mtodo inicia com letra minscula.


Nomes compostos so indicados com letras maiscula no corpo
do nome, por exemplo: getNome()
Todo mtodo que retorna um valor de um atributo da classe
deve iniciar com a palavra get.
Todo mtodo que modifica um valor de um atributo da classe
deve iniciar com a palavra set.
25

Programao Orientada a Objetos


Introduo a Diagrama de Classes
Uma classe representada no diagrama de classes por meio de
um retngulo, que pode ser dividido em at trs sees
horizontais, como mostrado na figura abaixo:
Nome da classe
Atributos da classe
(opcional)
Mtodos da classe
(opcional)

26

Programao Orientada a Objetos


Introduo a Diagrama de Classes
Exemplo
Disciplina
cdigo: String
nome: String
crditos:Num
horasSemanais:Num
AlterarDados()

Nome da classe

Atributos

Mtodos

OBS: S colocada a assinatura do mtodo, ou seja, o nome


do mtodo, o valor de retorno e os argumentos.

27

Programao Orientada a Objetos


Introduo a Diagrama de Classes
Visibilidade
Visibilidade Smbolo
Pblica
+
Protegida
#
Privada
-

Descrio
Sem restrio de acesso.
Pode ser acessado apenas na prpria classe e por subclasses.
Pode ser acessado apenas na prpria classe.

28

Programao Orientada a Objetos


Introduo a Diagrama de Classes
Associao comum
Aluno

Notao
1
* ou 0..*
0..1
n..m

Disciplina

Descrio
Exatamente um
Zero ou mais
Opcional (zero ou um)
Mximo e mnimo

29

Programao Orientada a Objetos


Introduo a Diagrama de Classes
Exemplo

Aluno

0..*

0..*

Disciplina

+nota

30

Programao Orientada a Objetos


Introduo a Diagrama de Classes
Agregao -Alguns objetos so compostos por outros objetos.

Curso

Disciplina

31

Programao Orientada a Objetos


Introduo a Diagrama de Classes
Generalizao- Tipo de associao entre classes o que o
ocorre entre superclasses e subclasses.
Corpo Acadmico
+Nome: String
+Endereo:String
+Matrcula:Int

Corpo
Docente

Corpo Discente

32

Programao Orientada a Objetos


Introduo a Diagrama de Classes
Exemplo
Corpo Acadmico
+nota

Corpo Docente

Corpo Discente

Disciplina

Curso

33

Introduo Linguagem Java


Caractersticas de Java
Orientao a objetos
Compilao do cdigo fonte para cdigo de uma mquina
virtual (Bytecodes)
Cdigo fonte

Compilador
Java

Byte codes

Mquina
Virtual

34

Introduo Linguagem Java


Caractersticas de Java
Ausncia de manipulao explcita de ponteiros
Compilao do cdigo fonte para cdigo de uma
mquina virtual (Bytecodes)
Recuperao automtica de memria no utilizada
(Coleta de Lixo Garbage Collection)

Segurana
Suporte Concorrncia
Programao em rede
35

Introduo Linguagem Java


class
OlaMundo{
Programa
OlaMundo
public void exibeOla()
{

System.out.println(Ola, Mundo!);
}

public static void main(String args[])


{
OlaMundo obj = new OlaMundo();
obj.exibeOla();
}
}

36

Introduo Linguagem Java


Programa OlaMundo
O programa acima composto por uma nica classe que possui um nico
mtodo denominado main.
Os mtodos com o nome main so mtodos especiais e servem como ponto
inicial para execuo do programa.

A assinatura do mtodo main sempre a mesma


O qualificador public estabelece que este mtodo pode ser chamado por
mtodos ou procedimentos externos classe.

O qualificador static significa que o mtodo pertence classe e no s


instncias da classe, e deste modo pode ser invocado mesmo antes de ser
criado algum objeto para a classe. (mtodo de classe X mtodo de instncia)
J argumento String args[] um array de strings contendo os
parmetros passados na linha de comando.
37

Introduo Linguagem Java


Passos para compilao
Grave o arquivo com a extenso .java.
Instale o kit SDK.
Execute o comando abaixo para compilar

javac OlaMundo.java

38

Introduo Linguagem Java


Executando o Programa
java OlaMundo

39

Introduo Linguagem Java


Identificadores - Todos os identificadores da linguagem
devem iniciar com uma letra, ou o caractere _`, ou o caractere
$`.
Vlido
Aluno10
Num_Alunos
_disciplina$
Professor_10

No

Invlido
Aluno#10
Num Alunos
!disciplina
10Professor
&uuu
No?

40

Introduo Linguagem Java


Palavras chave
abstract
boolean
break
byte
case
catch
char
class
const
continue

default
do
double
else
extends
final
finally
float
for
goto

if
implements
import
instanceof
int
interface
long
native
new
package

private
protected
public
return
short
static
super
switch
synchronized
this

throw
throws
transient
try
void
volatile
while

41

Introduo Linguagem Java


Comentrios

//
comentrio de linha
/* comentrio de bloco */
/** comentrio de bloco c/ propsito de
documentao */

42

Introduo Linguagem Java


Tipos de dados simples
Inteiros

byte
short
int
long

8 bits
16 bits
32 bits
64 bits

Ponto Flutuante
float
double

32 bits
64 bits
43

Introduo Linguagem Java


Tipos de dados simples
booleanos

boolean

{true,false}

Caractere
char

16 bits

44

Introduo Linguagem Java


Tipos de dados compostos
Arrays
tipo identificador[];
tipo[] identificador;
Exemplos
int numeros[];
char[] letras;
long grade[][];

45

Introduo Linguagem Java


Tipos de dados compostos
Arrays
Declarando as dimenses

char alfabeto[] = new char[26];


int primos[] = {7, 11, 13};
Obtendo a dimenso
int numalfa = alfabeto.length;
int numPrimos = primos.length;
46

Introduo Linguagem Java


Tipos de dados compostos
Strings
Strings so manipuladas por uma classe especial
chamada de String (so sempre constantes).
String nome = new String(Pedro);
String x, y;
x = nome;
y = Pedro;

47

Introduo Linguagem Java


Tipos de dados compostos
Strings
Operaes comuns

x = Pedro;
// obtendo o tamanho
int tam = x.length();
// obtendo um caractere
char segundo = x.charAt(1);
// comparando
if (Pedro.equals(x)) {...
48

Introduo Linguagem Java


Converso de Tipos
Todos os tipos primitivos possuem classes correspondentes
com mtodos para manipulao e converso.
Tipo

Classe

int

Integer

float

Float

double

Double

boolean

Boolean

byte

Byte

short

Short

long

Long
49

Introduo Linguagem Java


Converso de Tipos
Por exemplo, a classe Integer fornece um mtodo para
converter String para int:

int i = Integer.parseInt(12);
Para se converter um inteiro para String podemos utilizar o
mtodo toString:
String s = Integer.toString(12);

Existem mtodos semelhantes nas outras classes


50

Introduo Linguagem Java


Operadores
Unrios

Incremento
Decremento
Negativo
Complemento de bit

++
-~

51

Introduo Linguagem Java


Operadores
Binrios

Adio e concatenao de
strings
+
Subtrao
Multiplicao
*
Diviso
/
Modulo
%
And de bit
&
Or de bit
|
Xor de bit
^
rot. Esquerda
<<
rot. Direita
>>
52

Introduo Linguagem Java


Operadores

Relacionais

Menor que
Maior que
Menor igual
Maior igual
igual
Diferente

<
>
<=
>=
==
!=

53

Introduo Linguagem Java


Operadores
Booleanos

E
OU
OU Exclusivo
E Curto circuito
OU Curto circuito
Negao
Condicional

&
|
^
&&
||
!
?:

54

Introduo Linguagem Java


Operadores
Atribuio

Simples
Adio
Subtrao
Multiplicao
Diviso
Modulus
AND
OR
XOR

=
+=
-=
*=
/=
%=
&=
|=
^=
55

Introduo Linguagem Java


Blocos e Escopo
class Visivel {
public static void main (String args[]){
int x = 5;
escopo do x externo
int y = 2;
...
{
escopo de y
int x =2;
escopo do x interno
...
}
...
}
}

}
}

56

Introduo Linguagem Java


Estruturas de Controle

Seleo
if (condio)
comando1
else
comando2

Exemplo
if (x==0)
y = 5;
else
{
y+=6;
x++;
}

57

Introduo Linguagem Java


Estruturas de Controle

Seleo
switch(Expr)
{
case const1: com1;
...
case constN: comN;
default: comDef
}

58

Introduo Linguagem Java


Estruturas de Controle
Seleo (exemplo)
switch(letra)
{
case i: System.out.println(inserir);
break;
case e: System.out.println(excluir);
break;
case a: System.out.println(alterar);
break;
default:
System.out.println(
Ao ignorada: +letra);
59
}

Introduo Linguagem Java


Estruturas de Controle
Repetio
while(condio)
Comando;

while(i<100)
x +=i++;

do

do

Comando;
while(condio)

x +=i++;
while(i<100);

60

Introduo Linguagem Java


Estruturas de Controle
Repetio
for(Expr.Inicializao;condio; expr.passo)
Comando;
for(i=1; i<100; i++)
System.out.println(numero:+i);

61

Introduo Linguagem Java


Argumentos da linha de comando
Os argumentos digitados na linha de comando so passados
para o mtodo main da classe invocada por meio de um vetor
de Strings. Por exemplo, se executarmos a linha de comando
abaixo
java teste um dois trs
o mtodo main da classe teste receber o seguinte vetor de
Strings:
[0]

um

[1]

dois

[2]

trs
62

Introduo Linguagem Java


Argumentos da linha de comando
Exemplo 1:
class ImpLinha
{
public static void main(String args[])
{
int i;
for (i=0;i<args.length;i++)
System.out.println(args[i]);
}
}

63

Introduo Linguagem Java


Argumentos da linha de comando
Exemplo 2:
class Soma
{
public static void main(String a[])
{
int i,soma=0;
for (i=0;i<a.length;i++)
soma += Integer.parseInt(a[i]);
System.out.println(A soma :+soma);
}
}
64

Introduo Linguagem Java


Classes, Packages e Interfaces
Classes

class Identificador
{
corpo da classe
}

class ObjetoGeo
{
protected Color cor;
protected int x, y;
public ObjetoGeo(Color aCor, int aX, int aY)
{
cor = aCor; x=aX; y = aY;
};
public Color getCor() {return cor};

65

Introduo Linguagem Java


Classes, Packages e Interfaces
Derivando classes
class Circulo extends ObjetoGeo
{
protected int raio;

public Circulo(Color aCor, int aX, int aY, int aRaio)


{
cor = aCor; x=aX; y = aY; raio = aRaio;
};
public float area()
{
return 3.1415927 * raio *raio;
}
}
66

Introduo Linguagem Java


Classes, Packages e Interfaces
Modificadores de acesso

default Somente classes do mesmo


package possuem acesso
public
Todos possuem acesso
protect Apenas os membros da classe
e subclasse
private Apenas os membros da classe

67

Introduo Linguagem Java


Classes, Packages e Interfaces
Construtores

So mtodos como o mesmo nome da classe e declarados como


pblicos e sem tipo de retorno. So chamados pelo operador new.
Uma classe pode no ter construtor ou ter vrios, desde que
tenham diferentes tipos de argumentos. O interpretador decidir
qual chamar a partir dos argumentos.

68

Introduo Linguagem Java


Classes, Packages e Interfaces
Valor de retorno
Com exceo dos construtores todos os outros mtodos precisam
especificar algum valor de retorno. Se programador no est
interessado que o mtodo retorne algum valor, ento ele deve
especificar que o mtodo ir retornar o valor void, que o valor
vazio. O retorno do valor dentro do mtodo feito com a palavra
chave return seguida de uma expresso:
return <expresso>
A expresso pode ser uma varivel, um literal ou qualquer
outra expresso que gere um valor do tipo especificado para o
retorno da funo.
69

Introduo Linguagem Java


Classes, Packages e Interfaces
Objetos
Para se criar um objeto de uma classe (ou uma instncia da classe)
preciso primeiro declarar uma varivel que ir referenciar o
objeto, para depois criar o objeto. A declarao de um referncia a
um objeto feita obedecendo a seguinte forma geral:
<nome da classe> <identificador>;
Por exemplo, para declarar uma referncia um objeto da
classe Circulo devemos adicionar a seguinte linha ao cdigo.
Circulo

c;
70

Introduo Linguagem Java


Classes, Packages e Interfaces
Objetos
Pode-se declarar mais de uma referncia a objetos de uma classe,
separando os identificadores por vrgula.
Circulo c1, c2;
Para criar um objeto usa-se o operador new conforme a forma
geral abaixo:
<identificador> =

new <nome da classe>(<argumentos>);

71

Introduo Linguagem Java


Classes, Packages e Interfaces
Objetos
Por exemplo, para criar um objeto do tipo Circulo podemos
usar a declarao abaixo:
c1 = new Circulo (Color.blue,1,5,8);
Podemos tambm combinar a declarao da referncia com a
criao do objeto em uma nica linha de cdigo.
Circulo c1 = new Circulo (Color.blue,1,5,8);

72

Introduo Linguagem Java


Classes, Packages e Interfaces
Objetos
Uma vez criado um objeto podemos acessar os elementos do
objeto por meio de uma referncia ao mesmo e do operador .. Por
exemplo, para acessar o mtodo getCor() do objeto
referenciado pela varivel c1 devemos usar o seguinte cdigo:
c1.getCor();

73

Introduo Linguagem Java


Classes, Packages e Interfaces
Objetos
importante notar que a varivel apenas uma referncia ao
objeto (ponteiro) e no o objeto. Portanto preciso ter cuidado
com o compartilhamento de objetos:
c2 = c1; // As variveis c1 e c2 apontam
// para o mesmo objeto

74

Introduo Linguagem Java


Classes, Packages e Interfaces
Objeto this
usado para referenciar a instncia corrente.
class ObjetoGeo
{
protected Color cor;
protected int x, y;
public ObjetoGeo(Color cor, int x, int y)
{
this.cor = cor; this.x=x; this.y = y;
};
public Color getCor() {return cor};

75

Introduo Linguagem Java


Classes, Packages e Interfaces
Objeto super
usado para referenciar a superclasse.
class Circulo extends ObjetoGeo
{
protected int raio;

public Circulo(Color aCor, int aX, int aY, int aRaio)


{
super(aCor,aX,aY); raio = aRaio;
}
public float area()
{
return 3.1415927 * raio *raio;
}
}

76

Introduo Linguagem Java


Classes, Packages e Interfaces
Outros Modificadores

static

A varivel ou mtodo
comum a todas as
instncias da classe.
final
O valor da varivel no
pode ser modificado.
synchronized Apenas um thread pode
entrar no mtodo por vez.
native
identifica mtodos nativos.
77

Introduo Linguagem Java


Classes, Packages e Interfaces
Packages
Agrupa classes e interfaces relacionadas. Tem que ser a
primeira declarao da unidade.
package identificador
Importando Packages
import identificador

import java.awt.Color;
import java.awt.*;
78

Introduo Linguagem Java


Classes, Packages e Interfaces
Packages
As classes de um determinado pacote devem ser colocadas
em um diretrio obedecendo a mesma estrutura do nome do
pacote, a partir de algum diretrio constando na varivel de
ambiente classpath. A varivel de ambiente classpath
indica os diretrios que servem como pontos de entrada para
procura de classes pela mquina virtual.

79

Introduo Linguagem Java


Classes, Packages e Interfaces
Packages
Por exemplo, suponha que eu resolva colocar as classes sobre
objetos geomtricos em um determinado pacote, digamos
br.com.alcione.geo. Para indicar que unidade de
compilao pertence a esse pacote devemos colocar a diretiva
adequada no incio do arquivo fonte.
package br.com.alcione.geo;
public class objetoGeo
{
...
}

80

Introduo Linguagem Java


Classes, Packages e Interfaces
Packages
Para que a mquina virtual consiga achar o pacote devemos
coloc-lo em diretrio com a mesma estrutura do nome do pacote e
que tenha como raiz algum diretrio constante na varivel de
ambiente classpath. Por exemplo, suponha que a varivel
classpath contenha os seguintes diretrios:
CLASSPATH=.;C:\JAVA\LIB;C:\meujavalib

ento o arquivo objetoGeo.class pode ser colocado no


diretrio:
C:\meujavalib\br\ufv\dpi\alcione\geo
81

Introduo Linguagem Java


Classes, Packages e Interfaces
Packages

Para usar a classe em outra unidade de compilao basta incluir a


seguinte diretiva no arquivo fonte:
import br.com.alcione.geo.*;

82

Introduo Linguagem Java


Classes, Packages e Interfaces
Packages
A partir da verso 1.2 a linguagem Java apresentou um mecanismo de adicionar
classes ao ncleo bsico da linguagem, dispensando deste modo o uso da
varivel de ambiente classpath, chamado de Mecanismo de Extenso. As
extenses so agrupadas em arquivos JAR que sero abordados mais adiante.
Uma vez feito isso, pode-se transformar as classes em extenses utilizando uma
das duas formas:
Extenso Instalada colocando o arquivo JAR em um local predeterminado na
estrutura de diretrios do ambiente de tempo de execuo de Java (Java Runtime
Environment ou JRE).
Extenso de download Extenso referenciando o arquivo JAR de uma forma
especfica, a partir do manifesto de outro arquivo JAR.
83

Introduo Linguagem Java


Classes, Packages e Interfaces
Classes e Mtodos Abstratos
Uma classe abstrata no pode ser instanciada e possui
um ou mais mtodos abstratos.

Um mtodo abstrato um mtodo sem corpo cuja a


assinatura precedida da palavra-chave abstract.
As subclasses precisam sobrescrever os mtodos
abstratos, caso contrrio tambm no podero ser
instanciadas.
84

Introduo Linguagem Java


Classes, Packages e Interfaces
Classes e Mtodos Abstratos
Exemplo
abstract public class Animal
{
abstract public void fala();
}

85

Introduo Linguagem Java


Classes, Packages e Interfaces
Interfaces
Podem ser vistas como classes abstratas contendo apenas
mtodos abstratos.
interface identificador
{
corpo da interface
}
Implementando interfaces
class Identificador implements Interface
{
corpo da classe
}

86

Introduo Linguagem Java


Classes, Packages e Interfaces
Interfaces
Exemplo
interface InterUsuario
{
abstract public void exibeMensagem(String men);
}
public class Janela extends Frame implements InterUsuario
{
private Label label1;
...
public void exibeMensagem(String men)
{
label1.setText(men);
}
87
}

Introduo Linguagem Java


Classes, Packages e Interfaces
Converso
Uma referncia a um objeto pode ser atribuda a uma
varivel de referncia para um objeto em um nvel mais
alto na hierarquia dos objetos. Exemplo:
Object o;
String s = teste;
o = s;

A atribuio acima possvel porque a classe Object


uma superclasse de String (Na verdade superclasse de
todas as classes).

88

Introduo Linguagem Java


Classes, Packages e Interfaces
Converso
J a converso inversa s possvel se o objeto for realmente
do tipo da subclasse, e mesmo assim preciso utilizar um
operador de converso forada (casting):
Object o;
String s = teste;
String t = teste;
o = s;
t = (String) o;

89

Introduo Linguagem Java


Classes, Packages e Interfaces
Classes internas
A partir da verso 1.1 da linguagem Java foi includa a
permisso para declarar uma classe dentro da declarao de
outra classe.
public class Externa
{
...
class Interna
{
...
}
}
90

Introduo Linguagem Java


Classes, Packages e Interfaces
Polimorfismo
Seja o seguinte trecho de cdigo:
class A {
public void m1(){System.out.println(ola);}
}
class B extends A {
public void m1(){System.out.println(oi);}
}
class C {
public void m2(A obj){obj.m1();}
public void m3(A obj){
B b= new B();
m2(b);
}
}
91

O que ser exibido quando invocarmos m3?

Introduo Linguagem Java


Classes, Packages e Interfaces
Polimorfismo
Resposta: oi

Portanto a regra a seguinte: sempre chamado o mtodo declarado


na classe a que o objeto pertence, e no da classe superclasse.
Para que essa regra seja implementada necessrio que a associao
da chamada do mtodo com o cdigo do mtodo seja feito em tempo
de execuo. Isso ocorre porque somente em tempo de execuo ser
possvel saber a classe do objeto que est sendo recebido como
parmetro.
O momento em que ocorre a associao de um identificador com a
objeto que identifica chamado tempo de amarrao. Se este
momento ocorre em tempo de compilao a amarrao dita esttica
(static binding). Se associao ocorre em tempo de execuo a
amarrao dita dinmica (dynamic binding).
92

Introduo Linguagem Java


Classes, Packages e Interfaces
Polimorfismo
A amarrao dinmica de mtodos tambm acarreta um
comportamento polimrfico. Por exemplo, o objeto que passado
para o mtodo imprimeSaldo() pode exibir comportamento
diversos, dependendo da classe a qual realmente o objeto pertence.

93

Introduo Linguagem Java


Classes, Packages e Interfaces
Classes internas
Os atributos e mtodos declarados na classe externa so
visveis pela classe interna, mesmo os declarados como
protected ou private. No entanto, o contrrio no
verdadeiro, ou seja, os atributos e mtodos da instncia da
classe interna s so visveis pela classe externa se forem
declarados como pblicos.
A incluso de classes internas foi uma modificao a nvel
de linguagem em Java e o que motivou a modificao foi
o novo modelo de eventos proposto pela verso 1.1.

94

Introduo Linguagem Java


Excees
Formato geral
try
{
cdigo que pode gerar excees
} catch(classe de exceo1 objeto) {
tratamento da exceo1
} catch(classe de exceo2 objeto) {
...
} catch(classe de exceoN objeto) {
tratamento da exceoN
}
95

Introduo Linguagem Java


Excees
Exemplo
public void init()
{
MediaTracker tr = new MediaTracker(this);
im = getImage(getDocumentBase(),img.gif);
tr.addImage(im,0);
try
{
tr.waitForId(0);
}
catch (InterruptedException excep) {
System.out.print(Erro na carga);
}
}
96

Introduo Linguagem Java


Excees
Capturando qualquer exceo

try
{
Cdigo que pode gerar exceo
}
catch (Throwable t) {
// tratamento
...
}
97

Introduo Linguagem Java


Excees
Transferindo a captura de excees para mtodos mais
anteriores na pilha de chamadas

class esperaTecla
{
public void espera() throws Exception
{
System.in.read();
}
}

98

Introduo Linguagem Java


Excees
Throwing Exceptions
public void init()
{
MediaTracker tr = new MediaTracker(this);
im = getImage(getDocumentBase(),img.gif);
tr.addImage(im,0);
try
{
tr.waitForId(0);

}
catch (InterruptedException excep) {
System.out.print(Erro na carga);
throw excep;
}
}

99

Introduo Linguagem Java


IO
As funes de entrada e sada so suportadas por classes
agrupadas no pacote java.io.
Se baseiam no conceito de stream de bytes (corrente ou
sequncia), onde a entrada/sada um duto onde se
retira/coloca cada byte como em uma fila do tipo First infirst out.

100

Introduo Linguagem Java


IO
O produtor e o consumidor podem se selecionados de uma ampla
variedade que vai desde arquivos e portas de protocolos TCP/IP at
arranjos (arrays) de bytes e Strings.
As classes so combinadas, formando camadas, onde as classes das
camadas inferiores fornecem servios bsicos como leitura/escrita de
um byte, enquanto que as classes superiores fornecem servios de
leitura/escrita mais sofisticados.

Camada n
Camada 1
Classe I/O
Bsica

Nvel dos
servios

101

Introduo Linguagem Java


IO
Para complicar um pouco mais a situao, a linguagem
Java Possui dois conjuntos distintos de classes para I/O.
Um originado da verso 1.0 e outro introduzido na verso
1.1. A razo para isso que as classes projetadas na verso
1.0 so orientadas para bytes e portanto no so adequadas
para lidar cdigos Unicodes que utilizam dois bytes.
Algumas vezes ser preciso combinar as funes antigas
com as novas para obter algum tipo de funcionalidade.
A Sun adicionou novas facilidades ao conjunto antigo na
verso 1.1, dando sinais que no pretende simplesmente
abandon-lo.
102

Introduo Linguagem Java


IO
classes de entrada.

ints

floats etc.
Strings

FilterInputStream
DataInputStream
BufferedInputStream
LineNumberInputStream

ints

FilterReader
BufferedReader
LineNumberReader

caracteres

bytes
StringBufferInputStream
ByteArrayInputStream
PipedInputStream
FileInputStream
InputStream

floats etc.
Strings

PipedReader
CharArrayReader
StringReader
FileReader
Reader
103

Introduo Linguagem Java


IO
classes de sada.

ints

floats etc.
Strings

FilterOutputStream
PrintStream
DataInputStream
BufferedOutputStream

floats etc.
Strings
ints

FilterWriter
BufferedWriter
PrintWriter

caracteres

bytes
ByteArrayOutputStream
PipedOutputStream
FileOutputStream
OutputStream

PipedWriter
CharArrayWriter
StringWriter
FileWriter
Writer
104

Introduo Linguagem Java


IO
As funes bsicas so tratadas pelas classes abstratas bsicas
InputStream e OutputStream.
Para as funes de entrada e sada com Buffers so utilizadas
as classes BufferedInputStream, BufferedOutputStream,
BufferedReader e BufferedWriter .
A traduo entre InputStream, OutputStream e
BufferedReader , BufferedWriter feita por InputStreamReader
e OutputStreamWriter.
Para IO em arquivos podem ser utilizadas classes de baixo
nvel: FileInputStream, FileOutputStream, FileReader e
FileWriter.
105

Introduo Linguagem Java


IO
Exemplo: Leitura no formatada de arquivos.
a) Streams

b) I/O 1.1

import java.io.*;

import java.io.*;

class TesteIO101
{
public static void main(String a[])
{
try
{
DataInputStream in =
new DataInputStream(
new BufferedInputStream(
new FileInputStream(a[0])));
String str;
while((str = in.readLine())!= null)
System.out.println(str);
} catch(IOException e)
{ System.out.println(e.getMessage());}
}
}

class TesteIO111
{
public static void main(String a[])
{
try
{
BufferedReader in =
new BufferedReader(
new FileReader(a[0]));
String str;
while((str = in.readLine())!= null)
System.out.println(str);
} catch(IOException e)
{System.out.println(e.getMessage());}
}
}

106

Introduo Linguagem Java


IO
Exemplo: escrita no formatada de arquivos.

a) Streams

b) I/O 1.1

import java.io.*;

import java.io.*;

class TesteIO102
{
public static void main(String a[])
{
try
{
PrintStream out = new PrintStream(
new BufferedOutputStream(
new FileOutputStream("saida.out")));
out.println("Linha de teste 1");
out.println("Linha de teste 2");
out.close();
}catch(IOException e) {
System.out.println(e.getMessage());}
}
}

class TesteIO112
{
public static void main(String a[])
{
try
{
PrintWriter out = new PrintWriter(
new BufferedWriter(
new FileWriter("saida.out")));
out.println("Linha de teste 1");
out.println("Linha de teste 2");
out.close();
}catch(IOException e) {
System.out.println(e.getMessage());}
}
}
107

Introduo Linguagem Java


IO
Exemplo: escrita e leitura formatada de arquivos.
import java.io.*;
class TesteIO103
{
public static void main(String a[]){
try {
DataOutputStream out = new DataOutputStream(
new BufferedOutputStream(new FileOutputStream("a.out")));
out.writeBytes("O valor de pi: \n");
out.writeDouble(3.14159);
out.close();
DataInputStream in = new DataInputStream(
new FileInputStream("a.out"));
System.out.println(in.readLine());
System.out.println(in.readDouble());
}catch(IOException e) {System.out.println(e.getMessage());}
}
}

108

Introduo Linguagem Java


IO
A Classe System responsvel por manter os stream
bsicos: System.in, System.out e System.error.
import java.io.*;
class TesteIO114
{
public static void main(String a[]){
try {
BufferedReader in = new BufferedReader(
new InputStreamReader(System.in));
System.out.print("Entre uma linha:");
System.out.println(in.readLine());
}catch(IOException e)
{System.out.println(e.getMessage());}
}
}

109

Introduo Linguagem Java


Util
Contm classes teis ao desenvolvimento de aplicaes
Alguns Exemplos:
Hashtable
Vector
Stack
Date

110

Introduo Linguagem Java


Util
Exemplo: Hashtable
Hashtable numbers = new Hashtable();
numbers.put("one", new Integer(1));
numbers.put("two", new Integer(2));
numbers.put("three", new Integer(3));
...
Integer n = (Integer)numbers.get("two");
if (n != null) {
System.out.println("two = " + n);
}
...
for (Enumeration e = numbers.elements();
e.hasMoreElements() ;) {
Integer i = (Integer)e.nextElement()
System.out.println( i.toString());
}

111

Introduo Linguagem Java


Util
Exemplo: Hashtable
class Pessoa {
String Nome;
String Tel;
public Pessoa(String Nome, String Tel)
{this.Nome = Nome; this.Tel = Tel;}
public String getNome(){return Nome;}
public String getTel(){return Tel;}
}
...
Hashtable pessoas = new Hashtable();
...
pessoa P1 = new pessoa("Pedro", "899-1313");
pessoas.put(P1.getNome(), P1);
...
pessoa P2 =(pessoa) pessoas.get("Pedro");
if (P2!=null) System.out.println
("Nome:"+P2.getNome(), "\nTel:"+P2.getTel());

112

Introduo Linguagem Java


Exerccio
Faa uma agenda. Utilize a classe pessoa e Hashtable
para armazenar o nome e telefone. Obtenha do teclado
os dados das pessoas e as instrues para
armazenamento e consulta. Posteriormente faa funes
para gravar e recuperar os dados em arquivo.

113

Introduo Linguagem Java


Exerccio: Diagrama de classes
Pessoa

Agenda
+inserir(pessoa p)
+pessoas getPessoas()
+Pessoa getPessoa(String Nome)

0..*

-String Nome
-String Tel
-String End
+getNome()
+getTel()
+getEnd()
AgendaInt
+obterPessoa()
+exibirLista()
+exibirPessoa()
+gravarAgenda()
+recuperarAgenda()
114

Introduo Linguagem Java


Serializao e Persistncia
Um objeto serializvel se e possvel transform-lo em um
stream de bytes de modo que seja possvel o seu armazenamento
em arquivo ou comunicao atravs de um stream.
Se o objeto for armazenado em uma memria no voltil
dizemos que o objeto possui persistncia.

Para um objeto ser serializvel basta implementar a interface


Serializable.

115

Introduo Linguagem Java


Serializao e Persistncia
Exemplo:
class

Pessoa implements Serializable {


String Nome;
String Tel;
public pessoa(String Nome, String Tel)
{this.Nome = Nome; this.Tel = Tel;}

...
Pessoa p = new Pessoa(Ana,234-6757);
FileOutputStream fout = null;
ObjectOutputStream out;
try {
fout = new FileOutputStream(p.dat");
out = new ObjectOutputStream(fout);
out.writeObject(p);
out.close();
} catch(Exception e) {System.out.println(Erro:");return;}
116

Introduo Linguagem Java


Serializao e Persistncia
Exemplo:
FileInputStream fin = null;
ObjectInputStream in;
try {
fin = new FileInputStream(p.dat");
in = new ObjectInputStream(fin);
p = (pessoa) in.readObject();
in.close();
} catch(Exception e)
{ System.out.println(Erro:+e);
return;}
117

Introduo Linguagem Java


Exerccio
Modifique o programa da agenda de modo que a
gravao e a carga do arquivo seja feita atravs da
serializao do objeto Hashtable pessoas.

118

AWT
Abstract Window Toolkit
um package contendo classes para a criao de objetos para
interao em janelas grficas.
Com essas classes possvel criar e manter objetos tais como:
Botes (Classe Button)
Caixa de Escolha (Classe Choice)

Dilogos (Classe Dialog)


Janelas (Classe Window)
Menus (Classe Menu)
Barra de Rolamento (Classe Scrollbar)
Etc...

119

AWT
O pacote conhecido como AWT 1.0 (Abstract Window
Toolkit), no era muito harmnico e tinha um conjunto muito
pobre de componentes grficos.
A verso AWT 1.1 solucionou vrios deste problemas, com o
oferecimento de um novo modelo para tratamento dos eventos
gerados na interface e com a introduo de um modelo para
programao de componentes, denominados de Javabeans.
Na verso 1.2 da linguagem novas facilidades foram
incorporadas com a adio de um conjuntos de componentes
leves, denominados de Swing, na JFC (Java Foundation
Classes).

120

AWT
A hierarquia de classes.
Color
Component
Button
Canvas
Checkbox
Choice
Container
Panel
Window
Dialog
Frame
Label
List
Scrollbar
TextComponent
TextArea
TextField
MenuComponent
MenuBar
MenuItem
Menu
121

AWT
Para usar classes definidas na AWT preciso import-las
import java.awt.*;
Um exemplo de uma classe que exibe uma mensagem.
class testeFrame1 extends Frame
{
public testeFrame1(){}
public static void main(String args[]){
testeFrame1 t = new testeFrame1();
t.setSize(100,50);
t.add(new Label("ola"));
t.setVisible(true);
}
};
122

AWT
Dois objetos das classes Frame e Label foram utilizados.
A Classe Frame cria uma janela com 0 x 0 pixels e invisvel. Para
dimension-la e necessrio usar os mtodos resize() e show().

A classe Label usada para criar um objeto de texto que


adicionado ao Frame.
Um objeto Frame no responde a nenhum evento. Para receber os
eventos sobre a janela preciso implementar a interface
WindowListener.
class testeFrame1 extends Frame implements WindowListener

123

AWT
Ou melhor, podemos criar uma subclasse da Frame que
recebe eventos.
class FrameX extends Frame implements WindowListener
{
public FrameX(String Titulo){
super(Titulo);
addWindowListener(this);
setSize(100,50);
}
public void windowOpened(WindowEvent we){}
public void windowClosed(WindowEvent we){}
public void windowIconified(WindowEvent we){}
public void windowDeiconified (WindowEvent we){}
public void windowActivated(WindowEvent we){}
public void windowDeactivated(WindowEvent we){}
public void windowClosing(WindowEvent we){
setVisible(false);
dispose();
System.exit(1);
}
};

124

AWT
EVENTOS: Modelo de Eventos 1.1
O Modelo de eventos do AWT1.1 um grande avano sobre o
modelo antigo. Ele no s mais flexvel, e orientado a objetos,
como permitiu o desenvolvimento da interface de aplicao
JavaBeans, que permite a descrio de componentes visuais.
A idia por trs do novo modelo que uma fonte de eventos possa
enviar os eventos para um ou mais objetos cadastrados para o
recebimento do evento, denominados de event listeners.
Geralmente, a fonte de evento um componente. Um listener um
objeto que implementa a interface EventListener ou alguma de suas
sub-interfaces.

125

AWT
EVENTOS: Modelo de Eventos 1.1
Componente 1

evento 1

A
B
C

Listener A

Listener B

Listener C
Componente 2
B
D
E

evento 2

Listener D

Listener E
126

AWT
EVENTOS: Modelo de Eventos 1.1
Um listener pode estar registrado em mais de um componente.
Um componente pode ter mais de uma lista de listener, dependendo
dos tipos de eventos que ele pode gerar. Uma ao sobre um
componente pode gerar mais de um evento.
Diferentemente do AWT1.0 onde existia apenas uma classe de
eventos, o Event, no AWT1.1 existem 10 classes para os eventos,
definidas no pacote java.awt.event, todas subclasses da classe
java.awt.event.AwtEvent e cada uma representando um conjunto de
eventos relacionados, como mostrado na tabela.

127

AWT
EVENTOS: Modelo de Eventos 1.1
ComponentEvent
FocusEvent
KeyEvent
MouseEvent
ActionEvent
AdjustmentEvent
ItemEvent
ContainerEvent
TextEvent

Um componente moveu, foi escondido, exibido ou mudou de tamanho.


Um componente recebeu ou perdeu o foco.
Um componente recebeu uma entrada pelo teclado.
Um componente recebeu uma entrada pelo mouse.
Um componente foi ativado.
Uma barra de rolamento ou componente similar foi movido.
Um item de um componente como lista, ou similar foi selecionado.
Um componente foi adicionado ou removido de um container.
Uma mudana ocorreu em um campo de texto.

128

AWT
EVENTOS: Modelo de Eventos 1.1
class FrameX extends Frame implements WindowListener
{
public FrameX(String Titulo){
super(Titulo);
addWindowListener(this);
setSize(100,50);
}
public void windowOpened(WindowEvent we){}
public void windowClosed(WindowEvent we){}
public void windowIconified(WindowEvent we){}
public void windowDeiconified (WindowEvent we){}
public void windowActivated(WindowEvent we){}
public void windowDeactivated(WindowEvent we){}
public void windowClosing(WindowEvent we){
setVisible(false);
dispose();
System.exit(0);
}
};

129

AWT
EVENTOS: Modelo de Eventos 1.1
Agora vamos supor que uma determinada classe necessitasse
receber vrios eventos de vrios componentes. O cdigo da classe
poderia ficar um pouco confuso, alm da lista enorme de interfaces
que necessitariam de ser declarada aps a palavra implements. Uma
forma mais elegante de se lidar com estes casos por meio de
classes internas, ou inner classes. Desta forma, o cdigo para tratar
cada grupo de eventos fica localizado em uma nica classe, e como
as classes internas possuem acesso classe externa, os atributos e
mtodos da classe externa podem ser diretamente referenciados.

130

AWT
EVENTOS: Modelo de Eventos 1.1
import java.awt.*;
import java.awt.event.*;
public class TesteFrame3 extends FrameX {
Button b;
public TesteFrame3() {
setLayout(null);
setSize(100,80);
b = new Button("Aperte Aqui");
add(b);
b.setBounds(10,40,80,30);
b.addActionListener(new Bl());
}
class Bl implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (b.getLabel().equals("Aperte Aqui")) b.setLabel(Valeu);
else b.setLabel("Aperte Aqui");
}
}
public static void main(String args[]){
(new TesteFrame3()).setVisible(true);
}
}

131

AWT
EVENTOS: Modelo de Eventos 1.1
Button

ComponentEvent

Frame

FocusEvent

Choice

KeyEvent

TextField

MouseEvent

Scrollbar
ActionEvent
Component
AdjustmentEvent
Label

Dialog

ItemEvent

Panel

WindowEvent

Menu

ContainerEvent

MenuItem

TextEvent

132

AWT
EVENTOS: Modelo de Eventos 1.1
As instncias das classes de eventos mantm as informaes relativas ao evento. Por
exemplo, a classe MouseEvent possui os seguintes mtodos para recuperao de
informao sobre o evento:
int getId() tipo do evento. Por exemplo: MouseEvent.MOUSE_CLICKED,
MouseEvent.MOUSE_PRESSED
int getX() coordenada x do evento.
int getY() coordenada y do evento.
Point getPoint() coordenada x e y do evento.
int getClickCount() retorna o nmero de mouse clicks.
boolean isPopupTrigger() indica se o evento um disparo para menu pop-up.
void translatePoint(int x, int y) move a posio do evento por x e y.

133

AWT
EVENTOS: Modelo de Eventos 1.1
para se codificar um tratador para um determinado evento basta seguir
os seguintes passos:
Determine o grupo de eventos deseja tratar.
No nome do grupo de eventos substitua o termo trecho Event por Listener.
Este o nome da interface que voc deve implementar. Crie uma classe
interna que implementa a interface.
Codifique os mtodos que tratam os eventos que voc deseja tratar. Todos os
mtodos da interface tem que ser implementados, mas o corpo dos mtodos
que no interessam podem ser deixados vazios.
Registre um objeto da classe interna junto ao componente, por meio do
mtodo addXXX, onde XXX o nome da interface implementada.

134

AWT
EVENTOS: Modelo de Eventos 1.1
Alguns mtodos para registro de listeners:

Button.addActionListener(ActionListener l)
Frame.addWindowListener(WindowListener l)
Choice.addItemListener(ItemListener l)
TextField.addTextListener(TextListener l)
Scrollbar.addAdjustamentListener(AdjustamentListener l)
Component.addComponentListener(ComponentListener l)
Component.addFocusListener(FocusListener l)
Component.addKeyListener(KeyListener l)

135

AWT
EVENTOS: Modelo de Eventos 1.1
Adapter
Um event listener precisa implementar todos os mtodos da interface.

O package java.awt.event fornece seis classes abstratas, denominadas


adapters que facilitam a implementao de listener.
ComponentAdapter

ContainerAdapter
FocusAdapter
KeyAdapter

MouseAdapter
MouseMotionAdapter
WindowAdapter
136

AWT
EXEMPLO
class testeFrame3 extends FrameX{
Button b;
class SymMouse extends java.awt.event.MouseAdapter {
public void mouseClicked(java.awt.event.MouseEvent event){
Object object = event.getSource();
if (object == b) b.setLabel("Clik");
}
}
public testeFrame3 (String Titulo){
super(Titulo);
b = new Button("ola");
b.addMouseListener(new SymMouse());
this.add(b);
setSize(100,80);
}
public static void main(String args[]){
testeFrame3 t = new testeFrame3("Teste 3");
t.show();
}
}
137

AWT
EXEMPLO : TextField
public class testeFrame4 extends FrameX {
public testeFrame4(String titulo) {
super(titulo);
setLayout(new GridLayout(1,2));
textField1 = new TextField(20);
add(textField1);
button1 = new Button("Duplica");
add(button1);
button1.addMouseListener(new SymMouse());
}
public synchronized void show()
move(50, 50);
setSize(200,50);
super.show();
}

TextField textField1;
Button button1;
138

AWT
EXEMPLO: TextField (continuao)
class SymMouse extends java.awt.event.MouseAdapter {
public void mouseClicked(java.awt.event.MouseEvent event){
Object object = event.getSource();
if (object == button1) {
int i = Integer.parseInt(textField1.getText());
textField1.setText(""+i*2);
}
}
}
public static void main(String args[]){
new testeFrame4("Teste 4").show();
}

139

AWT
EXEMPLO: TextField Sem layout
public class testeFrame5 extends FrameX {
public testeFrame5(String titulo) {
super(titulo);
setSize(220,70);
setLayout(null);
textField1 = new TextField();
textField1.setBounds(10,30,100,25);
add(textField1);
button1 = new Button("Duplica");
button1.setBounds(110,30,100,25);
button1.addMouseListener(new SymMouse());
add(button1);
}
140

AWT
EXEMPLO: Imagem
public class testeFrame6 extends FrameX {
public testeFrame6(String titulo) {
super(titulo);
setSize(500,460);
move(50, 50);
theImage = tk.getImage(ganso.gif");
}
private static Toolkit tk = Toolkit.getDefaultToolkit();
private Image theImage;
public void paint(Graphics g) {
g.drawImage(theImage, 20, 20, getSize().width-20,
getSize().height-20, this);
}
public static void main(String args[]){
new testeFrame6("Teste 6").setVisible(true);
}

141

AWT
O objeto toolkit oferece recursos para carregar imagens da
forma correta para cada plataforma.
O mtodo Paint responsvel por desenhar a figura. Ele
chamado toda vez que ocorre um evento sobre o componente, de
modo que a figura ser sempre redesenhada.

142

AWT
Exerccios
Faa um programa para converter Graus Celcius em
Farenheit
Faa um Programa que some nmeros.

Faa uma interface grfica para o programa agenda.

143

Applets
um programa Java que executado por meio de um visualizador Applet ou atravs de um navegador da World Wide
Web (WWW).
Possibilita um aumento das capacidades da WWW uma vez
que permite:

Animaes
Imagens com som
Efeitos grficos
Programas interativos, como jogos

144

Applets
O que diferencia os applets das outras aplicaes em Java
So executados atravs de browsers

Possuem limitaes no acesso a arquivos


Possuem limitaes no acesso sobre a rede

145

Applets
A soluo CGI

Servidor
Cliente com browser
Requisio de pgina Web
O servidor Web
executa o programa
CGI que constri a
pgina Web.

Pgina Web construda


pelo programa CGI

146

Applets
A soluo Applet
Servidor

Cliente com browser


Requisio de pgina Web
Executa o cdigo
em bytecodes

O servidor Web
envia pgina Web
e cdigo em
bytecodes

Pgina Web e
bytecodes

147

Applets
Hierarquia de classes
java.lang.Object
java.awt.Component
java.awt.Container

java.awt.Panel
java.awt.Applet
148

Applets
Applet HTML
<html>
<applet codebase=localizao
code=arquivo.class
width=400
height=300>
</applet>
</html>

149

Applets
Estrutura bsica
import java.awt.*;
import java.applet.Applet;

public class indentificador extends Applet


{
corpo do applet
}

150

Applets
Exemplo Simples

import java.awt.*;
import java.applet.*;
public class Applet1 extends Applet
{
Label label1 = new Label();
public void init()
{
setLayout(null);
setSize(150,87);
label1.setText("Ola Mundo!");
add(label1);
label1.setBounds(24,12,84,48);
}
}

151

Applets
Execuo

javac Applet1.java
appletviewer exemplo1.html

152

Applets
Principais mtodos
init
start
stop

destroy
paint

o primeiro mtodo executado e


executado apenas uma vez.
executado toda vez que o applet
aparece no browser.
executado toda vez que o applet
passa a no ser exibido pelo
browser.
executado quando o browser no
precisa mais do applet.
executado toda vez que o applet
aparece no browser. Recebe uma
instncia da classe Graphics.
153

Applets
Exemplo com paint
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class Applet2 extends Applet{
int x=0, y=0;

public void init(){


setLayout(null);
setSize(426,266);
this.addMouseMotionListener(new SymMouseMotion());
}
public void paint(Graphics g){
if (x>0)g.drawRect(x, y, 30, 30);
}
154

Applets
Exemplo com paint
class SymMouseMotion extends MouseMotionAdapter
{
public void mouseMoved(MouseEvent event)
{
if (event.getSource()== Applet2.this){
x = event.getX();
y = event.getY();
repaint();
}
}
}
}
155

Applets
Ciclo do repaint, update e paint

repaint()
escala (dentro de 100 ms)

update(Graphics g)
chama

paint(Graphics g)

156

Applets
Exerccios
Construa um applet que desenhe um quadrado em uma
posio aleatria (use o mtodo Math.random()). Se o
usurio clicar no quadrado imprima uma mensagem no
quadrado (use o mtodo g.drawString).
Analise o cdigo do programa demo JumpingBox.

157

Applets
Componentes
Button
Construtores
Button()
Button(String lbl)
Mtodos mais importantes
String getLabel()
void setLabel(String lbl)
Ao : envia uma ao quando pressionado
Exemplo
Button b= new Button(ok);
158

Applets
Componentes
Label
Construtores
Label()
Label(String lbl)
Label(String lbl. Int align)
Mtodos mais importantes
String getText()
void setText(String lbl)
int getAlignment()
void setAlignment()
159

Applets
Componentes
List
Construtores
List()
List(int vlines, boolean src)
Mtodos mais importantes

void addItem(String item)


void addItem(String item, int index)
void clear()
int countItems()
void delItem(int index)
String getItem(int index)
void replaceItem(String new, int index)
160

Applets
Componentes
TextField
Construtores
TextField()
TextField(int cols)
TextField(String txt)
TextField(String txt,int cols)
Mtodos mais importantes
String getText()
int getColumns()
void setText(String txt)
161

Applets
Componentes
TextArea
Construtores
TextArea()
TextArea(int lin, int cols)
TextArea(String txt)
TextArea(String txt, int lin, int cols)
Mtodos mais importantes
String getText()
int getColumns()
int getRows()
void setText(String txt)
162

Applets
Containers
Layouts

um
um

um

north
dois

trs
dois

um
quatro
trs quatro

quatro
west

center

trs

south

BorderLayout

Posiciona conforme pontos


cardeais

GridLayout

Posiciona uma grade

GridBagLayout

Posiciona um grade com


elementos de tamanhos
diferentes

CardLayout

Sobrepe os componentes

FlowLayout

Posiciona componentes da
esquerda para direita

east

163

Applets
Containers
Layouts
Exemplo

primeiro
segundo

import java.awt.*;
public class Exemplo4 extends java.applet.Applet
{
Button but1, but2;
public void init()
{
setLayout(new BorderLayout());
but1 = new Button(primeiro);
add(North,but1);
but2 = new Button(segundo);
add(South,but2);
}
}
164

Applets
Containers
Layouts

segundo

primeiro

Inserindo novos painis


import java.awt.*;
public class Exemplo5 extends java.applet.Applet
{
Panel fundo;
public void init()
{
fundo = new Panel();
fundo.setLayout(new GridLayout(1,2));
fundo.add(new Button(primeiro));
fundo.add(new Button(segundo));
add(south,fundo);
}
}
165

Applets
Containers
redimensionando & movendo
void resize(int width, int height)
void move(int x, int y)
cores

Color c = new Color(int r, int g, int b)


padres
black, blue, cyan, darkGray, gray,
green, lightGray, magenta, orange, pink,
red, white, yellow
166

Applets
Exerccios

Faa uma calculadora com o seguinte layout:

Transforme o programa agenda em um applet.

167

Applets
Localizando arquivos
String getDocumentBase()
Imagens
Carregando
Image getImage(String lcl, String arq)
Exibindo
Graphics.drawImage(Image img, int x, int y,
ImageObserver imgO)
168

Applets
Exemplo
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class Applet4 extends Applet
{
Image img[];
private static int i=0;

public void init()


{
img = new Image[2];
img[0] = getImage(getDocumentBase(),"baleia1.jpg");
img[1] = getImage(getDocumentBase(),"baleia2.jpg");
this.addMouseListener(new SymMouse());
}
169

Applets
Exemplo
class SymMouse extends MouseAdapter
{
public void mouseClicked(MouseEvent event)
{
if (event.getSource() == Applet4.this)
repaint();
}
}

170

Applets
Exemplo

import java.awt.*;
import java.net.URL;
public class Exemplo6 extends java.applet.Applet
{
Image img;
public void init()
{ img = getImage(getDocument(),simp.bart.gif);}
public void paint(Graphics g)
{
g.drawImage(img,0,0,this);
}
}
171

Applets
MediaTracker
Usado para monitorar o carregamento de imagens.
public void init()
{
MediaTracker tr = new MediaTracker(this);
im = getImage(getDocumentBase(),img.gif);
tr.addImage(im,0);

try
{
tr.waitForId(0);
}
catch (InterruptedException excep) {}
}
172

Applets
Audio
O verso JDK1.0 oferece suporte para execuo de arquivos de
udio apenas no formato AU. O JDK1.2 estendeu este suporte
para arquivos de udio no formato AIFF, WAV, MIDI e RMF.
Classe
AudioClip
Mtodos
getAudioClip()
play()
loop()
stop()

173

Applets
Audio
Exemplo
import java.lang.*;
import java.net.URL;
public class Exemplo7 extends java.applet.Applet
{
AudioClip som;
public void init()
{
som = getAudioClip(getDocument(),ola.au);
}
public void start() {som.play();}
}
174

Applets
Obtendo parmetros
<HTML>
<applet code=SlideShow.class width=400 height=250>
<param name=nImages value=5>
<param name=imagefile value=image>
</HTML>

public void init()


{
String imageFile = getParameter(imageFile);
String nImages = getParameter(nImages);
}

175

Applets
Graphics
Graphics
drawline
drawRect
drawRoundRect
draw3DRect
drawOval
drawPolygon
drawString
fillRect
fillRoundRect
fill3DRect
fillOval
fillPolygon

constri um objeto grfico.


desenha uma linha entre dois pontos.
desenha um retngulo.
desenha um retngulo com bordas
arredondadas.
desenha um retngulo 3D.
desenha um oval.
desenha um polgono usando um vetor
de pontos.
desenha um string.
desenha um retngulo preenchido.
desenha um retngulo com bordas
arredondadas preenchido.
desenha um retngulo 3D preenchido.
desenha um oval preenchido.
desenha um polgono usando um vetor
176
de pontos preenchido.

Applets
Graphics

getColor
setColor
getFont
setFont

obtm a cor corrente.


define a cor corrente.
obtm a fonte corrente.
define a fonte corrente.

177

Applets
Exerccios

Faa um applet que mude o desenho ao lado


quando clicado.
Estude o cdigo do programa slideshow.

178

Threads
Introduo threads

Thread uma linha de execuo dentro de um mesmo


processo.
Sistemas mono tarefas como o DOS possuem apenas um
processo em execuo e apenas um Thread no processo.

Sistemas multi-tarefas como o Windows 3.1 permitem


vrios processos em execuo e apenas um Thread por
processo.
Sistemas multi-tarefas e multi-thread como o Unix e
Windows 95 permitem vrios processos em execuo e
179
vrios Threads por processo.

Threads
Introduo threads
Processos com vrios threads podem realizar mais de
uma tarefa simultaneamente.
So teis na criao de processos servidores e na criao
de animaes.
Mesmo que voc no crie mais de um thread todo applet
possui vrios threads: threads de garbage collection,
monitoramento de eventos, carga de imagens, etc.

Portanto, Java s pode ser executada em ambientes


multi-thread.
180

Threads
Introduo threads
Para criar um thread em java preciso cria um objeto da
classe thread.

Thread t1 = new Thread(ob);


O objeto Thread recebe um objeto que define o cdigo e os
dados que sero utilizados pelo thread.
O objeto recebido uma instncia de uma classe qualquer
que implementa a interface Runnable.
181

Threads
Introduo threads
A interface Runnable exige que a classe que a implementa
defina o mtodo run.
public class exemplo8 implements Runnable
O objeto thread inicia a sua execuo no mtodo run do
objeto recebido como parmetro.
Para iniciar a execuo preciso invocar o mtodo start
do objeto thread.
182

Threads
Exemplo
public class exemplo8 implements Runnable
{
private String men;
public static void main(String args[])
{
exemplo8 ob1 = new exemplo8(ola);
Thread t1 = new Thread(ob1);
t1.start();
}
public exemplo8(String men) {this.men=men;}
public void run()
{ for(;;) System.out.println(men);}
}
183

Threads
Introduo threads
Pode se criado mais de um thread sobre o mesmo objeto.
Thread t1 = new Thread(ob1);
Thread t2 = new Thread(ob1);
Neste caso alguns cuidados devem ser tomados, uma vez
que existe o compartilhamento de cdigo e dados.
O construtor Thread permite a nomeao dos threads.
Thread t1 = new Thread(ob1,primeiro thread);

184

Threads
Threads com Applets
preciso alterar a declarao de uma classe.
public class nomeapplet extends applet implements Runnable;

O mtodo start cria um novo thread.


public void start()
{
if (t1==null)
{
t1 = new Thread(this);
t1.start();
}
}

185

Threads
Threads com Applets
O mtodo run executa o cdigo
public void run()
{
// aqui vai o cdigo
}
O mtodo stop elimina o thread.

public void stop()


{
if (t1!=null) { t1.stop(); t1= null;}
}
186

Threads
Exemplo
import java.awt.Graphics;
import java.awt.Font;
public class exemplo9 extends
java.applet.Applet implements Runnable
{
char separated[];
String s = JAVA WORKSHOP - IME;
Thread t1 = null;
int x_coord = 0, y_coord = 0;
String num;
int speed=35;
boolean threadSuspended = false;
187

Threads
Exemplo
public void init()
{
resize(150,50);
setFont(new Font("TimesRoman",Font.BOLD,36));
separated = new char [s.length()];
s.getChars(0,s.length(),separated,0);
}

public void start()


{
if(t1 == null)
{t1 = new Thread(this);t1.start();}
}

188

Threads
Exemplo
public void stop() { t1 = null;}
public void run()
{
while (t1 != null)
{
try {Thread.sleep(100);}
catch (InterruptedException e){}
repaint();
}
t1 = null;
}
189

Threads
Exemplo

public void paint(Graphics g)


{ int i;
for(i=0;i<s.length();i++)
{
x_coord = (int) (Math.random()*10+15*i);
y_coord = (int) (Math.random()*10+36);
g.drawChars(separated,i,1,
x_coord,y_coord);
}
}
190

Animao
Animao exibir uma figura que muda com o
tempo

No momento o suporte a animao da API central do Java


limitado.

Espera-se para o final de 1997 uma API que d suporte


avanado para animao.
A animao pode ser controlado por um thread que
executado em um certo intervalo pr-definido.

191

Animao
Exemplo bsico de animao in-place.
import java.awt.*; import java.applet.Applet;
public class exemplo10 extends Applet implements
Runnable
{
Image
imgs[];
int
ind=0;
Thread
t1;
public void init()
{imgs = initImgs(); t1=new Thread(this);
t1.start();}
public void paint(Graphics g)
{g.draw.Image(imgs[ind],0,0,this);}
...

192

Animao
Exemplo bsico de animao in-place.
...
public void start() {
if (t1 == null) { t1 = new Thread(this);
t1.start();}
}
public void stop() {
if (t1 != null) {t1.stop();t1 = null;}
}
public void run() {
while (true){
try {Thread.sleep(100};}
catch(InterruptedException ex){}
repaint();
ind=++ind % imgs.length;
}

}
}

193

Animao
Problemas com o exemplo

Ele no permite interromper a animao

O repaint chama o update default que repinta todo o


fundo, o que causa flicker na animao
Existe um problema relacionado com a integridade da
varivel ind. A varvel atualizada pelo Thread t1
(run) e lida pelo Thread update (paint).
194

Animao
permitir interromper a animao
boolean pause = false;
public boolean mouseDown(Event e, int x, int y)
{
if (pause) {t1.resume();}
else
{t1.suspend();}
pause = !pause;
return true;
}

195

Animao
Eliminar o flicker
Default
public void update(Graphics g)
{
g.setColor(getBackground());
g.fillRect(0,0,width, height);
g.setColor(getForeground());
paint(g);
}

Mudana
public void update(Graphics g)

{paint(g);}
196

Animao
Eliminando conflitos
public synchronized void paint(Graphics g)
{
g.draw.Image(imgs[ind],0,0,this);
}

public synchronized void mundaInd()


{
ind = ++ind % imgs.length;
}
197

Animao
Copiando a figura
public void drawStickFigure (Graphics g, int nX,
{
g.drawOval (nX + 10, nY + 20, 20, 40);
g.drawLine (nX + 20, nY + 60, nX + 20, nY
g.drawLine (nX + 10, nY + 70, nX + 30, nY
g.drawLine (nX + 10, nY + 150, nX + 20, nY
g.drawLine (nX + 20, nY + 100, nX + 30, nY
}
public void paint (Graphics g, Applet Parent)
{
if (bFirstTime) {
bFirstTime = false;
drawStickFigure (g, nX, nY);
}
else { g.copyArea (nX, nY, 35, 155, 5, 0);}
}

int nY)

+ 100);
+ 70);
+ 100);
+ 150);

198

Animao
Double-buffer
offScreenImage = createImage (nWidth, nHeight);
offScreenGraphic = offScreenImage.getGraphics();
...
offScreenGraphic.setColor (Color.lightGray);
offScreenGraphic.fillRect (0, 0,nWidth, nHeight);
offScreenGraphic.setColor (Color.black);
...
offScreenGraphic. drawOval(10,10,20,20);
...
g.drawImage (offScreenImage, 0, 0, this);

199

Animao
Ticker-Tape
class TextScrolling extends AnimationObject
{
String pcMessage; // The message
int nXPos;
// The location of the message
int nYPos;
// The location of the message
int nAppletWidth; // The width of the applet
int nMessageWidth; // The width of the message
public TextScrolling (String pcMsg, int nWide)
{
pcMessage = pcMsg;
nAppletWidth = nWide;
nMessageWidth = -1;
nYPos = -1;
nXPos = 0;
}

200

Animao
Ticker-Tape
public void paint (Graphics g, Applet parent)
{
if (nYPos < 0)
{
nYPos = (g.getFontMetrics ()).getHeight ();
char pcChars [];
pcChars = new char [pcMessage.length() + 2];
pcMessage.getChars
(0, pcMessage.length() - 1, pcChars, 0);
nMessageWidth = (g.getFontMetrics ()).charsWidth
(pcChars, 0, pcMessage.length());
}
g.drawString (pcMessage, nXPos, nYPos);

201

Animao
Ticker-Tape

public void clockTick ()


{
if (nMessageWidth < 0)

return;

// Move Right
nXPos -= 10;
if (nXPos < -nMessageWidth)
nXPos = nAppletWidth - 10;
}

202

Animao
Ticker-Tape
public void run()
{
int ndx = 0;
Thread.currentThread().setPriority
(Thread.MIN_PRIORITY);

while (size().width > 0 && size().height > 0


&& kicker != null)
{
AnimatedObjects[0].clockTick ();
repaint();
try {Thread.sleep(nSpeed);}
catch (InterruptedException e){}
}
}

203

Animao
Exerccios

Faa o desenho abaixo dar cambalhotas .


Adicione um boto para alterar a direo das
cambalhotas.

204

Programao em Redes
MIME

Camada de Aplicao

FTP

HTTP

Camada de Transporte

SMTP

TCP

Camada de rede
Camada fsica
FTP
HTTP
IP
MIME

- File Transfer Protocol


- Hypertext Transfer Protocol
- Internet Protocol
- Multi-purpose Internet Mail Extensions

TELNET

SNMP

UDP

IP
Ethernet, X.25, Token Ring
SMTP
SNMP
TCP
UDP

- Simple Mail Transfer Protocol


- Simple Network Management Protocol
- Transmission Control Protocol
- User Datagram Protocol

205

Programao em Redes
Dados

Aplicao

TCP Dados
Header

Transporte

IP
TCP Dados
Header Header

Rede

Ethernet
Header

Fsica

IP
TCP Dados
Header Header

206

Programao em Redes
Identificao de Hosts

Host meucomp.com.br
IP: 200.18.46.12

Host outrocomp.edu
IP: 205.50.30.75

Internet

207

Programao em Redes
Identificao de Processos (Portas)

Protocolo
HTTP
echo
FTP
SMTP
Finger
Daytime
pop3

Porta
80
7
20, 21
25
79
13
110
208

Programao em Redes
Alternativas de Computao Remota
Sockets
HTTP (CGI, ASP,JSP)
Common Object Request Brocker Architecture (CORBA)
Remote Method Invocation (RMI)
Distributed Component Object Model (DCOM)

209

Programao em Redes
Sockets
Cliente

Servidor

Sequncia de bytes

HOST:aaa.bbb.ccc
Port: iiii

HOST:xxx.yyy.zzz
Port: nnnn

210

Programao em Redes
CGI
Cliente

Servidor

Solicitao de pgina

Servidor Web

Web Browser
Pgina construda

Programa CGI

211

Programao em Redes
CORBA
Cliente

Servidor

Objeto Cliente

Objeto Servidor
ORB

Server Stub

Servidor Virtual
212

Programao em Redes
O pacote java.net contm as classes e interfaces usadas para
programao de sistemas em rede com Java. As classes podem
ser enquadradas em trs categorias:
Classes para comunicao bsica em rede. Tratam da
comunicao em baixo nvel entre aplicaes. Outros
protocolos podem ser implementados usando como base
esta comunicao bsica.
Classes para comunicao dentro da Web. Estas classes
provem facilidades para acessar contedos por meio de
URLs.
Classes para tratamento dos formatos estendidos da Web.
Utilizadas para tratar novos protocolos e tipos MIME.
213

Programao em Redes
Classe
Socket

Descrio
Prov um socket cliente para comunicao orientada
conexo via protocolo TCP.
ServerSocket
Prov um socket servidor para comunicao orientada
conexo via protocolo TCP.
DatagramSocket Prov um socket UDP para comunicao no orientada
conexo.
DatagramPacket Representa um datagrama que pode ser enviado usando
DatagramSocket.
InetAddress
Representa os dados de um Host (Nome e endereo IP)

214

Programao em Redes
Comunicao orientada conexo (cliente)
import java.io.*;
import java.net.*;
public class ClienteData {
public static void main(String[] args) throws Exception{
Socket socket = null;
BufferedReader in = null;
socket = new Socket(args[0], 13);
in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
System.out.println("Data: " + in.readLine());
}
in.close();
socket.close();
}
}
215

Programao em Redes
Comunicao orientada conexo (Servidor)
import java.io.*;
import java.net.*;
import java.util.*;

public class ServerData {


public static void main(String[] args) throws IOException {
SeverSocket ssocket = null;
Socket socket = null;
BufferedWriter out = null;
ssocket = new SeverSocket (5013,5);
for(;;) {
socket = ssocket.accept();
out = new BufferedWriter (new OuputStreamWriter (
socket.getOuputStream()));
out.write((new Date()).toString()+\n);
out.flush();
}
}

216

Programao em Redes
Comunicao orientada conexo (Servidor Multithreaded)
import java.net.*;
import java.io.*;
public class ServerData
{
public static void main(String args[]) {
ServerSocket ssocket=null;
try { ssocket = new ServerSocket(pt); }
catch(Exception e) {System.err.println(e); System.exit(1);}
while(true){
try {
Socket socket = ssocket.accept();
(new serversec(socket)).start();
}
catch(Exception e) {System.err.println(e);}
}
}

217

Programao em Redes
Comunicao orientada conexo (Servidor Multithreaded)
class serversec extends Thread
{
Socket socket;
public serversec(Socket aSocket) {socket = aSocket;}
public void run() {
try {
BufferedWriter out = new BufferedWriter (
new OuputStreamWriter (
socket.getOuputStream()));
out.write((new Date()).toString()+\n);
out.flush();
out.close();
socket.close();
} catch(Exception e) {System.err.println(e);}
}

}
218

Programao em Redes
Comunicao por meio URL

Um URL (Uniform Resource Locator) uma referncia (um


endereo) a um recurso na Internet. O URL dividido em partes,
sendo que apenas a primeira parte obrigatria. A maioria das
URLs dividida em trs partes:

Informao sobre o Host

http://dpi.ufv.br/professores.html

Protocolo

endereo do recurso no Host


219

Programao em Redes
Comunicao por meio URL

A parte do protocolo define o protocolo que deve ser usado para


acessar o recurso. Os protocolos mais comuns so FTP, HTTP e
file, este ltimo indicando que o recurso se encontra no sistema de
arquivos local. O protocolo seguido do caractere :.
http://java.sun.com:80/doc/tutorial.html
http://infax.com.br."claudio"."1234"/base/vendas

220

Programao em Redes
Comunicao por meio URL

A linguagem Java fornece as seguintes classes para manipulao de


URLs:
Classe
URL
URLConnection
URLEncoder

Descrio
Representa um URL
Classe abstrata que representa uma conexo entre uma aplicao e
um URL. Instncias desta classe podem ser usadas para ler e
escrever no recurso referenciado pela URL.
Usada para lidar com o formato MIME.

URL dpi = new URL("http://www.dpi.ufv.br");


URL profs = new URL (dpi,professores.html);
221

Programao em Redes
Comunicao por meio URL
import java.net.*;
import java.io.*;
public class LeURL {
public static void main(String[] args) throws Exception {
URL url = new URL(args[0]);
BufferedReader in = new BufferedReader(
new InputStreamReader(url.openStream()));
String linha;

while ((linha = in.readLine()) != null)


System.out.println(linha);
in.close();
}
}
222

Introduo a JDBC
JDBC (Java Database Connectivity) uma API projetada
para permitir para conectar aplicaes escritas em Java com
gerenciadores de banco de dados.
Os drivers JDBC devem suportar o nvel de entrada do
padro ANSI SQL-2.

baseado no X/Open SQL Call Level Interface.

223

Introduo a JDBC
Modelos de Acesso a Servidores
Duas Camadas
Aplicao Java

Trs Camadas
Aplicao Java
ou Applet

JDBC
HTTP, RMI, CORBA

Aplicao Servidora
Java
JDBC

DBMS
DBMS
224

Introduo a JDBC
Tipos de Drivers JDBC
1. Ponte JDBC-ODBC com driver ODBC

SGBD1
Cliente
Java

Ponte
JDBC-ODBC

SGBD2
SGBD3

225

Introduo a JDBC
Tipos de Drivers JDBC
2. Driver Java parcial e Api Nativa

Cliente
Java

JDBC Java &


Cdigo Binrio

Protocolo do SGBD

SGBD

3. Driver puro Java e protocolo de rede

SGBD1
JDBC DRIVER (100% Java)

Cliente
Java

Servidor de
acesso

SGBD2
SGBD3
226

Introduo a JDBC
Tipos de Drivers JDBC
4. Driver Java Puro e protocolo nativo

Cliente
Java

JDBC Java
(100% Java)

Protocolo do SGBD

SGBD

227

Introduo a JDBC
Obtendo os Drivers JDBC
Informaes sobre como obter drivers JDBC podem ser
obtidas no site http://www.javasoft.com/products/jdbc.
Outra alternativa acessar as pginas dos fabricantes de
SGBD, para verificar se existe driver disponvel.

228

Introduo a JDBC
Preparando um Banco de Dados

alunos
matricula
1
2
3
4
5
6

nome
Railer Costa Freire
Alexandre Alto Pigatti
Andr M. A. Landro
Ana Maria Freitas
Claudia Maria Oliveira
Alexandra Moreira
229

Introduo a JDBC
Preparando um Banco de Dados

livros
codlivro
1
2
3
4
5
6
7
8
9
10

titulo
Curso Pratico de Java
Curso Pratico de Java
Introduo a Compiladores
Fundamentos de Banco de Dados
Redes de Computadores
Redes de Computadores Fcil
Lgica matemtica
Engenharia de Software para Leigos
Aprenda Computao Grfica em duas horas
Aprenda Inteligncia Artificial em 5 anos

volume
1
2
1
1
1
2
1
1
1
1
230

Introduo a JDBC
Preparando um Banco de Dados

emprestimos
codlivro matricula data_emprestimo data_devolucao
1
1
01/01/99
10/01/99
7
3
03/01/99
13/01/99
9
6
12/01/99
22/01/99
1
3
20/01/99
30/01/99
4
2
03/02/99
13/02/99
10
2
12/02/99
22/02/99

231

Introduo a JDBC
Configurando o ODBC

232

Introduo a JDBC
Configurando o ODBC

233

Introduo a JDBC
JDBC-ODBC Exemplo
import java.sql.*;
import java.net.URL;
class jdbc {
public static void main(String a[]) throws Exception {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con =
DriverManager.getConnection("jdbc:odbc:biblioteca");
Statement stmt = con.createStatement();
ResultSet rs =
stmt.executeQuery("SELECT NOME FROM alunos");
System.out.println("Nome");
while(rs.next())
System.out.println(rs.getString("nome"));
stmt.close();
con.close();
}
}
234

Introduo a JDBC
Estabelecendo a conexo
O formato padro deste tipo de URL o seguinte:
jdbc:<subprotocolo>:<identificador>

A sintaxe para o subprotocolo odbc a seguinte:

jdbc:odbc:<fonte de dados>[;<atributo>=<valor>]*
onde <atributo> e <valor> representam parmetros a serem
passados para o gerente de conexo do Banco de Dados.
235

Introduo a JDBC
URL
jdbc:odbc:biblioteca
jdbc:odbc:bd1;CacheSize=20
jdbc:odbc:contas;UID=ana;PWD=sght
jdbc:dbnet://dbhost:1313/dbbib

Descrio
Referencia fonte de dados biblioteca via
ponte JDBC-ODBC.
Referencia fonte de dados bd1 via ponte
JDBC-ODBC. definido o tamanho do
cache.
Referencia fonte de dados contas via
ponte JDBC-ODBC. passado tambm
o nome do usurio e a senha.
Referencia fonte de dados dbbib no host
remoto dbhost via subprotocolo dbnet.
passado tambm o nmero da porta
usada no acesso.

236

Introduo a JDBC
Criando e Executando Comandos

Statement stmt = con.createStatement();


stmt.executeUpdate("INSERT INTO alunos VALUES(7, 'Ana mia')");

237

Introduo a JDBC
Recuperando Valores

getByte
getShort
getInt
getLong
getFloat
getDouble
getBigDecimal
getBoolean
getString
getBytes
getDate
getTime
getTimestamp
getAsciiStream
getUnicodeStream
getBinaryStream
getObject

T
I
N
Y
I
N
T

S
M
A
L
L
I
N
T

I
N
T
E
G
E
R

B
I
G
I
N
T

R
E
A
L

F
L
O
A
T

D
O
U
B
L
E

D
E
C
I
M
A
L

N
U
M
E
R
I
C

B
I
T

C
H
A
R

V
A
R
C
H
A
R

L
O
N
G
V
A
R
C
H
A
R

X
x
x
x
x
x
x
x
x

x
X
x
x
x
x
x
x
x

x
x
X
x
x
x
x
x
x

x
x
x
X
x
x
x
x
x

x
x
x
x
X
x
x
x
x

x
x
x
x
x
X
x
x
x

x
x
x
x
x
X
x
x
x

x
x
x
x
x
x
X
x
x

x
x
x
x
x
x
X
x
x

x
x
x
x
x
x
x
X
x

x
x
x
x
x
x
x
x
X

x
x
x
x
x
x
x
x
X

x
x
x
x
x
x
x
x
x

x
x
x
x
x

x
x
x
x
x

x
x
x
X
X

B
I
N
A
R
Y

V
A
R
B
I
N
A
R
Y

L D
O A
N T
G E
V
A
R
B
I
N
A
R
Y

T T
I
I
M M
E E
S
T
A
M
P

x
X

x
X

x
x

x
x
X

x
X
x

x
x
x
x

x
x
x
x

x
x
X
x

238
x

Introduo a JDBC
Recuperando Valores
possvel recuperar o valor da coluna passando como
parmetro o nmero da coluna no lugar de seu nome. Neste
caso a recuperao no nome do aluno no exemplo XIII.1 ficaria
na seguinte forma:

rs.getString(1);

239

Introduo a JDBC
Controle de Transao e nveis de Isolamento
Transao
Uma Transao um conjunto de operaes realizadas sobre um
banco de dados tratadas atomicamente, em outras palavras, ou
todas operaes so realizadas e o seu resultado registrado
permanentemente na base de dados ou nenhuma operao
realizada.

240

Introduo a JDBC
Controle de Transao e nveis de Isolamento
Transao
Por default, o banco de dados trata cada operao como uma
transao, realizando implicitamente uma operao de commit ao
fim de cada uma delas. A operao de commit registra
permanentemente o resultado da transao na tabela.
No entanto, existem situaes onde necessrio tratar como uma
transao um conjunto de operaes, e no apenas uma transao.

241

Introduo a JDBC
Controle de Transao e nveis de Isolamento
Transao
Por exemplo, suponha que em um Banco de Dados de uma agncia
bancria exista uma tabela com informaes sobre a conta de
corrente e outra com informaes sobre contas de poupana.
Suponha tambm que um cliente deseje transferir o dinheiro da
conta corrente para uma conta de poupana. Essa transao
constituda pelas seguintes operaes:
1- Caso exista saldo suficiente, subtrao do montante da
transferncia do saldo da conta corrente.
2- Adio do montante da transferncia ao saldo da conta de
poupana.
242

Introduo a JDBC
Controle de Transao e nveis de Isolamento
Transao
As operaes acima precisam ocorrer totalmente ou o efeito de
nenhuma delas deve ser registrado na base de dados. Caso contrrio
podemos ter uma situao onde o dinheiro sai da conta corrente
mas no entra na conta da poupana. Este estado, onde as
informaes do banco de dados no reflete a realidade, chamado
de estado inconsistente.

243

Introduo a JDBC
Controle de Transao e nveis de Isolamento
Transao
De modo a obter esse controle sobre as transaes necessrio
desabilitar o modo de auto-commit. Isto feito por meio mtodo
setAutoCommit() do objeto Connection.
con.setAutoCommit(false);

A partir do momento em que executado o comando acima, o


programador responsvel pela indicao do final da transao,
por meio da execuo do mtodo commit() do objeto
Connection.
con.commit();
244

Introduo a JDBC
Controle de Transao e nveis de Isolamento
Transao
Se alguma exceo for levantada durante a execuo de qualquer
operao da transao, o programador pode usar o mtodo
rollback() para desfazer as operaes j realizadas aps o
ltimo commit().

245

Introduo a JDBC
Controle de Transao e nveis de Isolamento
Transao
con.setAutoCommit(false);
try
{
Statement stmt = con.createStatement();
stmt.executeUpdate(UPDATE ... );
stmt.executeUpdate(UPDATE ... );
con.commit();
con.setAutoCommit(true);
stmt.close();
} catch(Exception e){con.rollback();}
con.setAutoCommit(true);
246

Introduo a JDBC
Controle de Transao e nveis de Isolamento
Nveis de isolamento
Alm da atomicidade outra propriedade desejvel em uma
transao o isolamento. A propriedade de isolamento implica que
uma transao no afetada pelas operaes realizadas por outras
transaes que esto sendo realizadas concorrentemente.

247

Introduo a JDBC
Controle de Transao e nveis de Isolamento
Nveis de isolamento
O isolamento completo entre transaes prejudica muito a
execuo concorrente de transaes e pode ser desnecessrio em
determinados tipos de aplicaes. Por isso os SGBDs permitem que
o programador defina o nvel de isolamento entre as transaes. De
acordo com o relaxamento do isolamento certos problemas devido
a interferncia entre as transaes podem ocorrer e o programador
deve estar ciente disso.

248

Introduo a JDBC
Controle de Transao e nveis de Isolamento
Nveis de isolamento
O nmero de nveis de isolamento, sua nomenclatura e caractersticas
depende do SGBD utilizado. Descreveremos os nveis de isolamento
definidos no pacote java.sql.
Para exemplificar os problemas que podem ocorrer devido a
interferncia entre transaes utilizaremos um banco de dados
exemplo com a seguinte tabela:

NumCC
10189-9
20645-7

Saldo
200,00
300,00
249

Introduo a JDBC
Controle de Transao e nveis de Isolamento
Nveis de isolamento
Read uncommitted - o nvel menos restritivo. Pode ocorrer
leituras de registros no committed (Dirty reads). Usados em onde
no existe concorrncia ou no existem alteraes em registros ou
quando essas alteraes no so relevantes. Exemplo de problema:
Uma transao deve transferir R$50,00 da conta 10189-9 para a
conta 20645-7 e uma segunda transao deve somar R$70,00 conta
10189-9. A figura abaixo mostra o estado inicial e o estado final
desejado da tabela:

250

Introduo a JDBC
Controle de Transao e nveis de Isolamento
Nveis de isolamento
Read uncommitted - o nvel menos restritivo. Pode ocorrer
leituras de registros no committed (Dirty reads). Usados em onde
no existe concorrncia ou no existem alteraes em registros ou
quando essas alteraes no so relevantes. Exemplo de problema:
Uma transao deve transferir R$50,00 da conta 10189-9 para a
conta 20645-7 e uma segunda transao deve somar R$70,00 conta
10189-9. A figura abaixo mostra o estado inicial e o estado final
desejado da tabela:

NumCC
10189-9
20645-7

Saldo
200,00
300,00

NumCC
10189-9
20645-7

Saldo
220,00
350,00
251

Introduo a JDBC
Controle de Transao e nveis de Isolamento
Nveis de isolamento
Cada transao divida em operaes de leitura e escrita. Suponha
que o intercalamento das operaes seja feito como mostrado abaixo:

Transao 1

Transao 2

leitura do saldo 10189


Escrita do Saldo-50,00
leitura do saldo 10189
leitura do saldo 20645
(falha na transao,
realizado rollback)

Escrita do Saldo+70,00

252

Introduo a JDBC
Controle de Transao e nveis de Isolamento
Nveis de isolamento
A tabela resultante, mostrada abaixo estar em um estado
inconsistente.

NumCC
10189-9
20645-7

Saldo
220,00
300,00

253

Introduo a JDBC
Controle de Transao e nveis de Isolamento
Nveis de isolamento
Read committed - Somente registros committed podem ser lidos.
Evita o problema de Dirty reads, no entanto duas leituras de um
mesmo item em uma mesma transao podem possuir valores
diferentes, uma vez que o valor pode ser mudado por outra transao
entre duas leituras.
Repeatable Read - Somente registros committed podem ser lidos,
alm disso impede a alterao de um item lido pela transao. Evita
o problema de Dirty reads e o problema do non-repeatable Read .

254

Introduo a JDBC
Controle de Transao e nveis de Isolamento
Nveis de isolamento
Serializable - o nvel mais restritivo. Impede Dirty reads e nonrepeatable reads. Alm disso impede o problema de phantom reads
onde um conjunto de registros satisfazendo a condio WHERE
lido enquanto outra transao insere novos registros que satisfazem
a condio.

255

Introduo a JDBC
Controle de Transao e nveis de Isolamento
Nveis de isolamento
Para se definir o nvel de isolamento na linguagem Java usa-se um
objeto DatabaseMetaData que obtido por meio do objeto
getMetaData() do Connection. Primeiro preciso saber se o
SGBD suporta o nvel de isolamento desejado para depois definir o
nvel.
TRANSACTION_NONE
TRANSACTION_READ_UNCOMMITTED
TRANSACTION_READ_COMMITTED
TRANSACTION_REPEATABLE_READ
TRANSACTION_SERIALIZABLE
256

Introduo a JDBC
Controle de Transao e nveis de Isolamento
Nveis de isolamento
DatabaseMetaData meta=con.getMetaData();
if(meta.supportsTransactionIsolationLevel(
con.TRANSACTION_READ_COMMITTED)) {
con.setTransactionIsolation(
con.TRANSACTION_READ_COMMITTED);
}
else return;

257

Introduo a JDBC
Prepared Statements
Cada vez que se executa um comando SQL passado por meio de uma String. Este
String deve ser analisado pelo processador de SQL do SGBD que ir, no caso da
String estar sintaticamente correta, gerar um cdigo binrio que ser executado para
atender solicitao.

Todo esse processo caro e sua execuo repetidas vezes ter um impacto
significativo sobre o desempenho da aplicao e do SGBD como um todo.
Existem duas abordagens para tentar solucionar esse problema: Comandos
preparados (prepared statements) e procedimentos armazenados (stored procedures)
Discutiremos primeiramente os prepared statements.

258

Introduo a JDBC
Prepared Statements
Prepared Statement indicado nos casos onde um comando ser executado vrias vezes
em uma aplicao.
Neste caso melhor compilar o comando uma nica vez e toda vez que for necessrio
execut-lo basta enviar o comando compilado.
Alm disso, o comando pr-compilado pode ser parametrizado, tornando-o mais
genrico e, portanto, apto a expressar um maior nmero de consultas.
Para criar um Prepared Statement necessrio obter um objeto
PreparedStatement por meio do mtodo prepareStatement() do objeto
Connection, passando como argumento um comando SQL.

PreparedStatement pstmt = con.prepareStatement(

INSERT INTO alunos(matricula,nome) VALUES(?, ? ));


259

Introduo a JDBC
Prepared Statements
O comando anterior insere uma nova linha na tabela alunos com os valores das colunas
matricula e nome passados por parmetro. O caractere ? representa o parmetro. Este
tipo de comando s possui valor tendo parmetros, caso contrrio teria pouca chance de
ser reutilizado.
Para executar o comando devemos especificar o valor dos parmetros e executar o
comando, como mostrado no exemplo abaixo:

pstmt.clearParameters();
pstmt.setInt(1,8);
pstmt.setString(2,Clara Maria);

pstmt.executeUpdate();
260

Introduo a JDBC
Prepared Statements
Antes de especificar os parmetros necessrio limpar qualquer outro
parmetro previamente especificado.
Para especificar os parmetros so utilizados um conjunto de mtodos
com o nome no formato setXXX(), onde XXX o tipo sendo passado. O
primeiro parmetro do mtodo setXXX() o ndice da ocorrncia do
caractere ? que ser substitudo pelo valor. O segundo parmetro o
valor que ser transmitido.

261

Introduo a JDBC
Procedimentos Armazenados
A maioria dos SGBDs possuem algum tipo de linguagem de programao interna, como
por exemplo a PL/SQL do Oracle ou mesmo Java e C/C++.
Estas linguagens permitem que os desenvolvedores insiram parte do cdigo da
aplicao diretamente no banco de dados e invoquem este cdigo a partir da aplicao.
Esta abordagem possui as seguintes vantagens:
Reuso de cdigo - o cdigo precisa ser escrito apenas uma vez e usado em vrias
aplicaes, comunicando com vrias linguagens.
Independencia entre a aplicao e o esquema do BD - Se o esquema mudar,
provavelmente apenas os procedimentos armazenados.

Desempenho - os procedimentos so previamente compilados, eliminando esta


etapa.
Segurana - as aplicaes possuem privilgio apenas para execuo de
procedimentos armazenados, evitando assim acessos no autorizados.
262

Introduo a JDBC
Procedimentos Armazenados
A sintaxe dos procedimentos armazenados depende do SGBD em questo. Utilizaremos
um exemplo em PL/SQL. No exemplo abaixo o procedimento retorna o nome do aluno
a partir de sua matricula.
CREATE OR REPLACE PROCEDURE sp_obtem_nome
(id IN INTEGER, Nome_aluno out VARCHAR2)IS
BEGIN
SELECT nome INTO Nome_aluno
FROM alunos
WHERE matricula = id;
END;
/

263

Introduo a JDBC
Procedimentos Armazenados
Para invocar o procedimento anterior de dentro de uma aplicao Java necessrio
obter um objeto CallableStatement por meio do mtodo prepareCall() do
objeto Connection, passando como argumento um comando SQL.

CallableStatement cstmt =
con.prepareCall("{ CALL sp_obtem_nome(?,?)}");
cstmt.registerOutParameter(2, Types.VARCHAR);
cstmt.setInt(1, 3);
cstmt.execute();
System.out.prinln(O nome do aluno numero 3 :
+cstmt.getString(2);

264

Introduo a JDBC
Agenda Eletrnica verso JDBC (Agenda)
import
import
import
import

java.util.*;
java.io.*;
java.sql.*;
java.net.URL;

public class agenda


{
Connection con=null;
public agenda()throws Exception
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con=DriverManager.getConnection("jdbc:odbc:agenda");
}
public void CloseAgenda()
{
if (con != null) try{con.close();}catch(Exception e){};
265
}

Introduo a JDBC
Agenda Eletrnica verso JDBC (Agenda)
public void inserir(pessoa p)
{
if (con == null) return;
try
{
Statement stmt = con.createStatement();
stmt.executeUpdate("INSERT INTO pessoas(nome,telefone) "+
"values('"+p.getNome()+"','"+p.getTel()+"')");

stmt.close();
}catch(Exception e) {System.err.println(e);}
}

266

Introduo a JDBC
Agenda Eletrnica verso JDBC (Agenda)
public Enumeration getLista() throws Exception {
if (con == null) return null;
Vector pessoas = new Vector();
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery
("SELECT Nome, Telefone FROM pessoas");
while(rs.next())
pessoas.addElement(new pessoa(rs.getString("Nome"),
rs.getString("Telefone")));
stmt.close();
return pessoas.elements();
}

267

Introduo a JDBC
Agenda Eletrnica verso JDBC (Mtodo transmit do
Applet
public void transmit(int port,String mensagem)
throws Exception {
BufferedWriter
soutput;
BufferedReader
cinput;
Socket
clisoc=null;
if (clisoc != null) clisoc.close();
clisoc = new
Socket(InetAddress.getByName(getCodeBase().getHost()),
port);
soutput = new BufferedWriter (new
OutputStreamWriter(clisoc.getOutputStream()));
cinput = new BufferedReader(new
InputStreamReader(clisoc.getInputStream()));
soutput.write(mensagem+"\n");
soutput.flush();
268

Introduo a JDBC
Agenda Eletrnica verso JDBC (Mtodo transmit do
Applet
String losRet = cinput.readLine();
while (losRet.charAt(0)!='#') {
Saida.setText(Saida.getText()+losRet+"\n");
losRet = cinput.readLine();
}
Thread.sleep(500);
soutput.close();
clisoc.close();
}

269

Comrcio Eletrnico com a


Linguagem Java
Alcione de Paiva Oliveira
Universidade Federal de Viosa

270

Comrcio Eletrnico
A popularizao do acesso a Internet viabilizou uma nova forma
de se fazer negcios: o comrcio eletrnico.
A necessidade de se adaptar rapidamente a essa nova forma de se
fazer negcios para no perder a competitividade fez com que
ocorresse uma verdadeira corrida do ouro.
Crena no desaparecimento do comrcio tradicional.

271

Formas de CE
B2C (business to customer) - entre empresa e consumidor.
Exemplo: uma pessoa compra um livro na Internet.

272

Formas de CE
B2B (business to business) - entre empresas.
Exemplo: uma empresa de automveis comunica aos fornecedores
de auto-peas a necessidade de se repor o estoque.

Obs: Neste tipo de aplicao a linguagem XML possui um papel


muito importante.
273

Protocolos para CE
O protocolo bsico da Web o HTTP, que faz parte da suite de
protocolos TCP/IP.

Este protocolo possui uma deficincia bsica para a implantao


do CE: a falta de controle de sesso.
Ou seja, cada requisio tratada isoladamente, sem ligao com
requisies prvias.

No CE necessrio acompanhar as aes do cliente (exemplo:


metfora do carrinho de compras).
Para implantar o acompanhamento da sesso do usurio so
usadas recursos como o uso de cookies e campos escondidos. 274

Requisitos para Solues de CE


Expandir a base de consumidores.
Possuir regime de operao 24x7 (24 horas por dia, 7 dias por
semana).
Reduzir o custo da transao de vendas.
Ser escalvel.
Possuir interfaces com os sistemas da empresa.
Empregar novos mtodos de pagamento na Internet (carto de
crdito, dinheiro eletrnico, etc.)
Oferecer um suporte melhor para a pr e ps venda.

275

Metfora Bsica para o B2C

A metfora mais utilizada no B2C a do carrinho de compras.


Nesta metfora o cliente navega pelo site e seleciona os itens que
deseja adquirir, colocando em um carrinho de compras virtual.
Note que existe a necessidade de acompanhar a interao do
usurio com o site (sesso).
276

Solues para CE
CGI (Common Gateway Interface)
ASP (Active Server Pages). tecnologia desenvolvida pela
Microsoft.
PHP (Personal Home Page)
Servlets/JSP (Java Server Pagers)
ColdFusion

277

Solues Java para CE


Java oferece trs tipos de solues para CE:
Applets - Programas Java que rodam no Navegador
Internet da mquina do Cliente.

Servlets - Programas Java que rodam no no servidor


Internet atendendo requisies.
JSP - Pginas contendo scripts Java que quando
carregadas iro gerar Servlets.

278

Servlets
Servlets so programas Java que executam em associao com
servidores Web, atendendo requisies por informao na forma
de pginas HTML.
Servlets no possuem interface grfica e podem trabalhar com
vrios tipos de servidores e no s com servidores Web, uma vez
que a API dos Servlets no assume nada a respeito do ambiente
do servidor.

279

Servlets
Servlets prov uma soluo interessante para o relacionamento
cliente/servidor na Internet, tornando-se uma alternativa para a
implantao de comrcio eletrnico.

280

Servlets
Applets X Servlets
Apesar de ser uma soluo robusta existem problemas no uso
de Applets: o programador precisa contar com o fato do
usurio possuir um navegador com suporte a Java e na verso
apropriada.
Voc no pode contar com isso na Internet, principalmente se
voc deseja estender a todos o acesso s suas pginas. Em se
tratando de Servlets, no lado do cliente pode existir apenas
pginas HTML, evitando restries de acesso s pginas.

281

Servlets
CGI X Servlets
Scripts CGI (Common Gateway Interface), acionam programas no
servidor.

O uso de CGI sobrecarrega o servidor uma vez cada requisio de


servio acarreta a execuo de um programa executvel no servidor.
Se houver algum erro na entrada de dados o CGI tem que produzir
uma pgina HTML explicando o problema.

Possuem baixa portabilidade e escalabilidade. Como ponto positivo


suportam vrias linguagens.
282

Servlets
CGI X Servlets
J os Servlets so carregados apenas uma vez e como so
executados de forma multi-thread podem atender mais de uma
mesma solicitao simultaneamente.

283

Servlets
A API Servlet
A API Servlet composta por um conjunto de interfaces e
Classes. O componente mais bsico da API interface
Servlet. Ela define o comportamento bsico de um Servlet.
public interface Servlet {
public void init(ServletConfig config)
throws ServletException;
public ServletConfig getServletConfig();
public void service(ServletRequest req,
ServletResponse res)
throws ServletException, IOException;
public String getServletInfo();
public void destroy();
}
284

Servlets
A API Servlet

O mtodo service() responsvel pelo tratamento de


todas das requisies dos clientes.
Os mtodos init() e destroy() so chamados quando o
Servlet carregado e descarregado, respectivamente.

O mtodo getServletConfig() retorna um objeto


ServletConfig que contm os parmetros de inicializao
do Servlet.
O mtodo getServletInfo() retorna um String contendo
informaes sobre o Servlet, como verso e autor.
285

Servlets
A API Servlet
Tendo como base a interface Servlet o restante da API
Servlet se organiza hierarquicamente como mostra a figura
abaixo.
Servlet

GenericServlet

HttpServlet

286

Servlets
A API Servlet
A classe GenericServlet implementa
genrico e geralmente no usada.

um servidor

A classe HttpServlet mais utilizada e foi especialmente


projetada para lidar com o protocolo HTTP.
public abstract class HttpServlet
extends GenericServlet
implements java.io.Serializable

287

Servlets
A API Servlet
A classe derivada da HttpServlet deve sobrescrever pelo
menos um dos mtodos abaixo:
doGet
doPost
doPut
doDelete

para tratar requisies HTTP GET.


para tratar requisies HTTP POST.
para tratar requisies HTTP PUT.
para tratar requisies HTTP DELETE.

O mtodo service(), que recebe todas as requisies, em


geral no sobrescrito, sendo sua tarefa direcionar a
requisio para o mtodo adequado.
288

Servlets
Exemplo
Para entendermos o que um Servlet nada melhor que um
exemplo simples. O exemplo a seguir gera uma pgina HTML
em resposta a uma requisio.

289

Servlets
Exemplo
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Ola extends HttpServlet
{
public String getServletInfo() { return "Ola verso 0.1";}

public void doGet(HttpServletRequest req,


HttpServletResponse res)
throws IOException, ServletException
{
res.setContentType("text/html");
PrintWriter os=res.getWriter();
os.println("<html>");
os.println("<head><title>Ola!</title></head>");
os.println("<h1 align=center>Ola!</h1>");
os.println("</body></html>");
os.close();
}
}

290

Servlets
Exemplo
O mtodo doGet() recebe dois objetos: um da classe HttpServletRequest e
outro da classe HttpServletResponse.
O HttpServletRequest responsvel pela comunicao do cliente para o
servidor e o HttpServletResponse responsvel pela comunicao do servidor
para o cliente.
Primeiramente usado o mtodo setContentType() para definir o tipo do
contedo a ser enviado ao cliente. Esse mtodo deve ser usado apenas uma vez e
antes de se obter um objeto do tipo PrintWriter ou ServletOutputStream

para a resposta.
Se o programador desejar enviar a resposta em bytes deve usar o mtodo
getOutputStream() para obter um objeto OutputStream.
Uma vez carregado o Servlet no mais descarregado, a no ser que o servidor Web
tenha sua execuo interrompida.
291

Servlets
Executando um servidor Habilitado para Servlet

Internet

Internet

Servidor Web
Servlet habilitado

Servidor Web

Servlet Container

292

Servlets
Executando o servidor Habilitado para Servlet
Assim como para se executar um Applet era preciso de um
navegador Web com Java habilitado no caso de Servlets
preciso de servidor Web que execute Java ou que passe as
requisies feitas a Servlets para programas que executem os
Servlets.

293

Servlets
Executando um servidor Habilitado para Servlet
O primeiro caso mais raro, tendo como exemplo o Java Web Server da
Sun. O segundo caso mais comum e existem add-ons, conhecidos como
Containers ou application Servers, para os servidores mais populares
como o Apache, IIS e o IBM HTTP Server.
Uma implementao de um application Servers capaz de lidar com
Servlets e JSP pode ser encontrada em jakarta.apache.org.
Denominado de Tomcat, um container que pode ser baixado
gratuitamente, possui cdigo aberto e possui add-ons para o Apache, IIS
e Netscape Server.

294

Servlets
Instalando o Tomcat
Para instalar o tomcat basta descompactar o arquivo baixado
na raiz do disco.

Aps isso basta definir as seguintes variveis de ambiente:


set TOMCAT_HOME=c:\jakarta-tomcat
set CLASSPATH=%CLASSPATH%;c:\jakarta-tomcat\lib\servlet.jar

Atualmente o Tomcat implementa as especificaes Servlet


2.2 e JavaServer Pages 1.1

295

Servlets
Executando o Tomcat
Para iniciar o servidor basta executar o arquivo
c:\jakarta-tomcat\bin\startup.bat
Para interromper a execuo servidor basta executar o arquivo
c:\jakarta-tomcat\bin\shutdown.bat
OBS: Caso ao iniciar o servidor aparea a mensagem out of
environment space clique com o boto direito do mouse no
arquivo .bat e edite as propriedades definindo o ambiente inicial com
4096.
296

Servlets
Executando o Tomcat
Ao entrar em execuo o servidor l as configuraes do
constantes no arquivo server.xml e por default se anexa
porta 8080

297

Servlets
Executando o Tomcat

298

Servlets
Executando o Servlet
Primeiro preciso compilar o Servlet.
javac Ola.java
Coloque o arquivo gerado no diretrio:
C:\jakarta-tomcat\webapps\examples\WEB-INF\classes

299

Servlets
Executando o Servlet
Invocando diretamente pelo Navegador
Podemos executar um Servlet diretamente digitando a URL do Servlet no
navegador. A URL em geral possui o seguinte formato:
http://mquina:porta/servlet/nome-servlet
Por exemplo, no caso do exemplo que estamos utilizando preciso
digitar:
http://localhost:8080/examples/servlet/Ola
O Servlet deve ser colocado em diretrio predefinido ou sua localizao
relativa a esse diretrio deve ser indicada na URL.
300

Servlets
Executando o Servlet
Invocando em uma pgina HTML

No caso de uma pgina HTML basta colocar a URL nos locais


normais de links. Por exemplo,
<a href="http://localhost:8080/examples/servlet/Ola>Servlet
Ola</a>

Neste caso o Servlet Ola ser solicitado quando o link


associado ao texto Servlet Ola for acionado.

301

Servlets
Executando o Servlet
Note que a URL passada no existe. uma URL virtual.
A primeira parte da ULR (/examples) indica uma aplicao
registrada no Tomcat.

A segunda parte (/servlet) indica que para ser executado


um servlet.

302

Servlets
Criando uma aplicao no Tomcat
Crie a seguinte estrutura de diretrios abaixo do diretrio
webapps do Tomcat.

HTML e JSP ficam aqui


Nome aplicao
|________Web-inf
|_____classes
|_____lib

Os servlets ficam aqui

303

Servlets
Criando uma aplicao no Tomcat
preciso tambm editar o arquivo server.xml do diretrio
conf, incluindo as linhas:
<Context path="/nome aplicao"
docBase="webapps/ nome aplicao" debug="0
reloadable="true" >
</Context>

304

Servlets
Criando uma aplicao no Tomcat
E finalmente colocar uma arquivo web.xml no diretrio Web-inf
com o seguinte contedo:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2.2.dtd">
<web-app>
</web-app>

305

Servlets

Exemplos de Servlets

306

Servlets
Exemplos
Obtendo Informao sobre a Requisio
public class RequestInfo extends HttpServlet
{
public void doGet(HttpServletRequest req,
HttpServletResponse res)
throws IOException, ServletException
{
res.setContentType("text/html");
PrintWriter out = res.getWriter();
out.println("<html>\n<body>\n<head>");
out.println("<title>Requisicao de Info </title>");
out.println("</head>");
out.println("<body>");
out.println("<h3>Requisicao de Info </h3>");
out.println("Metodo: " + req.getMethod()+<br>);
out.println("Request URI: " +
req.getRequestURI()+<br>);
out.println("Protocolo: " + req.getProtocol()+<br>);
307

Servlets
Exemplos
Obtendo Informao sobre a Requisio
out.println("PathInfo: " + req.getPathInfo()+<br>);
out.println("Endereco remoto: " +
req.getRemoteAddr()+<br><br>);
Enumeration e = req.getHeaderNames();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
String value = req.getHeader(name);
out.println(name + " = " + value+"<br>");
}
out.println("</body>");
out.println("</html>");
}
public void doPost(HttpServletRequest req,
HttpServletResponse res)
throws IOException, ServletException
{
doGet(req, res);
}
}

308

Servlets
Sada
Requisicao de Info

Metodo: GET
Request URI: /servlet/RequestInfo
Protocolo: HTTP/1.0
PathInfo: null
Endereco remoto: 127.0.0.1
Connection = Keep-Alive
User-Agent = Mozilla/4.7 [en] (Win95; I)
Pragma = no-cache
Host = localhost:8080
Accept = image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*
Accept-Encoding = gzip
Accept-Language = en
Accept-Charset = iso-8859-1,*,utf-8
309

Servlets
Exemplos
Lidando com Formulrios

310

Servlets
Exemplos

Lidando com Formulrios


public void doGet(HttpServletRequest req,
HttpServletResponse res)
throws IOException, ServletException
{
res.setContentType("text/html");
PrintWriter out = res.getWriter();
out.println("<html>");
out.println("<body>");
out.println("<head>");
out.println("<title>Trata formulario</title>");
out.println("</head>");
out.println("<body bgcolor=\"white\">");
out.println("<h3>Trata formulario</h3>");
String nome = req.getParameter("nome");
String sobreNome = req.getParameter("sobrenome");
311

Servlets
Exemplos

Lidando com Formulrios


if (nome != null || sobreNome != null) {
out.println("Nome = " + nome + "<br>");
out.println("Sobrenome = " + sobreNome);
}
out.println("<P>");
out.print("<form action=\"");
out.print("Form\" ");
out.println("method=POST>");
out.println("Nome");
out.println("<input type=text size=20 name=nome>");
out.println("<br>");
out.println("Sobrenome");
out.println("<input type=text size=20
name=sobrenome>");
out.println("<br>");
out.println("<input type=submit>");
312
out.println("</form>");

Servlets
Exemplos

Lidando com Formulrios


out.println("</body>");
out.println("</html>");
out.close();
}

public void doPost(HttpServletRequest req,


HttpServletResponse res)
throws IOException, ServletException
{
doGet(req, res);
}
}

313

Servlets
Lidando com Cookies

Um cookie nada mais que um pedao de informao que


enviado do servidor para o navegador. O cookie armazenado
ento no disco da mquina cliente e quando o site novamente
visitado o cookie enviado novamente para o servidor,
fornecendo a informao desejada.
Os cookies so parte integrante
normalizados pela norma RFC 2109.

do

padro

Internet,

314

Servlets
Lidando com Cookies

315

Servlets
Lidando com Cookies
public void doGet(HttpServletRequest req,
HttpServletResponse res)
throws IOException, ServletException
{
res.setContentType("text/html");
PrintWriter out = res.getWriter();
out.println("<html>");
out.println("<body bgcolor=\"white\">");
out.println("<head>");
out.println("<title>Teste de Cookies</title>");
out.println("</head>");
out.println("<body>");
out.println("<h3>Teste de Cookies</h3>");
316

Servlets
Lidando com Cookies
Cookie[] cookies = req.getCookies();
if (cookies.length > 0)
{
for (int i = 0; i < cookies.length; i++)
{
Cookie cookie = cookies[i];
out.print("Cookie Nome: " + cookie.getName() +
"<br>");
out.println(" Cookie Valor: " +
cookie.getValue()+"<br><br>");
}
}

317

Servlets
Lidando com Cookies
String cName = req.getParameter("cookienome");
String cValor = req.getParameter("cookievalor");
if (cName != null && cValor != null)
{
Cookie cookie = new Cookie(cName ,cValor);

res.addCookie(cookie);
out.println("<P>");
out.println("<br>");
out.print("Nome : "+cName +"<br>");
out.print("Valor : "+cValor);
}

318

Servlets
Lidando com Cookies
out.println("<P>");
out.print("<form action=\"");
out.println("CookieTeste\" method=POST>");
out.println("Nome");
out.println("<input type=text length=20
name=cookienome><br>");
out.println("Valor");
out.println("<input type=text length=20
name=cookievalor><br>");
out.println("<input type=submit></form>");
out.println("</body>");
out.println("</html>");
out.close();
}

319

Servlets
Lidando com Sesses
No possvel implementar um CE sem acompanhar o usurio
enquanto ele navega pelas pginas de um site, ou seja, preciso
ter um acompanhamento da sesso do usurio. No entanto, o
protocolo HTTP um protocolo no orientado sesses. Como
ento implementar um acompanhamento de sesso na Web?
Existem diversas forma de se fazer isso, mas a forma mais
comum acompanhar as sesses por meio de cookies.

320

Servlets
Lidando com Sesses
public void doGet(HttpServletRequest req,
HttpServletResponse resp)
throws IOException, ServletException
{
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
out.println("<html>");
out.println("<body bgcolor=\"white\">");
out.println("<head>");
out.println("<title>Teste de Sessao</title>");
out.println("</head>");
out.println("<body>");

321

Servlets
Lidando com Sesses
out.println("<h3>Teste de Sessao</h3>");
HttpSession session = req.getSession();
out.println("Identificador: " + session.getId());
out.println("<br> Data: ");
out.println(new Date(session.getCreationTime()));
out.println("<br>");
out.println("Ultimo acesso: ");
out.println(new Date(session.getLastAccessedTime()));
String nomedado = req.getParameter("nomedado");
String valordado = req.getParameter("valordado");
if (nomedado != null && valordado != null)
{
session.putValue(nomedado, valordado);
}

322

Servlets
Lidando com Sesses
out.println("<P>");
out.println("Dados da Sessao: <br>");
String[] valueNames = session.getValueNames();
if (valueNames != null && valueNames.length > 0)
{
for (int i = 0; i < valueNames.length; i++)
{
String name = valueNames[i];
String value =
session.getValue(name).toString();
out.println(name + " = " + value + "<br>");
}
}

323

Servlets
Lidando com Sesses
out.print(<P><form action=\"");
out.print("SessionExample\" ");
out.println("method=POST>");
out.println("Nome");
out.println("<input type=text size=20 name=nomedado>");
out.println(<br>Valor");
out.println("<input type=text size=20 name=valordado>");
out.println(<br><input type=submit>");
out.println("</form>");
out.println("</body>");
out.println("</html>");

324

JSP

325

JSP
Servlets uma boa idia, mas voc se imaginou montando uma
pgina complexa usando println?

Devido a esse problema a Sun desenvolveu uma tecnologia


baseada em Servlets chamada de JSP.
Java Server Pages (JSP) so pginas HTML que incluem
cdigo Java e outros tags especiais.

Desta forma as partes estticas da pgina no precisam ser


geradas por println. Elas so fixadas na prpria pgina. A parte
dinmica gerada pelo cdigo JSP.
326

JSP
Assim a parte esttica da pgina pode ser projetada por um
artista que nada sabe de Java.
A primeira vez que uma pgina JSP carregada pelo container
JSP o cdigo Java compilado gerando um Servlet que
executado, gerando uma pgina HTML que enviada para o
navegador.

327

JSP
Como os dados so passados do cliente para servidor
Requisio de pgina jsp

Browser

Servidor
Http
Encaminha a requisio

Resposta
requisio

Container
Servlet/JSP
Instancia e
executa

Instncia
do Servlet

Compila
Pgina jsp

Carrega
o servlet

Servlet

328

JSP
ASP X JSP
Active Server Pages (ASP) uma tecnologia similar
desenvolvida pela Microsoft. A primeira vantagem de JSP
sobre ASP que a parte dinmica escrita em Java e no
Visual Basic ou outra linguagem proprietria da Microsoft,
portanto JSP mais poderoso e fcil de usar. Em segundo
lugar JSP mais portvel para outros sistemas operacionais e
servidores WEB que no sejam Microsoft.

329

JSP
Primeiro exemplo em JSP
<html><body>
<H1>O tempo em segundos e:
<%= System.currentTimeMillis()/1000 %>
</H1>
</body></html>

330

JSP
Executando o arquivo JSP
Para executar o arquivo acima salve-o com a extenso .jsp. Por exemplo
tempo.jsp. Se voc estiver usando o servidor Tomcat, crie um
subdiretrio a partir do diretrio examples/jsp do Tomcat e salve o
arquivo nesse diretrio. Por exemplo examples/jsp/teste. Para
invocar o arquivo JSP basta embutir a URL em uma pgina ou digitar
diretamente a seguinte URL no navegador.
http://localhost:8080/examples/jsp/teste/tempo.jsp
O resultado ser como abaixo, apenas com um nmero maior.

O tempo em segundos e: 959622896

331

JSP
Objetos implcitos
Para simplificar o cdigo JSP existem um conjunto de objetos
predefinidos que podem ser usados pelo programador. Os mais
importantes so:

HttpServletRequest
HttpServletResponse
HttpSession
PrintWriter

request
response
session
out

332

JSP
Formato Bsico
Os tags JSP possuem a seguinte forma geral:
<% Cdigo JSP %>

O primeiro caractere % pode ser seguido de outros


caracteres que determinam o significado preciso do cdigo
dentro do tag. Os tags JSP possuem correspondncia com os
tags XML.

333

JSP
Formato Bsico
Expresses
<%= expresses %>

Expresses so avaliadas, convertidas para String e colocadas


na pgina enviada. A avaliao realizada em tempo de
execuo, quando a pgina requisitada.
Exemplos:
<%= new java.util.Date() %>
<%= request.getRemoteHost() %>
334

JSP
Formato Bsico
Scriptlets
<% cdigo java %>
Para tarefas mais complicada existem os Scriptlets permitem
inserir trechos de cdigo em Java.
Exemplo:
<%
String queryData = request.getQueryString();
out.println(Dados GET associado: " + queryData);
%>

335

JSP
Formato Bsico

Scriptlets
O cdigo dentro do scriptlet inserido da mesma forma que
escrito e todo o texto HTML esttico antes e aps ou um
scriptlet convertido para comandos print. Desta forma o
scriptlets no precisa conter comandos para cdigo esttico e
blocos de controle abertos afetam o cdigo HTML envolvidos
por scriptlets.

336

JSP
Formato Bsico
Scriptlets
Exemplo:
Previs&atilde;o do Tempo
<% if (Math.random() < 0.5) { %>
Hoje vai <B>fazer sol</B>!
<% } else { %>
Hoje vai <B>chover</B>!
<% } %>

e convertido em
out.println("Previs&atilde;o do Tempo");
if (Math.random() < 0.5) {
out.println(" Hoje vai <B>fazer sol</B>!");
} else {
out.println(" Hoje vai <B>chover</B>!");
}

337

JSP
Formato Bsico
Declaraes
<%! Cdigo Java %>
Uma declarao JSP permite definir variveis e mtodos que
so inseridos no corpo do servlet.

Como as declaraes no geram sada, elas so normalmente


usadas em combinao com expresses e scriptlets.

338

JSP
Formato Bsico
Declaraes
Exemplo
O trecho abaixo imprime o nmero de vezes que a pgina
corrente foi requisitada desde que foi carregada.

<%! private int numAcesso = 0; %>


Acessos desde carregada:
<%= ++ numAcesso %>.

339

JSP
Formato Bsico
Declaraes

As variveis declaradas desta forma sero variveis de


instncia. J as variveis declaradas em scriplets so variveis
locais ao mtodo _jspService.

340

JSP
Formato Bsico
Diretivas
<%@ Diretiva atributo="valor" %>
ou
<%@ Diretiva atributo1 =" valor1"
atributo2 =" valor2"
...
atributoN =" valorN " %>

341

JSP
Formato Bsico
Diretivas
Diretivas so mensagens para JSP container. Elas no enviam
nada para a pgina mas so importantes para definir atributos
JSP e dependncias com o JSP container.

342

JSP
Formato Bsico
Diretiva page
A diretiva page permite a definio dos seguintes atributos:
import="package.class" ou
import="package.class1,...,package.classN"
Permite especificar os pacotes que devem ser importados.
Exemplo:
<%@ page import="java.util.*" %>

343

JSP
Formato Bsico
Diretiva page

contentType="MIME-Type"
Especifica o tipo MIME da sada. O default text/html.
Exemplo:
<%@ page contentType="text/plain" %>
possui o mesmo efeito do scriptlet

<% response.setContentType("text/plain"); %>

344

JSP
Formato Bsico
Diretiva page
isThreadSafe="true|false"
Um valor true (default) indica um processamento normal do
Servlet, onde mltiplas requisies so processadas
simultaneamente.
Um valor false indica que o processamento deve ser feito por
instancias separadas do Servlet ou serialmente.

345

JSP
Formato Bsico
Diretiva page

session="true|false
Um valor true (default) indica que a varivel predefinida session
(HttpSession) deve ser associada sesso, se existir, caso contrrio
uma nova sesso deve ser criada e associada a ela.
Um valor false indica que nenhuma sesso ser usada.

346

JSP
Formato Bsico
Diretiva page
buffer="sizekb|none"
Especifica o tamanho do buffer para escrita.

autoflush="true|false
Um valor true (default) indica que o buffer deve ser esvaziado
quando estiver cheio.
info="message"

Define uma string que pode ser recuperada via getServletInfo()


347

JSP
Formato Bsico
Diretiva page
errorPage="url
Especifica a pgina JSP que deve ser processada em caso de
excees no capturadas.

isErrorPage="true|false
Indica se a pgina corrente pode atuar como pgina de erro para
outra pgina JSP. O default false.

348

JSP
Formato Bsico

Diretiva page
language="java
Possibilita definir a linguagem que est sendo usada. No momento
a nica possibilidade Java.

349

JSP
Formato Bsico

Diretiva include
<%@ include file="relative url" %>
Permite incluir arquivos na hora que a pgina JSP traduzida em
um servlet.
Exemplo:
<%@ include file="/meuarq.html" %>

350

JSP
Extraindo Valores de Formulrios
<%@ page import="java.util.*" %>
<html><body>
<H1>Form</H1><H3>
<%
Enumeration flds = request.getParameterNames();
if(!flds.hasMoreElements()) { %>
<form method="POST action="Form.jsp">
<% for(int i = 0; i < 10; i++) { %>
Field<%=i%>: <input type="text" size="20"
name="Field<%=i%>" value="Value<%=i%>"><br>
<% } %>
<INPUT TYPE=submit name=submit value=envie"></form>
<%} else {
while(flds.hasMoreElements()) {
String field = (String)flds.nextElement();
String value = request.getParameter(field); %>
<li><%= field %> = <%= value %></li>
<% }
} %>
351
</H3></body></html>

JSP
Lidando com sesses
<html><body>
<H1>Session id: <%= session.getId() %></H1>
<H3><li>Essa sesso foi criada em
<%= session.getCreationTime() %></li></H1>
<H3><li>Antigo MaxInactiveInterval =
<%= session.getMaxInactiveInterval() %></li>
<% session.setMaxInactiveInterval(5); %>
<li>Novo MaxInactiveInterval=
<%= session.getMaxInactiveInterval() %></li>
</H3>
<H2>Se o objeto teste" ainda existe este valor ser&aacute;
n&atilde;o nulo:<H2>
<H3><li>valor para teste" =
<%= session.getAttribute(teste") %></li></H3>
<% session.setAttribute(teste",
new String(alcione")); %>
<H1>Meu nome &eacute;
<%= session.getAttribute(teste") %></H1>
352

JSP
Lidando com sesses
<FORM TYPE=POST ACTION=sessao2.jsp>
<INPUT TYPE=submit name=submit
Value=mantem"></FORM>
</body></html>

353

JSP
Lidando com sesses
<html><body>
<H1>Session id: <%= session.getId() %></H1>
<H1>Session value for teste"
<%= session.getValue(teste") %></H1>
<FORM TYPE=POST ACTION=sessao.jsp>
<INPUT TYPE=submit name=submit Value="Returna">
</FORM>
</body></html>

354

JSP
Criando e Modificando Cookies
<html><body>
<H1>Session id: <%= session.getId() %></H1>
<%
Cookie[] cookies = request.getCookies();
for(int i = 0; i < cookies.length; i++) { %>
Cookie name: <%= cookies[i].getName() %> <br>
value: <%= cookies[i].getValue() %><br>
antiga idade mxima em segundos:
<%= cookies[i].getMaxAge() %><br>
<% cookies[i].setMaxAge(5); %>
nova idade mxima em segundos:
<%= cookies[i].getMaxAge() %><br>
<% } %>
<%! int count = 0; int dcount = 0; %>
<% response.addCookie(new Cookie(
APO" + count++, teste " + dcount++)); %>
</body></html>
355

JSP
Uso de javabeans
A medida que o cdigo Java dentro do HTML torna-se cada vez
mais complexo o desenvolvedor pode-se perguntar: Java em
HTML no o problema invertido do HTML em Servlet? Em
outras palavras, estou novamente misturando contedo com
forma?
Para solucionar esse problema possvel pode-se usar Javabeans
para manipular a parte dinmica em Java.

356

JSP
Uso de javabeans

Um Javabean nada mais que uma classe Java que obedece a uma
certa padronizao de chamada.
Os atributos de um bean so acessados por meio de mtodos que
obedecem a conveno getXxxx e setXxxx. Exemplo: getItem()

357

JSP
Uso de javabeans

A sintaxe para o uso de um bean :


<jsp:useBean id="name" class="package.class" />
Voc tambm pode modificar o atributo scope para
estabelecer o escopo do bean alm da pgina corrente.
<jsp:useBean id="name" scope="session"
class="package.class" />

358

JSP
Uso de javabeans
Modificando os atributos:
Para modificar os atributos voc pode usar o
jsp:setProperty ou chamar um mtodo explicitamente em
um scriptlet.

359

JSP
Uso de javabeans
Modificando os atributos:
Quando dito que um bean tem uma propriedade prop do tipo T
significa que o bean deve prover um mtodo getProp() e um
mtodo do tipo setProp(T).

360

JSP
Uso de javabeans

Exemplo: pgina JSP


<HTML> <HEAD>
<TITLE>Uso de beans</TITLE>

</HEAD> <BODY> <CENTER>


<TABLE BORDER=5> <TR><TH CLASS="TITLE"> Uso de JavaBeans
</TABLE> </CENTER> <P>
<jsp:useBean id="test" class=curso. BeanSimples" />
<jsp:setProperty name="test" property="message" value=Ola mundo!"
/>
<H1>Message: <I>

<jsp:getProperty name="test" property="message" /> </I></H1>


</BODY> </HTML>

361

JSP
Uso de javabeans

Exemplo: JavaBean curso/BeanSimples.java


package curso;
public class BeanSimples{
private String message = "No message
specified";
public String getMessage() {
return(message);
}
public void setMessage(String message) {
this.message = message;
}

362

JSP
Uso de javabeans
scope
Existem quatro valores possveis: page, request, session
e application.
O default page.

363

JSP
Uso de javabeans

scope page
Objetos declarados com nesse escopo so vlidos at a resposta ser
enviada ou a requisio ser encaminhada para programa no mesmo
ambiente, ou seja, s podem ser referenciados nas pginas onde
forem declarados. Objetos declarados com escopo page so
armazenados no objeto pagecontext..

364

JSP
Uso de javabeans
scope request
Objetos declarados com nesse escopo so vlidos durante a
requisio e so acessveis mesmo quando a requisio
encaminhada para programa no mesmo ambiente. Objetos
declarados com escopo request so armazenados no objeto
request.

365

JSP
Uso de javabeans
scope session
Objetos declarados com nesse escopo so vlidos durante a
sesso desde que a pgina seja definida para funcionar em uma
sesso. Objetos declarados com escopo session so
armazenados no objeto session.

366

JSP
Uso de javabeans

scope application
Objetos declarados com nesse escopo so acessveis por pginas
no mesmo servidor de aplicao. Objetos declarados com
escopo application so armazenados no objeto
application.

367

JSP
Uso de javabeans

Importante
Se no setProperty usarmos o valor * significa que toda
modificao em elementos do formulrio ser automaticamente
passada para a propriedade do bean de mesmo nome.

Os valores so automaticamente convertidos para o tipo correto


no bean.

368

JSP
Uso de javabeans: carrinho de compras

369

JSP
Uso de javabeans
<html>
<jsp:useBean id=compra" scope="session"
class=sessions.Compras" />
<jsp:setProperty name=" compra" property="*" />
<%
compra.processRequest(request);
%>
<FONT size = 5 COLOR="#CC0000">
<br> voc&ecirc; comprou os seguintes itens:
<ol>
<%
String[] items = compra.getItems();
for (int i=0; i<items.length; i++) {
%>
<li> <%= items[i] %>
<%
}
%>
</ol>
</FONT>
<hr>

370

JSP
Uso de javabeans
<body bgcolor="white">
<font size = 5 color="#CC0000">
<form type=POST action=compras.jsp>
<BR>Entre um item para adicionar ou remover:<br>
<SELECT NAME="item">
<OPTION>Televis&atilde;o
<OPTION>R&aacute;dio
<OPTION>Computador
<OPTION>V&iacute;deo Cassete
</SELECT>
<br> <br>
<INPUT TYPE=submit name="submit" value="adicione">
<INPUT TYPE=submit name="submit" value="remova">
</form></FONT></body></html>

371

JSP
Uso de javabeans

O javabean Compras
package sessions;
import javax.servlet.http.*;
import java.util.Vector;
import java.util.Enumeration;
public class Compras {
Vector v = new Vector();
String submit = null;
String item = null;
private void addItem(String name) {
v.addElement(name);
}

private void removeItem(String name) {


v.removeElement(name);
}

372

JSP
Uso de javabeans
public void setItem(String name) {
item = name;
}
public void setSubmit(String s) {
submit = s;
}
public String[] getItems() {
String[] s = new String[v.size()];
v.copyInto(s);
return s;
}

private void reset() {


submit = null;
item = null;
}

373

JSP
Uso de javabeans
public void processRequest(HttpServletRequest request) {
if (submit == null)
return;
if (submit.equals("adicione"))
addItem(item);
else if (submit.equals("remova"))
removeItem(item);
reset();

}
}

374

JSP
Uma Arquitetura para comrcio eletrnico
JSP Container
1
Navegador Web

Requisio

Servlet
(controlador)
3

5
Resposta

JSP
(Apresentap)

Cria uma instncia


JavaBean
(modelo)

2
4

MiddleWare

JDBC
SGBD Aplicao

375

JSP
Uma Arquitetura para comrcio eletrnico
Servlets - Atuam como controladores, recebendo as requisies dos
usurios e acionando os beans e pginas JSP.
JavaBeans - Atuam como modelo da soluo, independente da
requisio e da forma de apresentao. Comunicam-se com a camada
intermediria que encapsula a lgica do problema.
JSP - Atuam na camada de apresentao utilizando os javabeans para
obteno dos dados a serem exibidos, isolando-se assim de como os
dados so obtidos.
Middleware - Incorporam a lgica de acesso aos dados. Permitem isolar
os outros mdulos de problemas como estratgias de acesso aos dados e
desempenho.
376

JSP
Uma Arquitetura para comrcio eletrnico

1) Facilidade de manuteno: a distribuio lgica das funes


entre os mdulos do sistema isola o impacto das modificaes.
2) Escalabilidade: Modificaes necessria para acompanhar o
aumento da demanda de servios (database pooling, clustering,
etc) ficam concentradas na camada intermediria.
3) Independente de fabricante: usa apenas padres abertos.

377

JSP
Uma Arquitetura para comrcio eletrnico

378

JSP
Uma Arquitetura para comrcio eletrnico
DMZ - onde os servidores HTTP so instalados. A DMZ
protegida da rede pbica por um firewall, tambm chamado
de firewall de protocolo. O firewall de protocolo deve ser
configurado para permitir trfego apenas atravs da porta
80.

Um segundo firewall, tambm chamado de firewall de


domnio separa a DMZ da rede interna. O firewall de domnio
deve ser configurado para permitir comunicao apenas por
meio das portas do servidor de aplicao
379

JSP
eagenda: Exemplo de aplicao Web com arquitetura MVC

380

JSP
eagenda: Exemplo de aplicao Web com arquitetura MVC

381

JSP
eagenda: Exemplo de aplicao Web com arquitetura MVC
Sistema Operacional: Conectiva Linux verso 4.2 servidor.
Servidor Web: Apache Webserver verso 1.3.
Container JSP/Servlet: Tomcat 3.1 produzido e distribudo
gratuitamente pelo grupo apache. Oferece suporte especificao
Servlet 2.1 e JSP 1.1.
Banco de dados: PointBase 3.5.
Driver JDBC: Pointbase universal tipo 4.
382

JSP
eagenda: Exemplo de aplicao Web com arquitetura MVC

Instalao
Os arquivos devem ser colocados nos seguintes diretrios do servidor:
Servlets e Beans (aps compilados)
TOMCAT_HOME/webapps/agenda/WEB-INF/classes/agenda

JSP e HTML
TOMCAT_HOME/webapps/agenda

383

JSP
eagenda: Exemplo de aplicao Web com arquitetura MVC

Consideraes sobre a soluo

O JavaBean da classe LoginBean armazenado na sesso para


permitir a verificao se o acesso ao site autorizado.

O JavaBean da classe AcaoBean armazenado no objeto


request uma vez que sua informaes so alteradas a cada
requisio.

384

Ambientes para Servlet/JSP


Visual Age for java 3.5 professional ou Enterprise (IBM)

Forte (Sun)
Jbuilder (Inprise)
JDeveloper (Oracle)

WebGain Studio, antigo Visual Caf (WebGain)

385

Bibliografia
Fields D. K. e Kolb M. A. Web Development with Java Server Pages. Mannig
2000.
Bagwell D. e outros. An Approach to Designing e-business Solutions, IBM
RedBooks, California, December 1998.
Wahli U. e outros. Servlet and JSP Programming with IBM WebSphere Studio
and VisualAge for Java, IBM RedBooks, California, May 2000.
Sadtler C. e outros. Patterns for e-business: User-to-Business Patterns for
Topology 1 and 2 using WebSphere Advanced Edition, IBM RedBooks,
California, April 2000.
Bagwell D. e outros. An Approach to Designing e-business Solutions, IBM
RedBooks, California, December 1998.

386

Links
Revistas
http://www.javaworld.com/
Revista online sobre Java.
Livros
http://www.redbooks.ibm.com/booklist.html
Livros da IBM

Servidores
http://jakarta.apache.org
Pgina do projeto jakarta que desenvolveu o Tomcat.
http://www.jboss.org
Servidor de aplicao gratuito habilitado para EJB

387

Links
Dicas Java e recursos
http://java.sun.com/
Pgina da Sun com informaes, tutoriais e produtos Java.

http://gamelan.earthweb.com/
Pgina da com informaes, Applets, Lista de discusso, tutoriais.
http://www.inquiry.com/techtips/java_pro
http://www.jguru.com/
http://www.soujava.org.br

388

Links
Servlets e JSP
http://www.servlet.com/srvdev.jhtml
Servlet Inc : Developers Forum
http://www.servlets.com
http://www.jspin.com/home
Jspin.com - The JSP Resource Index
http://www.burridge.net/jsp/jspinfo.html
Web Development with JSP: JSP, Java Servlet, and Java Bean Information

http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial
A Tutorial on Java Servlets and Java Server Pages (JSP)

389

390

Vous aimerez peut-être aussi