Академический Документы
Профессиональный Документы
Культура Документы
Sumrio
Introduo
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++.
Introduo
Java como soluo para Internet
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.
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
E possuem propriedades.
Raio
Textura
Raio: 12cm
Material: couro
Presso: 25 lbs
Velocidade: 0m/s
direo:0o
10
Raio: 12cm
Material: couro
Presso: 25 lbs
0 m/s
Velocidade: 25m/s
direo:0o
11
Exemplo: Pascal
Em Pascal podemos modelar uma classe definindo uma estrutura
contendo variveis que representam as propriedades:
end;
14
15
16
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
class TEsfera {
private float
private float
private float
raio;
velocidade;
direcao;
void atribuiVelocidade(float v)
{velocidade = v;};
}
19
20
23
26
Nome da classe
Atributos
Mtodos
27
Descrio
Sem restrio de acesso.
Pode ser acessado apenas na prpria classe e por subclasses.
Pode ser acessado apenas na prpria classe.
28
Notao
1
* ou 0..*
0..1
n..m
Disciplina
Descrio
Exatamente um
Zero ou mais
Opcional (zero ou um)
Mximo e mnimo
29
Aluno
0..*
0..*
Disciplina
+nota
30
Curso
Disciplina
31
Corpo
Docente
Corpo Discente
32
Corpo Docente
Corpo Discente
Disciplina
Curso
33
Compilador
Java
Byte codes
Mquina
Virtual
34
Segurana
Suporte Concorrncia
Programao em rede
35
System.out.println(Ola, Mundo!);
}
36
javac OlaMundo.java
38
39
No
Invlido
Aluno#10
Num Alunos
!disciplina
10Professor
&uuu
No?
40
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
//
comentrio de linha
/* comentrio de bloco */
/** comentrio de bloco c/ propsito de
documentao */
42
byte
short
int
long
8 bits
16 bits
32 bits
64 bits
Ponto Flutuante
float
double
32 bits
64 bits
43
boolean
{true,false}
Caractere
char
16 bits
44
45
47
x = Pedro;
// obtendo o tamanho
int tam = x.length();
// obtendo um caractere
char segundo = x.charAt(1);
// comparando
if (Pedro.equals(x)) {...
48
Classe
int
Integer
float
Float
double
Double
boolean
Boolean
byte
Byte
short
Short
long
Long
49
int i = Integer.parseInt(12);
Para se converter um inteiro para String podemos utilizar o
mtodo toString:
String s = Integer.toString(12);
Incremento
Decremento
Negativo
Complemento de bit
++
-~
51
Adio e concatenao de
strings
+
Subtrao
Multiplicao
*
Diviso
/
Modulo
%
And de bit
&
Or de bit
|
Xor de bit
^
rot. Esquerda
<<
rot. Direita
>>
52
Relacionais
Menor que
Maior que
Menor igual
Maior igual
igual
Diferente
<
>
<=
>=
==
!=
53
E
OU
OU Exclusivo
E Curto circuito
OU Curto circuito
Negao
Condicional
&
|
^
&&
||
!
?:
54
Simples
Adio
Subtrao
Multiplicao
Diviso
Modulus
AND
OR
XOR
=
+=
-=
*=
/=
%=
&=
|=
^=
55
}
}
56
Seleo
if (condio)
comando1
else
comando2
Exemplo
if (x==0)
y = 5;
else
{
y+=6;
x++;
}
57
Seleo
switch(Expr)
{
case const1: com1;
...
case constN: comN;
default: comDef
}
58
while(i<100)
x +=i++;
do
do
Comando;
while(condio)
x +=i++;
while(i<100);
60
61
um
[1]
dois
[2]
trs
62
63
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
67
68
c;
70
71
72
73
74
75
76
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
import java.awt.Color;
import java.awt.*;
78
79
80
82
85
86
88
89
93
94
try
{
Cdigo que pode gerar exceo
}
catch (Throwable t) {
// tratamento
...
}
97
class esperaTecla
{
public void espera() throws Exception
{
System.in.read();
}
}
98
}
catch (InterruptedException excep) {
System.out.print(Erro na carga);
throw excep;
}
}
99
100
Camada n
Camada 1
Classe I/O
Bsica
Nvel dos
servios
101
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
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
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
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
108
109
110
111
112
113
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
115
...
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
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)
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().
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
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.
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.
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
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.
146
Applets
A soluo Applet
Servidor
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;
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
Applets
Exemplo com paint
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class Applet2 extends Applet{
int x=0, y=0;
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
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
GridLayout
GridBagLayout
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
Applets
Containers
redimensionando & movendo
void resize(int width, int height)
void move(int x, int y)
cores
Applets
Exerccios
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;
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>
175
Applets
Graphics
Graphics
drawline
drawRect
drawRoundRect
draw3DRect
drawOval
drawPolygon
drawString
fillRect
fillRoundRect
fill3DRect
fillOval
fillPolygon
Applets
Graphics
getColor
setColor
getFont
setFont
177
Applets
Exerccios
178
Threads
Introduo threads
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.
Threads
Introduo threads
Para criar um thread em java preciso cria um objeto da
classe thread.
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;
185
Threads
Threads com Applets
O mtodo run executa o cdigo
public void run()
{
// aqui vai o cdigo
}
O mtodo stop elimina o thread.
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);
}
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
Animao
Animao exibir uma figura que muda com o
tempo
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
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);
}
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
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);
203
Animao
Exerccios
204
Programao em Redes
MIME
Camada de Aplicao
FTP
HTTP
Camada de Transporte
SMTP
TCP
Camada de rede
Camada fsica
FTP
HTTP
IP
MIME
TELNET
SNMP
UDP
IP
Ethernet, X.25, Token Ring
SMTP
SNMP
TCP
UDP
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.*;
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
http://dpi.ufv.br/professores.html
Protocolo
Programao em Redes
Comunicao por meio URL
220
Programao em Redes
Comunicao por meio URL
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.
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;
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.
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
Protocolo do SGBD
SGBD
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>
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
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);
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
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.
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.
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;
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
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.
Protocolos para CE
O protocolo bsico da Web o HTTP, que faz parte da suite de
protocolos TCP/IP.
275
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
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.
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
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
287
Servlets
A API Servlet
A classe derivada da HttpServlet deve sobrescrever pelo
menos um dos mtodos abaixo:
doGet
doPost
doPut
doDelete
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";}
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.
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
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.
302
Servlets
Criando uma aplicao no Tomcat
Crie a seguinte estrutura de diretrios abaixo do diretrio
webapps do Tomcat.
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
Servlets
Exemplos
Servlets
Exemplos
313
Servlets
Lidando com Cookies
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?
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.
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 %>
333
JSP
Formato Bsico
Expresses
<%= expresses %>
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ã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ã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.
338
JSP
Formato Bsico
Declaraes
Exemplo
O trecho abaixo imprime o nmero de vezes que a pgina
corrente foi requisitada desde que foi carregada.
339
JSP
Formato Bsico
Declaraes
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
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"
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á
não nulo:<H2>
<H3><li>valor para teste" =
<%= session.getAttribute(teste") %></li></H3>
<% session.setAttribute(teste",
new String(alcione")); %>
<H1>Meu nome é
<%= 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
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
361
JSP
Uso de javabeans
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.
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ê 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ão
<OPTION>Rádio
<OPTION>Computador
<OPTION>Ví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);
}
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;
}
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)
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
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.
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
384
Forte (Sun)
Jbuilder (Inprise)
JDeveloper (Oracle)
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