Você está na página 1de 0

Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP

webmaster@dbsystems.com.br
Mdulo JSP
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP
webmaster@dbsystems.com.br
ndice Analtico
1. O QUE JSP..............................................................................................................................................................1
2. INSTALANDO UM SERVIDOR JSP......................................................................................................................2
3. SIMBOLOGIA - PARTE 1 .......................................................................................................................................4
4. SIMBOLOGIA - PARTE 2 .......................................................................................................................................7
5. COMANDOS LOOPS..............................................................................................................................................10
6. COMANDOS CONDICIONAIS.............................................................................................................................13
7. TRATANDO FORMULRIOS..............................................................................................................................16
8. OBJETOS IMPLCITOS - INTRODUO.........................................................................................................22
9. OBJETOS RELACIONADOS AO SERVLET .....................................................................................................23
10. OBJETOS RELACIONADOS A OUTPUT/INPUT DA PGINA......................................................................24
11. OBJETOS CONTEXTUAIS ...................................................................................................................................28
12. TRATAMENTO DE ERROS..................................................................................................................................33
13. JAVABEANS............................................................................................................................................................34
14. AO JSP:USEBEAN............................................................................................................................................38
15. EXEMPLO MINI APLICAO USANDO JAVABEANS ..............................................................................40
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 1
webmaster@dbsystems.com.br
1. O que JSP
JSP (Java Server Pages) uma tecnologia para desenvolvimento de aplicaes
WEB semelhante ao Microsoft Active Server Pages (ASP), porm tem a
vantagem da portabilidade de plataforma podendo ser executado em outros
Sistemas Operacionais alm dos da Microsoft. Ela permite que ao desenvolvedor
de sites produzir aplicaes que permitam o acesso a banco de dados, o acesso
a arquivos-texto, a captao de informaes a partir de formulrios, a captao
de informaes sobre o visitante e sobre o servidor, o uso de variveis e loops
entre outras coisas.
Quem conhece servlets ver que o JSP no oferece nada que voc no possa
conseguir com os servlets puros. O JSP, entretanto, oferece a vantagem de ser
facilmente codificado, facilitando assim a elaborao e manuteno de uma
aplicao. Alm disso, essa tecnologia permite separar a programao lgica
(parte dinmica) da programao visual (parte esttica), facilitando o
desenvolvimento de aplicaes mais robustas, onde programador e designer
podem trabalhar no mesmo projeto, mas de forma independente. Outra
caracterstica do JSP produzir contedos dinmicos que possam ser
reutilizados.
Quando uma pgina JSP requisitada pelo cliente atravs de um Browser, esta
pgina executada pelo servidor, e a partir da ser gerada uma pgina HTML
que ser enviada de volta ao browser do cliente. A figura abaixo ilustra esse
funcionamento:
Quando o cliente faz a solicitao de um arquivo JSP, enviado um object
request para a JSP engine. A JSP engine envia a solicitao de qualquer
componente (podendo ser um JavaBeans component, servlet ou enterprise
Bean) especificado no arquivo. O componente controla a requisio
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 2
webmaster@dbsystems.com.br
possibilitando a recuperao de arquivos em banco de dados ou outro dado
armazenado, em seguida, passa o objeto response de volta para a JSP engine.
A JSP engine e o WEB server enviam a pgina JSP revisada de volta para o
cliente, onde o usurio pode visualizar os resultados atravs do WEB browser. O
protocolo de comunicao usado entre o cliente e o servidor pode ser HTTP ou
outro protocolo.
Por definio, JSP usa Java como sua linguagem de scripts. Por esse motivo, O
JSP apresenta mais flexvel e mais robusto do que outras plataformas
baseadas simplesmente em JavaScripts e VBScripts.
Requisitos para entender JSP? Para tirar um bom proveito do JSP preciso
entender a linguagem Java. Isso porque, a parte lgica do JSP envolve Java
Beans, Objetos JDBC, Enterprise Java Beans (EJB) entre outros componentes
que interagem com a plataforma Java. Portanto, alertamos aqueles que
pretendem desenvolver uma aplicao mais sofisticada que entedam um pouco
de programao em Java.
O ideal que se conhea um pouco de HTML, pouco mesmo. comum em
grandes aplicaes que o Programador JSP e o Designer sejam pessoas
diferentes. Portanto, nesse curso, usamos pouqussimas tags HTML, nossa
preocupao est voltada para a parte lgica das aplicaes e no para a parte
visual.
Nos prximos mdulos voc aprender como instalar um servidor JSP. Num
mdulo posterior, voc iniciar a programao em JSP e aprender a simbologia
dessa linguagem.
2. Instalando um servidor JSP
Para conseguir ver os resultados das pginas que iremos construir nos prximos
mdulos desse curso, preciso instalar na sua mquina um servidor JSP. Por se
tratar de uma extenso ao modelo de programao Java, o JSP pode ser
executado em qualquer plataforma. Existem diversos servidores JSP espalhados
na WEB, alguns deles, dispe de verses para plataforma Windows e Linux. Dois
dos mais famosos so o Tomcat, do projeto Jakarta
(http://jakarta.apache.org/tomcat) e o Resin da Empresa Caucho
(www.caucho.com).
Nesse mdulo, iremos mostrar a instalao do "Tomcat" para a plataforma
Windows NT ou 98/95, bastante fcil de ser instalado e configurado. Se voc
nunca instalou um servidor na sua mquina, no se preocupe!!! Mostraremos
passo a passo como fazer. Contudo, se voc j um cobra nessa rea, um
rpida lida na seo abaixo j ser suficiente para preparar sua mquina para
rodar pginas com scripts JSP.
Passo 1: Instalao da Mquina Virtual.
Voc necessitar, antes de tudo, ter a mquina virtual Java instalada (JDK -
Java Development Kit). Se voc no tiver ainda o JDK instalado, faa o
download atravs do site da Empresa Sun. (http://java.sun.com).
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 3
webmaster@dbsystems.com.br
Passo 2: Download do Servidor JSP.
Voc poder fazer o download do servidor Tomcat no site da empresa "Jakarta"
(http://jakarta.apache.org/builds/jakarta-tomcat-4.0/release/v4.1.18/bin/jakarta-tomcat-4.1.18-LE-jdk14.exe).
Passo 3: Executar o arquivo de instalao.
Voc pode usar a instalao padro, no final da instalao voc de informar uma
senha para o administrador do servidor. Aps a instalao concluda, ser
gerado alguns atalhos dentre eles Start Tomcat e Stop Tomcat, copie estes
dois atalhos para o seu desktop, para iniciar o servidor use o atalho Start
Tomcat, para parar use o atalho Stop Tomcat.
Passo 4: Configuraes default Tomcat.
De acordo com a configurao original do Tomcat, os arquivos devero estar
nos seguintes diretrios:
- arquivos *.jsp (pginas com scripts JSP): " C:\Arquivos de programas\Apache
Group\Tomcat 4.1\webapps \sistema"
- arquivos *class e *.java (classes utilizadas em beans): " C:\Arquivos de
programas\Apache Group\Tomcat 4.1\webapps\sistema\WEB-
INF\classes\pacotes ".
Passo 5: Testando o Tomcat.
Agora voc deve testar o Tomcat. Abra o seu navegador e digite a url
"http://localhost:8080". Se a pgina de apresentao da empresa Jakarta
aparecer no seu navegador ento a instalao do software ocorreu com sucesso.
Sua mquina estar pronta para rodar pginas JSP. necessrio digitar a porta
"8080" pois essa porta fica reservada para esse servidor.
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 4
webmaster@dbsystems.com.br
3. Simbologia - Parte 1
A maior parte do cdigo de uma pgina JSP consiste em template text. O
template text similar ao HTML, obedecendo s mesmas regras de sintaxe e
simplesmente passado ao cliente por um servlet criado especialmente para
manusear a pgina. Para construir uma aplicao usando JSP voc geralmente
escreve o texto HTML e inclue cdigos JSP entre tags JSP. As tags normalmente
comeam com "<%" e terminam com "%>". Vamos mostrar o clssico exemplo
do "Ol Mundo".
<html>
<body>
<h1><%= request.getParameter("text") %></h1>
</body>
</html>
Salve esse artigo com o nome "exemplo01.jsp". Para executar esse cdigo
basta digitar em seu browser a URL:
..exemplo01.jsp?text=Ola+Mundo.
Perceba que foi possvel passar o valor do objeto "text" como parmetro na
prpria URL e o servidor de JSP montou o cdigo.
Se voc verificar o cdigo da pgina que apareceu no seu browser, ver o
seguinte:
<html>
<body>
<h1>Ola Mundo</h1>
</body>
</html>
O que aconteceu foi que o servidor JSP executou os comandos entre as tags
especiais "<%" e "%>", gerou e enviou para o browser um cdigo HTML puro.
JSP fornece cinco categorias de tags: diretivas, declaraes, expresses,
scriptlets e comentrios.
As diretivas sero tratadas na parte 2 desse mdulo do curso. Vamos nos
concentrar aqui no estudo das declaraes, expresses, scriptlets e
comentrios. Os trs primeiras tm sintaxes e usos similares, mas tm
diferenas importantes. Vamos explicar, com alguns exemplos, as semelhanas
e diferenas entre elas.
Declaraes (entre <%! and %>):
As declaraes so usadas para definir variveis e mtodos especficos para
uma pgina JSP. Os mtodos e variveis declaradas podem ento ser
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 5
webmaster@dbsystems.com.br
referenciados por outros elementos de criao de scriptlets na mesma pgina. A
cada declarao deve ser finalizada ou separada por "ponto-e-vrgula" e pode
assumir a seguinte sintaxe:
<%! declaration %>
Veja alguns exemplos:
<%! int i = 0; %>
<%! int a, b; double c; %>
<%! Circle a = new Circle(2.0); %>
Voc deve declarar uma varivel ou um mtodo antes de us-lo. O escopo de
uma declarao geralmente o arquivo JSP, mas se for includo outros arquivos
com a diretiva include, o escopo se expande para o cover do arquivo includo.
Expresses (entre <%= e %>)
Podem conter alguma expresso vlida da linguagem de script usada nessa
pgina (o padro que a Linguagem seja Java), mas sem ponto-e-vrgula.
A sintaxe para este elemento de criao de scripts a seguinte:
<%= expression %>
Veja alguns exemplos:
<%= Math.sqrt(2) %>
<%= items[i] %>
<%= a + b + c %>
<%= new java.util.Date() %>
A expresso Java avaliada (da esquesda para a direita), convertida em String
e depois inserida na pgina. Essa avaliao feita em tempo de execuo
(quando a pgina solicitada) permitindo fcil e rpido acesso a informao que
foi requisitada. Por exemplo, uma exibio de data e hora em que a pgina
acessada.
Para construir uma expresso em JSP voc pode colocar entre as tags qualquer
expresso definida na Especificao da Linguagem Java. Ao contrrio dos
scriptlets (que veremos a seguir), uma expresso no aceita ponto e vrgula e
define somente uma expresso da Linguagem.
Veja um exemplo:
Seu hostname: <%= request.getRemoteHost() %>
Para simplificar as expresses, existem um nmero de variveis predefinidas
que voc pode usar e que veremos a seguir.
Scriptlets (entre <% e %>)
Permitem voc escrever trechos de cdigo da Linguagem usada na pgina. Veja
o exemplo abaixo:
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 6
webmaster@dbsystems.com.br
<html>
<body>
.
.
.
<%
String option;
int numberOption = Integer.parseInt(request.getParameter("option"));
if (numberOption == 1) { option = "Compra"; }
else if (numberOption == 2) { option = "Venda"; }
else { option = "Aluguel"; }
%>
<font face="verdana, arial" size=5>Opo Escolhida: <%= option %> </font>
.
.
.
</body>
</html>
Lembre-se que em um script voc deve finalizar as expresses atravs do uso
de ponto-e-vrgula. Quando voc escreve um script, voc pode usar algum dos
objetos implcitos do JSP ou das classes importadas atravs da diretiva page,
variveis ou mtodos (declarados entre as tags <%! e %> ou objetos
nomeados atravs da tag <jsp:useBean>. Para testar a pgina acima basta
salv-la com o nome de "classificados.jsp" e digitar a url
".../classificados.jsp?option=2".
Comentrios
Existem dois tipos principais de comentrios que podem ser usados em uma
pgina JSP:
Comentrio de Contedo: esses comentrios so transmitidos de volta para o
navegador como parte da resposta de JSP e so visveis na visualizao do
cdigo da pgina. O comentrio de contedo tem a seguinte sintaxe:
<!-- comment -->
Aqueles familiarizados com HTML percebem que a mesma sintaxe de
comentrio para essa linguagem de marcao. Tais comentrios no produzem
qualquer output visvel, mas podem ser visualizados pelo usurio final atravs
do item "view source" do navegador.
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 7
webmaster@dbsystems.com.br
Comentrios JSP: no so enviados para o cliente e so visveis apenas nos
arquivos fonte JSP originais. O corpo do comentrio ignorado pelo container
JSP. Os comentrios JSP podem assumir duas sintaxes:
<%-- comment --%>
e
<% /* comment */ %>
Esse segundo comentrio introduzido dentro da pgina atravs de um
scriptlets, usando a sintaxe de comentrio nativa da linguagem de criao de
scripts, no caso JAVA.
4. Simbologia - parte 2
As diretivas so usadas para fornecer informaes especiais ao container JSP
sobre a pgina JSP quando esta compilada para servlet. As diretivas JSP
afetam a estrutura global da classe servlet.
Existem dois tipos principais de diretivas:
- page: permite situaes como importao de classes, customizao de super
classes servlet entre outras;
- include: permite que seja inserido o contedo de um arquivo no servlet no
momento em que o arquivo JSP traduzido para servlet.
01. Diretiva page
A diretiva page tem a seguinte sintaxe:
<%@ page attribute1=valor1 attribute2=valor2 attribute3=... %>
Abaixo relacionamos os atributos mais utilizados nas diretivas page:
Atributo import
import="package.class" ou
import="package.class1,...,package.classN".
permite que seja especificado qual o pacote a ser importado. Por exemplo:
<%@ page import="java.util.*" %>
O atributo import attribute o nico que pode aparecer vrias vezes.
Atributo isThreadSafe
isThreadSafe="true|false".
O valor de true (default) indica o processamento normal do servlet quando
mltiplas requisies podem ser acessadas simultaneamente na mesma
instncia de servlet. O valor false indica que o servlet deve implementar
SingleThreadModel, como requisio para cada requisio sinalizada ou com
requisies simultneas sendo uma em cada instncia.
Atributo session
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 8
webmaster@dbsystems.com.br
session="true|false".
O valor de true (default) indica que a varivel predefinida session (do tipo
HttpSession) deve estar ligada a sesso existente, caso no exista uma sesso,
uma nova sesso deve ser criada para lig-la. O valor false indica que sesses
no devem ser usadas. Aqui est a implementao do contexto.
Atributo buffer
buffer="sizekb|none"
Especifica o tamanho do buffer para o JspWriter out. O buffer padro definido
pelo servidor.
Atributo autoFlush
autoflush="true|false"
O valor de true (default) indica se o buffer deve ser esvaziado quando estive
cheio. O valor false, indica que uma exceo deve ser mostrada quando ocorrer
overflows.
Atributo extends
extends="package.class"
Define se a super classe do servlet deve ser gerada.
Atributo info
info="message"
Define uma string que pode ser recuperada pelo mtodo getServletInfo. Com
esse atributo o autor pode adicionar uma cadeia de documentao pgina que
sumariza sua funcionalidade. O valor padro para o atributo info a cadeia
vazia.
Atributo errorPage
errorPage="url"
Especifica que a pgina JSP deve processar algum Throwables, mas no
carreg-lo na pgina corrente.
Atributo isErrorPage
isErrorPage="true|false"
Define se uma pgina pode atuar como uma pgina de erro para uma outra
pgina JSP. O default false.
Atributo language
language="java"
Especifica a linguagem que est sendo usada. Por enquanto o JSP suporta
somente Java.
02. Diretiva include
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 9
webmaster@dbsystems.com.br
A diretiva include permite que sejam includos arquivos na hora em que a
pgina JSP traduzida no servlet. Uma directive include algo como:
<%@ include file="relative url" %>
Essa diretiva pode ser implementada de acordo com o seguinte exemplo:
muitos sites tm uma barra de navegao em cada pgina. Devido a problemas
com frames HTML isto normalmente implementado com um tabela repetindo o
cdigo HTML em cada pgina do site. Esta directive supre essa necessidade de
minimizar os esforos de manuteno conforme o cdigo abaixo:
<html>
<%@ include file="navbar.html" %>
<!-Parte especfica da pgina ... -->
</body>
</html>
Arquivo exemplo_02.jsp
<font face="verdana" size=1 color="#ffffcc">
<a href="home.jsp">HOME</a> -
<a href="secao_01.jsp">SEO 01</a> -
<a href="secao_02.jsp">SEO 02</a> -
<a href="secao_02.jsp">SEO 02</a>
</font>
Arquivo navbar.html
<html>
<body>
<font face="verdana" size=1 color="#ffffcc">
<a href="home.jsp">HOME</a> -
<a href="secao_01.jsp">SEO 01</a> -
<a href="secao_02.jsp">SEO 02</a> -
<a href="secao_02.jsp">SEO 02</a>
</font>
<!-Parte especfica da pgina ... -->
</body>
</html>
Cdigo do arquivo "exemplo_02.jsp" visto pelo browser
Apresentamos a seguir um resumo da sintaxe do JSP:
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 10
webmaster@dbsystems.com.br
Declaraes
Declara variveis e mtodos vlidos no
script daquela pgina.
<%! declarao; [declarao;]+ ... %>
Expresses
Contm uma expresso vlida no script
daquela pgina.
<%= expresso %>
Scriptlet
Contm um fragmento de cdigo vlido
no script daquela pgina.
<% fragmento de um cdigo com uma ou
mais linhas %>
Comentrio HTML
Cria um comentrio que enviado para
o cliente viabilizar no cdigo da pgina.
<!-- comentrio [<%= expresso %>] -->
Comentrio JSP
visto apenas no fonte do JSP mas no
enviado para o cliente.
<%-- comentrio --%> ou
<% /* comentrio */ %>
Diretiva "Include"
Inclue um arquivo esttico, analisando
os elementos JSP daquela pgina.
<%@ include file="URL relativa" %>
Diretiva "Page"
Define atributos que sero aplicados a
uma pgina JSP.
<%@ page [ atributo = valor(es) ] %>
atributos e valores:
- language="java"
- extends = "package.class"
- import = "{package.class" | package.* },
..." ]
- session = "true | false"
- buffer = "none | 8kb | sizekb"
- autoFlush = "true | false"
- isThreadSafe = "true | false"
- info = "text"
- errorPage"relativeURL"
- contentType = "{mimeType [; charset =
characterSet ] text/html; charset = isso-
8859-1}"
- isErrorPage = "true | false"
Diretiva Taglib
Define uma biblioteca tag e um prefixo
para uma tag padro usada na pgina
JSP.
<%@ taglib uri="URIToTagLibrary"
prefix="tagPrefix" %>
<tagPrefix:name>
Acessa um padro de funcionalidade de
uma tag.
<tagPrefix:name attribute="value" + ... >
other tags and data
</tagPrefix:name>
<jsp:foward>
Redireciona uma requisio para um
arquivo HTML, JSP ou servlet para
processar.
<jsp:forward page="{relativeURL | <%=
expresso %>}"
5. Comandos Loops
Essa lio trata as rotinas loop do Java que podero ser usadas em pginas JSP.
Trs comandos sero tratados a seguir:
for;
while;
do .. while;
Loop For
O loop for, repete uma instruo ou um bloco de instrues algum nmero de
vezes at que a condio seja satisfeita. Loops for so freqentemente usados
para simples iteraes na qual voc repete um bloco de instrues um certo
nmero de vezes e ento pra; mas voc pode usar loops for para qualquer
espcie de loop. O cdigo abaixo mostra um simples exemplo da utilizao do
lao foor:
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 11
webmaster@dbsystems.com.br
Exemplo 01:
<html>
<body>
<% for (int i = 2; i < 8 ; i++) { %>
<font size=<%= i %>>Bom Dia!!! - Fonte: <%= i %></font>
<% } %>
</body>
</html>
Loop While
O loop while usado para repetir uma instruo ou bloco de instrues at que
uma condio particular seja verdadeira.
Veja o cdigo abaixo:
Exemplo 2:
<html>
<body>
<%
int i = 0;
while (i < 8) { %>
<font size=<%= i %>>Bom Dia!!! - Fonte: <%= i %></font><br>
<%
i++;
} %>
</body>
</html>
Observe que se a condio inicialmente falsa na primeira vez que testada o
corpo do loop while nunca ser executado. Se voc precisa executar o corpo,
pelo menos uma vez, voc pode usar o cdigo do..while que ser visto a seguir.
Loop Do...While
O loop exatamente como o loop while, exceto pelo fato de o loop do executar
uma dada instruo ou bloco at que uma condio seja falsa. A diferena
principal entre os dois que os loops while testam a condio antes de iniciar o
loop, tornando possvel que o corpo do loop nunca seja executado caso a
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 12
webmaster@dbsystems.com.br
condio seja inicialmente falsa. Os loops do...while executam pelo menos uma
vez antes de testar a condio.
Veja o exemplo abaixo:
Exemplo 3:
<html>
<body>
<%
int i = 0;
do { %>
<font size=<%= i %>>Bom Dia!!! - Fonte: <%= i %></font><br>
<%
i++;
}
while (i < 8); %>
</body>
</html>
Interrupo de Loops
Em todos os loops (for, while e do), o loop termina quando a condio que voc
est testando atingida. Porm, em alguma situao, voc desejar sair do
loop antes do seu trmino normal. Para isso, voc pode usar as palavras chaves
break e continue. A palavra chave break pra imediatamente a execuo do
loop corrente. Se voc tiver loops aninhados dentro de loop mais externo; caso
contrrio, o programa simplesmente continua a execuo da prxima instruo
aps o loop.
<html>
<body>
<% int j;
for (int i = 1; i < 8 ; i++) {
j = i%5;
if (j == 0){ break; }
%>
<font size=<%= i %>>Bom Dia!!! - Fonte: <%= i %></font><br>
<% } %>
</body>
</html>
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 13
webmaster@dbsystems.com.br
No exemplo acima, o cdigo dentro do loop executado at que a varivel i
assuma um valor que seja divisvel por 5. Quando isso ocorre, o loop
finalizado e o programa continua a ser executado aps o final do cdigo do loop.
Nesse caso o resultado obtido foi uma a gerao de quatro linhas de cdigo
html (ao invs de 7). Aps gerar a pgina, o servidor JSP enviar para o
navegador o seguinte cdigo:
<html>
<body>
<font size=1>Bom Dia!!! - Fonte: 1</font><br>
<font size=2>Bom Dia!!! - Fonte: 2</font><br>
<font size=3>Bom Dia!!! - Fonte: 3</font><br>
<font size=4>Bom Dia!!! - Fonte: 4</font><br>
</body>
</html>
6. Comandos Condicionais
Embora j possamos escrever algumas aplicaes em JSP com o que j
aprendemos at agora, elas sero ainda fracas. Um dos grandes potenciais de
qualquer linguagem de programao, a utilizao de controles de fluxo
(condicionais e loops) para executar diferentes partes de um programa baseado
em testes. Nas prximas duas sees, aprenderemos os seguintes tpicos:
comandos condicionais;
comandos de loops.
Como foi dito em lies anteriores, o JSP nos permite construir pginas unindo
HTML e comandos Java. Mostraremos nessa lio como utilizar as conhecidas
rotinas condicionais do Java em pginas JSP. Trs comandos sero tratadas a
seguir: if.. else, operador condicional, switch.
Comando IF
Condicionais if contm a palavra-chave if, seguida de um teste booleano, e de
uma instruo (na maioria das vezes um bloco de instrues) para ser
executada se o teste for verdadeiro.
Exemplo 01:
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 14
webmaster@dbsystems.com.br
<html>
<body>
<%-- AS DUAS PROXIMAS LINHAS CRIA UMA VARIVEL
QUE RECEBE O VALOR DA DATA ATUAL DO SERVIDOR --%>
<%
java.util.Date dateNow = new java.util.Date();
int hourNow = dateNow.getHours();
%>
<%-- AS PROXIMAS LINHAS MISTURA HTML E JAVA
E PRODUZ COMO RESULTADO UMA SAUDAO QUE DEPENDE DA HORA --%>
<% if ((hourNow >= 5) && (hourNow < 13)) { %>
<font face="verdana">Bom Dia!!!</font>
<% } else if ((hourNow >= 13) && (hourNow < 19)) { %>
< font face="verdana">Bom Tarde!!!</font>
<% } else if ((hourNow >= 19) && (hourNow < 24)) { %>
<font face="verdana">Bom Noite!!!</font>
<% } else { %>
<font face="verdana">Boa Madrugada!!!</font>
<% } %>
</body>
</html>
Operador Condicional
Uma alternativa para o uso das palavras-chaves if e else em uma instruo
condicional usar o operador condicional, algumas chamado de operador
ternrio.
O operador ternrio uma expresso, significando que ele devolve um valor
(diferentemente do if mais geral, o qual pode resultar em qualquer instruo ou
bloco sendo executado). O operador ternrio muito til para condicionais
muito curtos ou simples, e tem a seguinte formato:
test ? trueResult : falseResul
O teste uma expresso que devolve true e false (semelhante ao teste da
instruo if). Se o teste for verdadeiro retorna o valor de trueResult, caso
contrrio, devolve o valor de falseResult.
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 15
webmaster@dbsystems.com.br
Vamos como podemos usar o operador condicional para obter o mesmo efeito
do cdigo anterior:
Exemplo 2:
<html>
<body>
<%-- AS DUAS PROXIMAS LINHAS CRIA UMA VARIVEL
QUE RECEBE O VALOR DA DATA ATUAL DO SERVIDOR --%>
<%
java.util.Date dateNow = new java.util.Date();
int hourNow = dateNow.getHours();
%>
<%
String mensagem;
mensagem = ((hourNow < 12)? "Onde voc vai almoar hoje?" : "Onde voc
almoou hoje?");
%>
<font face="verdana">Ol, Tudo bem? <%= mensagem %></font>
</body>
</html>
Apesar deste cdigo parecer, a uma primeira vista, um pouco menos fcil de
entender que o anterior, ele menor e portanto mais prtico.
Condicionais Switch
Na instruo switch, o teste (um tipo primitivo de byte, char, short ou int)
comparado com cada valor em questo. Se um valor coincidente achado, a
instruo (ou instrues) depois do teste executada. Se nenhum valor for
encontrado, a instruo default executada. Vamos analisar o exemplo abaixo:
Exemplo 3:
<html>
<body>
<%-- AS DUAS PROXIMAS LINHAS CRIA UMA VARIVEL
QUE RECEBE O VALOR DA DATA ATUAL DO SERVIDOR --%>
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 16
webmaster@dbsystems.com.br
<%
java.util.Date dateNow = new java.util.Date();
int monthNow = (dateNow.getMonth()+1);
%>
<%
String mes;
switch(monthNow){
case 1: mes="Janeiro"; break;
case 2: mes="Fevereiro"; break;
case 3: mes="Maro"; break;
case 4: mes="Abril"; break;
case 5: mes="Maio"; break;
case 6: mes="Junho"; break;
case 7: mes="Julho"; break;
case 8: mes="Agosto"; break;
case 9: mes="Setembro"; break;
case 10: mes="Outubro"; break;
case 11: mes="Novembro"; break;
default: mes="Dezembro"; break;
}
%>
<font face="verdana"> Ns estamos em <%= mes %></font>
</body>
</html>
Esse cdigo atribui a varivel monthNow o valor do ms atual. Note que na
instruo ns incrementamos o ms em uma unidade porque o mtodo
"getMonth()" retorna 0 para o ms de janeiro, 1 para fevereiro e assim por
diante.
Observe que a limitao significativa no Java que os testes e valores podem
ser somente de tipos primitivos. Voc no pode usar tipos primitivos maiores
(long, float) ou objetos dentro de um switch, nem pode testar para nenhuma
outra relao seno a igualdade. Isso limita a utilidade do switch para todos os
casos exceto os mais simples, ifs aninhados podem funcionar para qualquer
espcie de teste em qualquer tipo.
7. Tratando Formulrios
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 17
webmaster@dbsystems.com.br
Os formulrios so ferramentas teis e muito usada em diversas aplicaes:
cadastro registros em um banco de dados, validao de um login/senha, envio
de email, envio de dados de um pesquisa, etc. Hoje difcil desenvolver uma
aplicao para Web que no exija o uso de formulrios. Pois bem, na lio de
hoje vamos aprender manipular formulrios em aplicaes JSP.
Apresentamos abaixo um cdigo para mostrar o formato de um formulrio HTML
e de seus objetos.
<html>
<body>
<!-- cabealho do formulrio -->
<form name="nomedoformulario" action="paginajsp.jsp" method="get">
<!-- caixa de texto -->
<input type="text" name="variavel1" size=40 maxlength=40>
<!-- caixa de texto para senha -->
<input type="password" name="variavel2" size=40 maxlength=40>
<!-objeto do tipo radio -->
<input type="radio" name="variavel2" value="valordavariavel">Texto da
Varivavel 2
<!-objeto do tipo checkbox -->
<input type="checkbox" name="variavel3" value="xxxxx"> Texto da Varivavel
3
<!-objeto do tipo select -->
<select name="variavel4">
<option value="valor1">Valor 1
<option value="valor2">Valor 2
<option value="valor3">Valor 3
</select>
<!- area de texto -->
<textarea name="variavel5" cols=40 rows=2>
Texto da Variavel 5
</textarea>
<!- objeto hidden, para enviar dados que o usurio no v no formulrio -->
<input type="hidden" name="asd" value="asd">
<!- boto -->
<input type="button" value="textodobotao">
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 18
webmaster@dbsystems.com.br
<!- botao de limpar informaes do formulrio -->
<input type="submit" value="limpar">
<!- botao de enviar formulrio -->
<input type="submit" value="ok">
<!- imagem colocada para funcionar com botao de envio de formulrio -->
<input type="image" src="pathdaimage/image.gif">
<!- objeto para anexar arquivo -->
<input type="file" name="asdas" accept="asd">
</form>
</body>
</html>
importante fazermos algumas observaes a cerca do cdigo acima:
- no cabealho do formulrio, indicamos atravs de
action="pathdoarquivo/paginajsp.jsp" o arquivo JSP que receber os seus
dados.
- cada objeto do formulrio recebe um nome. Deve-se tomar bastante cuidado
ao nomear tais objetos, isto porque, como sabemos, as variveis Java so
sensveis maiscula/minscula. Portanto, os objetos:
<input name="variavel1" type="text" value="">
<input name="Variavel1" type="text" value="">
So objetos diferentes porque receberam nomes diferentes (variavel1 e
Variavel1).
Mostraremos mais um exemplo (bastante simples) de como enviar dados a
partir de um formulrio a uma pgina JSP.
<%-- Arquivo teste.jsp --%>
<html>
<body>
<center><h1> <%= request.getParameter("teste") %> </h1></center>
<form action="teste.jsp" method=get>
<input type="text" name="teste" size=40 maxlength=40><br>
<input type="submit" value="enviar">
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 19
webmaster@dbsystems.com.br
</form>
</body>
</html>
A pgina jsp acima, chamada "teste.jsp", contm um formulrio que envia para
ela mesma. O valor digitado em uma caixa de texto ser mostrado como ttulo
da pgina. Observe como fizemos isso:
- a pgina para qual ns enviaremos os dados do formulrio designada no
cabealho do formulrio:
<form action="teste.jsp" method=get>
- o nome do objeto caixa de texto caixa de texto ("teste") usado na expresso
request.getParameter("teste"). Note que se usssemos
request.getParameter("Teste") (com T maisculo), a pgina no iria retornar o
valor digitado na caixa de texto.
O prximo exemplo formado por dois arquivos. O primeiro pode contm
apenas cdigos HTML e o segundo contm cdigos HTML e JSP.
Arquivo "envia_ms.htm":
<html>
<body>
<h3>Qual o ms do seu aniversrio?</h3>
<form action="recebe_mes.jsp" method=get>
<select name="mesNasceu">
<option value="1">Janeiro
<option value="2">Fevereiro
<option value="3">Maro
<option value="4">Abril
<option value="5">Maio
<option value="6">Junho
<option value="7">Julho
<option value="8">Setembro
<option value="9">Agosto
<option value="10">Outubro
<option value="11">Novembro
<option value="12">Dezembro
</select>
<input type="submit" value="enviar">
</form>
</body>
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 20
webmaster@dbsystems.com.br
</html>
Arquivo "recebe_ms.jsp":
<%@ page import=java.util.Date %>
<%@ page import=java.lang.String %>
<%
String msg = "";
String mesString = request.getParameter("mesNasceu");
int mes = Integer.parseInt(mesString);
Date dateNow = new Date();
int monthNow = dateNow.getMonth() + 1;
mes -= monthNow;
if (mes == 1)
msg = "Falta apenas "+ mes +" ms para o seu aniversrio.";
if (mes == -1)
msg = "Seu aniversrio foi no ms passado";
if (mes > 1)
msg = "Faltam "+ mes +" meses para o seu aniversrio.";
if (mes == 0)
msg = "Oba... estamos no ms do seu aniversrio.";
else if (mes < 1)
{
mes *= -1;
msg = "Seu aniversrio foi a "+ mes +" meses atrs.";
}
%>
<html>
<body>
<center>
<h3><%= msg %></h3>
<br><br><br>
<a href="Javascript:history.back(-1)">voltar</a>
</center>
</body>
</html>
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 21
webmaster@dbsystems.com.br
O exemplo acima um pouco menos simples que o primeiro. O arquivo
"envia_mes-jsp" contm um formulrio com um objeto select que envia o ms
que a pessoa nasceu. Aps escolher o ms e clicar no boto "ok", o formulrio
chama a pgina "recebe_ms.jsp" e envia seus dados para ela. Esta segunda
pgina um pouco menos simples que a primeira. Vamos analisar o que ela
faz:
- nas primeira linhas utilizamos as tags "page import" para indicar quais classes
iremos utilizar em nossa pgina:
<%@ page import=java.util.Date %>
<%@ page import=java.lang.String %>
- cinco objetos so criados e inicializados.
- Usamos o mtodo "request.getParameter(nomedoparametro)" com a
finalidade de pegar o valor passado para a pgina atravs de algum formulrio
ou passando diretamente em sua URL. O segundo objeto foi inicializado
utilizando esse mtodo para pegar o valor passado pelo formulrio:
String mesString = request.getParameter("mesNasceu");
- O valor passado atravs de um formulrio ou atravs da URL da pgina
sempre do tipo String. Ao inicilizarmos o terceiro objeto, o mtodo
"Integer.parseInt(variavelString)" transformou o valor contido na varivel
mesString em Inteiro.
int mes = Integer.parseInt(mesString);
- O penltimo objeto criado do tipo Date (da a importncia de termos
importado a classe java.util.Date na primeira linha de nossa pgina). Ele
inicializado com a hora local do servidor.
Date dateNow = new Date();
- Na inicializao do ltimo objeto utilizamos o mtodo "dateNow.getMonth()"
que retorna um inteiro indicando o valor da varivel. Somamos 1 ao valor
retornado a partir desse mtodo porque ele retorna 0 para janeiro, 1 para
fevereiro e assim por diante.
int monthNow = dateNow.getMonth() + 1;
- Cinco teste so efetuados dentro de um script (<% e %>). Eles so usados
para definir o valor que a varivel "msg" ter, ou seja, a partir dos testes,
decidiremos qual mensagem ser exibida na tela.
- Aps efetuar os testes, o texto HTML inserido na pgina.
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 22
webmaster@dbsystems.com.br
- Uma expresso (<%= %>) usada para exibir o valor da varivel "msg":
<%= msg %>
8. Objetos Implcitos - Introduo
Como j vimos anteriormente, podemos criar, dentro de scriptlets na pgina
JSP, instncias de uma classe Java e manipul-las a fim de produzir contedo
dinmico. Por exemplo, podemos criar um objeto de uma classe que acessa
uma base de dados e ento usar mtodos desse objeto para exibir na pgina
uma consulta ou transao com a base de dados. Ou seja, atravs da
manipulao desse objeto, quer seja acessando seus mtodos e suas variveis,
podemos gerar contedo dinmico para a pgina JSP.
Alm de objetos como esses, que esto completamente sobre o controle do
programador, o container JSP se encarrega de instanciar automaticamente,
durante a execuo de uma pgina JSP, alguns objetos. Tais objetos podem ser
usados dentro da pgina JSP e so conhecidos como "Objetos Implcitos".
Assim como todo objeto em Java, cada objeto implcito uma instncia de uma
classe ou interface e segue uma API correspondente. Abaixo segue um resumo
dos objetos implcitos disponveis em JSP, suas respectivas classes/interfaces e
uma pequena descrio do objeto.
Objetos implcitos de JSP e suas APIS para aplicaes de HTTP.
Objeto Classe ou Interface Descrio
Page javax.servlet.jsp.HttpJspPage Instncia de servlet da pgina
Config javax.servlet.ServletConfig Dados de configurao de servlet
Request javax.servlet.http.HttpServletRequest Dados de solicitao, incluindo parmetros
Response javax.servlet.http.HttpServletResponse Dados de resposta
Out javax.servlet.jsp.JspWriter Fluxo de sada para contedo da pgina
Session javax.servlet.http.HttpSession Dados de sesso especficos de usurio
Application javax.servlet.ServletContext Dados compartilhados por todas as pginas de
aplicao
PageContext javax.servlet.jsp.PageContext Dados de contexto para execuo da pgina
Exception javax.lang.Throwable Erros no capturados ou exceo
Os nove objetos implcitos fornecidos por JSP podem ser classificados da
seguinte forma:
Objetos relacionados ao servlet da pgina (page, config):
Os dois objetos implcitos de JSP nesta categoria se baseiam na implementao
da pgina JSP como um servlet.
Objetos relacionados ao output e input da pgina (request, response,
out):
Os objetos classificados nessa categoria se concentram na entrada e sada
(input/output) de uma pgina JSP.
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 23
webmaster@dbsystems.com.br
Objetos contextuais (application, session, request, pageContext):
Os objetos implcitos dessa categoria fornece pgina JSP acesso ao contexto
dentro do qual ela est respondendo.
Objetos resultantes de erros (exception):
Esta ltima categoria dos objetos implcitos fornece apenas um objeto que
usado no tratamento de erros dentro de uma pgina JSP.
Esse mdulo do curso sobre Objetos Implcitos foi dividido em seis partes. Nas
quatro primeiras sero abordadas as categorias de objetos implcitos listadas
acima. As duas ltimas trazem exemplos prticos do uso dos objetos implcitos:
Parte 1 - Objetos Relacionados a Servlets
Parte 2 - Objetos Relacionados a Input/Output da pgina
Parte 3 - Objetos Contextuais
Parte 4 - Objetos de Tratamento de Erro
Parte 5 - Criando funes que manipulam objetos implcitos
Parte 6 - Exemplos do uso de Objetos Implcitos
9. Objetos Relacionados ao Servlet
Os objetos implcitos nesta categoria se baseiam na implementao da pgina
JSP como um servlet. Os dois objetos classificados nessa categoria so:
page
config
Objeto page
O objeto page representa a prpria pgina JSP ou, mais especificamente, uma
instncia da classe de servlet na qual a pgina foi traduzida. O objeto page
implementa as interfaces javax.servlet.jsp.HttpJspPage e
javax.servlet.jsp.JspPage. Abaixo esto os links para a API que define essas
interfaces:
HttpJspPage
JspPage
Exemplo utilizando o objeto implcito page:
<%@ page info="Pgina de Teste" %>
.....
<%= ((javax.servlet.jsp.HttpJspPage)page).getServletInfo() %>
Objeto config
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 24
webmaster@dbsystems.com.br
O objeto config armazena dados de configurao de servlet - na forma de
parmetros de inicializao - para o servlet na qual uma pgina JSP
compilada. Pelo fato das pginas JSP raramente serem escritas para interagir
com parmetros de inicializao, este objeto implcito raramente usado na
prtica. O objeto config uma intncia da interface javax.servlet.ServletConfig.
Os mtodos fornecidos por esta interface para recuperar parmetros de
inicializao de servlet esto listados abaixo:
Mtodos Descrio
Enumeration getInitParameterNames()
Recupera os nomes de todos os parmetros de
inicializao.
String getInitParameter(String name)
Recupera o valor do parmetro de inicilizao a partir
de um nome.
Abaixo esto os links para a API que define a interface
javax.servlet.ServletConfig:
ServletConfig
10. Objetos Relacionados a OutPut/InPut da pgina
Os objetos classificados nessa categoria se concentram no input (entrada de
dados) e output (sada de informao) de uma pgina JSP. Os trs objetos
classificados nessa categoria so:
request
response
out
Objeto request
O objeto request representa a solicitao que requisitou a pgina. O objeto
request implementa a interface javax.servlet.http.HttpServletRequest
(subinterface de javax.servlet.ServletRequest). Esse objeto, que tambm
classificado como um objeto contextual, um dos mais complexos e mais
utilizados na construo de pginas JSP. Podemos dividir os mtodos desse
objeto em quatro funcionalidades:
Armazenar e Recuperar valores de atributos:
Mtodo Descrio
Void setAttribute(String key, Object value) Associa um valor de atributo com um nome.
Enumeration getAttributeNames()
Recupera os nomes de todos os atributos associados com o
objeto.
Object getAttribute(String key) Recupera o valor de atributo associado com a chave.
void removeAttribute(String key)
Remove o valor de atributo associado com a chave.
Recuperar parmetros de solicitao e cabealho de HTTP:
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 25
webmaster@dbsystems.com.br
Mtodos Descrio
Enumeration getParameterNames()
Retorna os nomes de todos os parmetros de
solicitao.
String getParameter(String name)
Retorna os primeiro valor (principal) de um nico
parmetro de solicitao.
String[] getParameterValues(String name)
Recupera todos os valores para um nico parmetro
de solictao.
Recuperar cabealhos de solicitao e cabealhos de HTTP:
Mtodos Descrio
Enumeration getHeaderNames()
Recupera os nomes de todos os cabealhos
associados com a solicitao.
String getHeader(String name)
Retorna o valor de um nico cabealho de solicitao,
como uma cadeia.
Enumeration getHeaders(String name)
Retorna todos os valores para um nico cabealho de
solicitao.
Int getIntHeader(String name)
Retorna o valor de um nico cabealho de solicitao,
com um nmero inteiro.
Long getDateHeader(String name)
Retorna o valor de um nico cabealho de solicitao,
como uma data.
Cookies[] getCookies()
Recupera todos os cookies associados com a
solicitao.
Diversos mtodos da interface que javax.servlet.hhtp.HttpServletRequest:
Mtodos Descrio
String getMethod() Retorna o mtodo de HTTP (e.g, POST, GET, etc) para a solicitao.
String getRequestURI() Retorna o URL de solicitao (no inclui a cadeia de consulta).
String getQueryString()
Retorna a cadeia de consulta que segue o URL de solicitao, se
houver algum.
HttpSession getSession()
Recupera os dados da sesso para a solicitao (i.e, o objeto
implcito session).
HttpSession getSession(boolean flag)
Recupera os dados da sesso para a solicitao (i.e, o objeto
implcito session), opcionalmente criando-o se ele ainda no existir.
RequestDispatcher
getRequestDispatcher(String path)
Cria um dispatcher de solicitao para o URL local indicado.
String getRemoteHost()
Retorna o nome totalmente qualificado do host que enviu a
solicitao.
String getRemoteAddr() Retorna o endereo de rede (IP) do host que enviou a solicitao.
String getRemoteUser() Retorna o nome do usurio que enviou a solicitao, se conhecido.
Abaixo esto os links para a API que define essas interfaces:
ServletRequest
HttpServletRequest
Exemplo utilizando o objeto implcito request:
.....
Seu IP :<%= request.getRemoteAddr() %><br>
Seu Host :<%= request.getRemoteHost() %><br>
.....
Objeto response
O objeto response representa a resposta que ser enviada de volta para o
usurio como resultado do processamento da pgina JSP. Este objeto
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 26
webmaster@dbsystems.com.br
implementa a interface javax.servlet.http.HttpServletResponse que uma
subinterface de javax.servlet.ServletResponse.
Podemos dividir os mtodos desse objeto em quatro funcionalidades:
Especificar o tipo de contedo e codificao da resposta:
Mtodos Descrio
Void setContentType(String type)
Define o tipo MIME e, opcionalmente, a codificao de caracteres do
contedo da resposta.
String getCharacterEncoding()
Retorna o conjunto de estilos de codificao de caracteres para o
contedo da resposta.
Definir cabealhos da resposta:
Mtodos Descrio
Void addCookies(Cookie cookie) Adiciona o cookie especificado.
Boolean containsHeader(String name) Verifica se a resposta inclui o cabealho.
Void setHeader(String name, String value)
Atribui o valor definido pela varivel "value" ao cabealho
especificado por "name"
Void setIntHeader(String name, int value)
Atribui o valor de nmero inteiro especificado por "value" ao
cabealho especificado por "name"
Void setDateHeader(String name, long date)
Atribui o valor de data especificado por "value" ao cabealho
especificado por "name"
Void addHeader(String name, String value)
Adiciona o valor definido por "value" ao cabealho especificado
por "name"
Void addIntHeader(String name, int value)
Adiociona o valor de nmero inteiro especificado por "value"
ao cabealho especificado por "name"
Void addDateHeader(String name, long
date)
Adiciona o valor de data especificado por "value" ao cabealho
especificado por "name"
Definir cdigos de resposta:
Mtodos Descrio
Void setStatus(int code)
Define o cdigo de status para a resposta (para cisrcuntncias sem
erro)
Void sendError(int status, String
msg)
Define o cdigo de status e mensagem de erro para a resposta.
Void sendRedirect(String url)
Envia uma resposta para o navegador indicando que ele deveria
solicitar um URL alternativo (absoluto)
Reescrita da URL:
Mtodos Descrio
String encodeRedirectURL(String url)
Codifica um URL para uso com o mtodo
sendRedirect() para incluir informaes de sesso.
String encodeURL(String url)
Codifica um URL usado em um link para incluir
informaes de sesso.
Abaixo esto os links para a API que define essas interfaces:
ServletResponse
HttpServletResponse
O exemplo abaixo ilustra uma das utilidades desse objeto. Vrios cabealhos
so definidos para evitar que a pgina seja armazenada em cache por um
navegador.
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 27
webmaster@dbsystems.com.br
<%
response.setHeader("Expires", 0);
response.setHeader("Pragme, "no-cache");
if(request.getProtocol().equals("HTTP/1.1")){
response.setHeader("Cache-Control", "no-cache");
}
%>
Este script primeiro define o cabealho Expires para uma data no passado. Isto
significa que o contedo da pgina j expirou, como uma dica que seu contedo
no deve ser armazenado em cache.
Objeto out
Este objeto implcito representa o fluxo de sada para a pgina, cujo contedo
ser enviado para o navegador com o corpo de sua resposta. O objeto out
uma intncia da classe javax.servlet.jsp.JspWriter.
Esse objeto implementa todos os mtodos print() e println() definidos por
java.io.Writer.
Por exemplo, o objeto out pode ser usado dentro de um script para adicionar
contedo pgina gerada. Veja o exemplo abaixo:
<%
int i = (int)(Math.random()*10);
if(i%2==0){
out.print("O Nmero escolhido "+ i +" par!");
}
else {
out.print("O Nmero escolhido "+ i +" impar!");
}
%>
Esse objeto muito utilizado para para gerar contedo dentro do corpo de um
script, sem ter que fech-lo temporariamente para inserir contedo de pgina
esttico. Contudo, deve-se evitar usar os mtodos print() ou println() para
inserir cadeias de caracteres muito grandes. No prximo caso, mais
aconselhvel fechar o script e inserir o contedo esttico. Veja o exemplo
abaixo:
No Aconselhvel:
<%
if(i == 1){
out.print("<h6>"+
"<font face='verdana'>"+
"Guga viaja nesta sexta"+
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 28
webmaster@dbsystems.com.br
"para a Sua para"+
"jogar"+
"</font>"+
"</h6>");
}
%>
Aconselhvel:
<% if(i == 1) {%>
<h6>
<font face='verdana'>
Guga viaja nesta sexta
para a Sua para
jogar
</font>
</h6>
<% } %>
O links abaixo refere-se a API que define a interfaces que o objeto out
implementa:
JspWriter
11. Objetos Contextuais
Os objetos implcitos dessa categoria fornece pgina JSP acesso ao contexto
dentro do qual ela est respondendo. Os quatro objetos implcitos contextuais
so:
request;
session;
application;
pageContext.
Todos eles tm a capacidade de armazenar e recuperar valores de atributos
arbitrrios. Os atributos de pgina, armazenados no objeto pageContext,
duram apenas enquanto o processamento de uma nica pgina ocorre. Os
atributos de solicitao, armazenados no objeto request, tambm tem pouca
durao, mas podem ser transferidos entre pginas quando for transferido o
controle. Os atributos de sesso, armazenados no objeto session, duram
enquanto o usurio continuar a interagir com o servidor da web. Os atributos de
aplicao, armazenados no objeto application, so mantidos enquanto o
container JSP mantiver uma ou mais pginas de uma aplicao carregada na
memria - enquanto o container JSP estiver rodando. A tabela a seguir traz os
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 29
webmaster@dbsystems.com.br
mtodos comuns aos quatro objetos e que so usados para armazenar e
recuperar valores de atributos:
Tabela 1: Os mtodos comuns a esses quatro objetos e que so usados para
armazenar e recuperar valores de atributos:
Mtodos Descrio
void setAttribute(String key, Object value) Associa um valor de atributo com um nome.
Enumeration getAttributeNames()
Recupera os nomes de todos os atributos associados com o
objeto.
Object getAttribute(String key) Recupera o valor de atributo associado com a chave.
void removeAttribute(String key)
Remove o valor de atributo associado com a chave.
Objeto session
Este objeto representa a sesso atual de um usurio individual. Todas as
solicitaes feitas por um usurio so consideradas parte de uma sesso. Desde
que novas solicitaes por aqueles usurios continuem a ser recebidas pelo
servidor, a sesso persiste. Se, no entanto, um certo perodo de tempo passar
sem que qualquer nova solicitao do usurio seja recebida, a sesso expira.
O objeto session armazena informaes a respeito da sesso. Um dos
principais usos para o objeto session armazenar e recuperar valores de
atributos, a fim de transmitir as informaes especficas de usurios entre as
pginas. Abaixo segue um exemplo que armazena dados na sesso, na forma
de um objeto que instncia de uma classe hipottica "Usuario":
<%
Usuario u = new Usuario(nome, senha);
session.setAttribute("usuario", u);
%>
Uma vez que um objeto tenha sido armazenado atravs do mtodo
setAttibute(), ele pode ser recuperado - na mesma pgina ou em outra
acessada pelo usurio. O cdigo abaixo ilustra a recuperao do objeto
armazenado no cdigo anterior:
<%
Usuario u = (Usuario)session.getAttribute("usuario");
.....
%>
Perceba que o mtodo getAttribute() retorna um objeto da classe Object,
portanto, necessrio fazermos um cast para converter o objeto retornado em
uma instncia da classe desejada.
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 30
webmaster@dbsystems.com.br
O objeto session implementa a interface javax.servlet.http.HttpSession. A
tabela abaixo traz os principais mtodos utilizados por esse objeto, alm
daqueles descritos anteriormente na tabela 1:
Mtodos Descrio
Object getAttibute(String nome) Recupera o objeto identificado por "nome".
String getId() Retorna o Id da sesso.
long getCreationTime() Retorna a hora na qual a sesso foi criada.
long getLastAccessedTime()
Retorna a ltima vez que uma solicitao associada
com a sesso foi recebida.
int getMaxInactiveInterval()
Retorna o tempo mximo (em segundos) entre
solicitaes pelo qual a sesso ser mantida.
void setMaxInactiveInterval(int time)
Define o tempo mximo (em segundos) entre
solicitaes pelo qual a sesso ser mantida.
boolean isNew()
Retorna se o navegador do usurio ainda no tiver
confirmado o ID de sesso.
boolean invalidate()
Descarta a sesso, liberando quaisquer objetos
armazenados como atributos.
O link abaixo exibe a API completa da interface que implementa o objeto
session:
HttpSession
Objeto application
Este objeto representa a aplicao qual a pgina JSP pertence. Ele uma
instncia da interface javax.servlet.ServletContext. Os containers JSP
tipicamente tratam do primeiro nome de diretrio em um URL como uma
aplicao. Exemplo:
http://server/dbsystems/index.jsp
http://server/dbsystems/principal.jsp
http://server/dbsystems/forum/forum.jsp
http://server/dbsystems/apostila/apostila.jsp
So todos considerados parte da mesma aplicao dbsystems.
Alm dos mtodos descritos na tabela 1, os mtodos do objeto application
podem ser divididos em quatro funcionalidades:
Recuperar informaes de verso do container servlet:
Mtodo Descrio
String getServerInfo() Retorna o nome e verso do container servlet.
int getMajorVersion() Retorna a verso principal da API do servlet para o container servlet.
int getMinorVersion() Retorna a verso secundria da API do servlet para o container servlet.
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 31
webmaster@dbsystems.com.br
Interagir com arquivos e caminhos no servidor:
Mtodo Descrio
String getMimeType(String filename)
Retorna o tipo MIME para o arquivo indicado, se conhecido
pelo servidor.
URL getResource(String path)
Traduz uma cadeia especificando um URL em um objeto
que acessa os contedos dos URLs, localmente ou na rede.
InputStream getResourceAsStream(String path)
Traduz uma cadeia especificando um URL em um fluxo de
entrada para ler seu contedo.
String getRealPath(String path)
Traduz um URL local em um nome de caminho no sistema
de arquivo local.
ServletContext getContext(String path)
Retorna o contexto de aplicao para o URL local
especificado.
RequestDispatcher getRequestDispatcher(String
path)
Cria um dispacher de solicitao para o URL local indicado.
Suporte para log de mensagens:
Mtodo Descrio
Void log(String message) Grava a mensagem o arquivo de log.
Void log(String message, Exception e)
Grava a mensagem no aqrquivo de log, junto com a trilha de pilha
para a exceo especificada.
Acessar parmetros de inicializao:
Mtodo Descrio
Enumerations getInitParameterNames()
Recupera os nomes de todos os parmetros de
inicializao.
String getInitParameter(String name)
Recupera o valor do parmetro de inicilizao como o
nome dado.
O link abaixo exibe a API completa da interface que implementa o objeto
application: ServletContext
Objeto pageContext
O objeto pageContext fornece vrias facilidades como gerenciamento de
sesses, atributos, pginas de erro, incluses e encaminhamento de requisies
de fluxo de resposta.
O objeto pageContext uma instncia da classe
javax.servlet.jsp.PageContext. Alm dos mtodos descritos na tabela 1, os
principais mtodos desse objeto podem ser divididos em trs categorias:
Acessar outros objetos implcitos de JSP:
Mtodo Descrio
Object getPage()
Retorna a instncia de servlet para a pgina atual (objeto implcito
page).
ServletRequest getRequest()
Retorna a solicitao que iniciou o processamento da pgina (objeto
implcito request).
ServletResponse Retorna a resposta para a pgina (objeto implcito response).
JspWriter getOut Retorna o fluxo de sada atual para a pgina (objeto implcito out).
HttpSession getSession()
Retorna a sesso associada com a solicitao da pgina atual, se
houver alguma (objeto implcito session).
ServletConfig getServletConfig() Retorna o objeto de configurao de servlet (objeto implcito config).
ServletContext getServletContext()
Retorna o contexto no qual o servlet da pgina roda (objeto implcito
application).
Exception getException()
Para pginas de erro, retorna a exceo passada para a pgina
(objeto implcito exception).
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 32
webmaster@dbsystems.com.br
Envio de solicitaes de uma pgina JSP para outra:
Mtodo Descrio
void forward(String path) Encaminha o processamento para um outro URL local dado pela String path.
void include(String path) Inclui o output do processamento de um outro URL local.
Acessar atributos atravs de mltiplos escopos:
Mtodo Descrio
void setAttribute(String key, Object obj, int scope)
Associa o valor do atributo "obj" com a chave "key"
no escopo "scope".
Enumeration getAttributeNamesInScope(int scope)
Recupera os nomes de todos os atributos associado
com "key" no escopo "scope".
Object getAttribute(String name, int scope)
Recupera o valor de tributo associado com "name" no
escopo "scope"
removeAttribute(String name, int scope)
Remove o valor de atributo associado com "name" no
escope "scope"
Object findAttribute(String name)
Procura em todos os escopos pelo atributo associado
com "name".
int getAttributesScope(String name)
Retorna o escopo no qual o atributo associado com
"name" est armazenado.
Os ltimos dois mtodos listados na tabela anterior permitem a procura, atravs
de todos os escopos definidos, por um atributo associado com uma String
passada como parmetro. Nos dois casos, o objeto pageContext ir realizar
uma busca atravs dos escopos na seguinte ordem: pageContext, request,
session e application.
A tabela anterior traz mtodos que recebe parmetros para especificar o
escopo. A classe javax.servlet.jsp.PageContext fornece variveis estticas para
representar estes quatro escopos diferentes. A tabela a seguir resume estas
variveis:
Varivel Descrio
PAGE_SCOPE Escopo para atributos armazenados no objeto pageContext.
REQUEST_SCOPE Escopo para atributos armazenados no objeto request.
SESSION_SCOPE Escopo para atributos armazenados no objeto session.
APPLICATION_SCOPE Escopo para atributos armazenados no objeto application.
O exemplo abaixo ilustra o uso do mtodo "getAttribute" e das variveis
estticas descritas na tabela anterior:
<%
User uPag=(User)pageContext.getAttibute("user",pageContext.PAGE_SCOPE)
//Recupera o object "usuario" do escopo pageContext
User
uReq=(User)pageContext.getAttibute("user",pageContext.REQUEST_SCOPE)
//Recupera o object "usuario" do escopo request
User
uSes=(User)pageContext.getAttibute("user",pageContext.SESSION_SCOPE)
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 33
webmaster@dbsystems.com.br
//Recupera o object "usuario" do escopo session
User
uApp=(User)pageContext.getAttibute("user",pageContext.APPLICATION_SCOPE
)
//Recupera o object "usuario" do escopo application
%>
O link abaixo exibe a API completa da interface que implementa o objeto
pageContext:
PageContext
12. Tratamento de Erros
Esta ltima categoria dos objetos implcitos tem apenas um membro, o objeto
exception. Este objeto implcito fornecido com o propsito de tratamento de
erros dentro de uma pgina JSP.
Objeto Exception
O objeto exception no est automaticamente disponvel em todas as pginas
JSP. Este objeto est disponvel apenas nas pginas que tenham sido
designadas como pginas de erro, usando o atributo isErrorPage configurado
com true na diretiva page. O objeto exception uma instncia da classe
java.lang.Throwable correspondente ao erro no capturado que fez com que o
controle fosse transferido para a pgina de erro. Os principais mtodos da
classe java.lang.Throwable que so utilizados dentro das pginas JSP so
listados na tabela abaixo:
Mtodo Descrio
String getMessage()
Retorna a mensagem de erro descritiva associada
com a exceo quando ela foi lanada.
void printStackTrace(PrintWriter out)
Imprime a pilha de execuo em funcionamento
quando a exceo foi lanada para o fluxo de sada
especificado pelo parmetro out.
String toString()
Retorna uma cadeia combinando o nome da classe da
exceo com sua mensagem de erro, se houver
alguma.
O trecho abaixo ilustra o uso do objeto exception em uma pgina de erro JSP:
<@ page isErrorPage=true %>
<h1>Erro Encontrado</h1>
O seguinte erro foi eoncontrado:<br>
<b><%= exception %></b><br>
<% exception.printStackTrace(out); %>
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 34
webmaster@dbsystems.com.br
13. JavaBeans
JavaBeans so componentes de software que so projetados para serem
unidades reutilizveis, que uma vez criados podem ser reusados sem
modificao de cdigo, e em qualquer propsito de aplicao, seja um applet,
um servlet ou qualquer outra.
Um modelo de componente definido como um conjunto de classes e interfaces
na forma de pacotes Java que deve ser usado em uma forma particular para
isolar e encapsular um conjunto de funcionalidades.
Os componentes JavaBeans so tambm conhecidos como Beans. Passaremos a
usar esta nomenclatura no restante deste curso.
Neste curso no falaremos sobre todos os conceitos de JavaBeans, daremos
ateno queles conceitos que mais so utilizados nas pginas JSP.
Regras para Escrever Beans
Para que esses componentes possam ser reconhecidos de forma geral, sua
implementao deve seguir um conjunto de regras que sero usadas pelas
ferramentas para introspeco da classe, ou seja, o processo de descobrir quais
as funcionalidades do Bean e disponibiliz-la para o usurio. Cabe ao usurio
fazer a interface entre o componente e o restante da aplicao, criando assim
um novo tipo de programador, o programador de componenetes.
import java.io.Serializable;
01 public class MyBean implements Serializable {
02
03 private int property1;
04 private boolean property2;
05
06 public MyBean() {
07
08 }
09
10 public void setProperty1(int property1) {
11 this.property1 = property1;
12 }
13
14 public void setProperty2(boolean property2) {
15 this.property2 = property2;
16 }
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 35
webmaster@dbsystems.com.br
17
18 public int getProperty1() {
19 return property1;
20 }
21
22 public boolean isProperty2() {
23 return property2;
24 }
25 }
Esta classe um exemplo do que devemos seguir para tornar uma classe um
bean, ou seja, o conjunto de regras que devemos obdecer para tornar o
compoenente reconhecvel por ferramentas e usvel.
Um bean, como modelo de componente, usa a idia de encapsulamento.
Portanto, as suas variveis devem ser acessadas somente atravs de mtodos.
As variveis de um Bean so suas propriedades.
A primeira regra que devemos respeitar o construtor. O construtor de um
bean deve ser sem parametros.
Outra regra que devemos seguir diz respeito ao nome dos mtodos que daro
acesso as propriedades do bean. Os mtodos podem ser divididos em duas
categorias:
Mtodos de Leitura:
Os mtodos de leitura de propriedades devem seguir a seguinte conveno:
public TipoDaPropriedade getNomeDaPropriedade()
Como mostrado no cdigo acima a propriedade chamada property1 tem o
mtodo de acesso getProperty1 . Note que a primeira letra da propriedade deve
ser minuscula enquanto a primeira letra depois do get deve ser em maiscula. A
palavra TipoDaPropriedade deve ser substituida por o tipo da propriedade. Para
variveis booleanas vale o mesmo conceito, mas, ao invs do get usamos a
palavra is. No exemplo temos o acesso a propriedade property2 que booleana
como:
public boolean isProperty2()
Observao: Voc pode no definir um mtodo de leitura para a varivel. Se
isto for feito voc no permitir o acesso a ela.
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 36
webmaster@dbsystems.com.br
Mtodos de escrita:
Os mtodos de escrita permitem ao usurio do componente modificar o
contedo da propriedade. Ele segue a seguinte terminologia:
public void setNomeDaPropriedade(TipoDaPropriedade varName)
Nos mtodos de escrita no h caso especial para variveis booleanas que
tambm podem ser modificadas atravs de mtodos set.
Voc pode no definir mtodos de escrita para uma determinada varivel,
fazendo com que o usurio no seja capaz de modificar o contedo da
propriedade.
Outra regra que um Bean deve seguir a implementao da interface
Serializable. A implementao desta interface fornece ao bean a propriedade
chamada de persistncia.
O conceito de persistncia permitir que o usurio faa uso do componente em
um determinado momento e possa salvar o seu estado para o uso posterior
partindo do mesmo ponto. A tecnologia que possibilita essa propriedade a
Serializao de Objetos. Esta tecnologia permite salvarmos o objeto em um
fluxo para posterior recuperao. Quando houver a recuperao, o objeto deve
se comportar como se fosse exatamente o mesmo de quando foi salvo, se
olharmos o objeto como uma mquina de estado, ento podemos dizer que o
objeto recuperado no mesmo estado de quando foi salvo.
A tecnologia de serializao de objetos muito importante em Java pois permite
a linguagem atividades complexas como computao distribuda e alm de
muitas outras funcionalidades interessantes.
Para sermos capazes de serializar objetos basta fazer a classe implementar a
interface Serializable e nada mais.
Propriedades de um Bean
Os beans possuem diversos tipos de propriedades, que so:
Simples: Propriedades simples alteram a aparncia ou comportamento do
bean e so acessadas atravs dos mtodos de escrita e leitura mostrados.
Ligadas: As propriedades deste tipo quando alteradas provocam uma
notificao para algum evento.
Reprimidas: As propriedades podem ter sua mudana vetada pelo prprio
bean ou por objetos externos.
Indexadas: Propriedades indexadas representam colees de valores
acessados por indices, como arrays. A seguinte regra deve ser seguida por
propriedades indexadas.
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 37
webmaster@dbsystems.com.br
Para as propriedades indexadas temos:
Mtodos de leitura do array inteiro:
public TipoDaPropriedade[] getNomeDaPropriedade();
public void setNomeDaPropriedade(TipoDaPropriedade[] value);
Mtodos de leitura de elementos individuais:
public TipoDaPropriedade getNomeDaPropriedade(int index);
public void setNomeDaPropriedade(int index, TipoDaPropriedade value);
Como as ferramentas lem os Beans ?
JavaBeans so desenvolvidos param serem usados por terceiros (ou no). As
ferramentas de desenvolvimento em Java so capazes de ler beans e prover a
funcionalidade do componente para o usurio. Mas como as ferramentas so
capazes de descobrir a funcionalidade de um Bean j que ele no uma classe
conhecida, ou seja, pode ser qualquer componente?
Para a realizao desta tarefa, que chamamos introspeco, usada uma API
disponvel no Ambiente Runtime da plataforma Java, a Java Reflection API .
Usando a funcionalidade desta API a ferramenta procura os mtodos pblicos do
bean e faz a ligao dos mtodos com as propriedades. Aps a ferramenta ter
obtido todas as informaes que ela necessita sobre a classe ento as
propriedades e os mtodos so disponibilizados para uso.
A introspeco realizada pela classe java.beans.Introspector que usa a
Reflection API para descobrir as funcionalidades do bean por casamento de
padro. No entanto, alternativamente voc pode definir as informaes sobre o
Bean em separado, em uma classe que implementa a interface BeanInfo,
porm no entraremos em detalhes sobre isso.
importante saber que um bean tambm pode implementar outros mtodos
que no aqueles que lem ou gravam as propriedades. Esses mtodos no
diferem em nada de outros mtodos de qualquer outra classe em Java.
JavaBeans x Enterprise JavaBeans
J conhecemos o que um JavaBean, ento agora podemos compar-los com o
Enterprise JavaBeans (EJB). Quais as diferenas?
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 38
webmaster@dbsystems.com.br
Os JavaBeans assim como o EJB so modelos de componente, porm apesar
dos dois compartilharem o termo JavaBeans os modelos no so relacionados.
Uma parte da literatura tem referenciado EJB como uma extenso dos
JavaBeans, mas isto uma interpretao errada. As duas APIs servem para
propsitos bem diferentes.
O JavaBean tem a inteno de ser usado em propsitos do mesmo processo
(intraprocesso) enquanto EJB projetado para ser usado como componentes
interprocessos. Em outras palavras, os JavaBeans no tm a inteno de ser
usado como componente distribudo assim como o EJB.
O EJB uma tecnologia que est em grande asceno e ser abordado em
futuros materias da DBSystems.
14. Ao jsp:useBean
Aes possibilitam a realizao de tarefas complexas como instanciao de
objetos, comunicao com recursos do lado do servidor como pginas JSP e
servlets sem a necessidade de cdigo Java. Embora o mesmo possa ser feito
com o uso de cdigo Java dentro de scriptlets, o uso das tags de aes
promovem reusabilidade de seus componentes e aumenta a capacidade de
manuteno da pgina.
Usando componentes JavaBeans
A tecnologia de componentes para JSP baseada em componentes JavaBeans.
Antes de acessar um bean dentro de uma pgina JSP, necessrio identificar o
bean e obter uma referncia dele. A tag jsp:useBean tenta obter uma referncia
de um bean que j esteja criado, dependendo do escopo em que ele foi
definido. Caso no haja o componente definido haver a criao de um novo
objeto.
Por exemplo a tag:
<jsp:useBean id="contador" class="dbsystems.Contador" scope="session"/>
Neste exemplo, a tag useBean instanciar um objeto que ser identificado por
contador, a partir da classe dbsystems.Contador. A definio do escopo depende
muito do projeto em questo. No exemplo acima, este objeto criado ser
compartilhado por toda sesso que ser mantida com o usurio. Caso encontre-
se uma nova tag de criao de um objeto da classe dbsystems.Contador, o
objeto j instanciado ser usado no havendo a necessidade de criao de
outro.
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 39
webmaster@dbsystems.com.br
Passos para criao do objeto:
Tentativa de localizar o objeto baseado nas informaes (id, scope). Esta
inspeo feita sincronizada apropriadamente por escopo para evitar
comportamentos no-determinsticos.
Definir a varivel de script identificado por id.
Se o objeto for encontrado, a varivel inicializada com a referncia localizada
e ento realizado um casting para o tipo especfico. Se o cast falhar ento
uma exceo do tipo java.lang.ClassCastException ir ocorrer e o
processamento da tag acaba.
Se o objeto no for encontrado no escopo e a classe no poder ser localizada
ento uma exceo do tipo java.lang.InstantiationException ocorrer e o
processamento da tag acabar.
Se o objeto no foi encontrado no escopo dado e a classe for encontrada com
um construtor padro (sem argumentos) o objeto instanciado e relacionado
com a varivel de scriplet identificada por id.
Se um contrutor sem argumentos no for encontrado ento uma exceo do
tipo java.lang.InstantiationException ocorrer e o processamento da tag
acabar.
O processamento do corpo da tag ento executado. Um corpo de uma tag
<jsp:useBean> executado para realizar algumas inicializaes desejadas,
como no exemplo abaixo:
<jsp:useBean id="clientes" class="Clientes" scope="page">
<jsp:setProperty name="clientes" property="nome" value="Rafael dos Santos">
<jsp:setProperty name="clientes" property="telefone" value="648-2343"/>
</jsp:useBean>
O exemplo acima inicializa o objeto instanciado clientes com as propriedades
nome e telefone.
Entendendo os Escopos:
Os escopos definem o ciclo de vida de um objeto, eles podem ser definidos
como:
page: Objetos definidos com o escopo page so vistos apenas pela pgina
onde ele foi criado. As referncias para objetos no contexto page so
armazenados no objeto pageContext.
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 40
webmaster@dbsystems.com.br
request: Objetos definidos no escopo request so vistos nas pginas usadas
para responder a requisio do usurio. Se uma pgina redirecionada para
outra, os objetos de escopo request so preservados uma vez que fazem
parte da mesma requisio. As referncias a objetos do contexto request so
armazenados no objeto implcito request.
session: Objetos definidos no escopo sesso so acessveis por pginas que
fazem parte da mesma sesso. As referncias as esses objetos so
armazenadas no objeto session.
application: Objetos definidos no escopo application so acessveis por toda
aplicao JSP em questo e so armazenadas no objeto implcito application.
A tag <jsp:useBean> tem a seguinte sintxe bsica:
<jsp:useBean id="nome" scope="page|request|session|application"
class="nome_completo_da_classe"/>
15. Exemplo Mini Aplicao usando JavaBeans
Listagem - LoginBean.java
package curso;
import java.sql.*;
import java.io.Serializable;
public class LoginBean implements Serializable{
private ResultSet rs;
private String senha;
private String usuario;
/**
* Definio dos Metodos Get e Set da senha
*/
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
/**
* Definio dos Metodos Get e Set do Usurio
*/
public String getUsuario() {
return usuario;
}
public void setUsuario(String usuario) {
this.usuario = usuario;
}
/**
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 41
webmaster@dbsystems.com.br
* Verifica o Usuario e senha
*/
public boolean selectUsuario(String usuario, String senha){
String strSql ="select * from usuarios where usuario = '" + usuario +
"' and senha = '" + senha + "'";
try {
Connection con = getConnect();
PreparedStatement pstmt = con.prepareStatement(strSql);
rs = pstmt.executeQuery();
while(rs.next()){
return true;
}
} catch(SQLException sqlex){
System.err.println("Sem conexo...");
sqlex.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}
return false;
}
/**
* Obtem uma Conexo com o Banco de Dados
*/
private Connection getConnect() {
Connection conectar = null;
String driver = "org.gjt.mm.mysql.Driver";
String url = "jdbc:mysql://53.248.185.200:3306/curso";
String user = "root";
String password = "";
try {
Class.forName(driver);
conectar = DriverManager.getConnection(url,user,password);
} catch(ClassNotFoundException cnfex){
System.err.println("Erro ao conectar na base...");
cnfex.printStackTrace();
System.exit(1);
} catch(Exception ex){
ex.printStackTrace();
} finally {
return conectar;
}
}
}
Listagem login.jsp
<jsp:useBean id="log" class="curso.LoginBean" scope="request"/>
<jsp:setProperty name="log" property="*" />
<%!
private boolean blnUsuario = false;
%>
<%
if(request.getParameter("acao") != null ) {
if(request.getParameter("acao").equals("login")){
blnUsuario = log.selectUsuario(
(String)request.getParameter("usuario"),
(String)request.getParameter("senha")
);
if(blnUsuario){
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 42
webmaster@dbsystems.com.br
session.setAttribute("nomeUsuario",request.getParameter("
usuario"));
%>
<jsp:forward page="aplicacao.jsp" />
<%
} else {
%>
<jsp:forward page="error.jsp" />
<%
}
}
}
%>
<HTML>
<HEAD>
<TITLE>login.jsp</TITLE>
</HEAD>
<BODY>
<FORM METHOD="POST" ACTION="/" NAME="LOGIN">
<CENTER>
<TABLE>
<TBODY>
<TR>
<TD colspan="2" align="center">
<FONT color="#000099" size="5" face="Verdana">
Acesso a Aplicao
</FONT>
</TD>
</TR>
<TR>
<TD></TD>
<TD></TD>
</TR>
<TR>
<TD align="right">Usurio:</TD>
<TD><INPUT size="20" type="text" maxlength="20" name= "usuario"></TD>
</TR>
<TR>
<TD align="right">Senha:</TD>
<TD><INPUT size="20" type="password" maxlength="8" name="senha"></TD>
</TR>
<TR>
<TD></TD>
<TD></TD>
</TR>
<TR>
<TD colspan="2" align="center">
<INPUT type="submit" name="login" value="Login"
onClick="LOGIN.action='login.jsp?acao=login';LOGIN.submit()";>
<INPUT type="reset" name="limpar" value="Limpar">
</TD>
</TR>
</TBODY>
</TABLE>
</CENTER>
</FORM>
</BODY>
</HTML>
Listagem aplicacao.jsp
<%!
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 43
webmaster@dbsystems.com.br
private String strUsuario = "";
%>
<%
if(session.getAttribute("nomeUsuario") == null){
%>
<jsp:forward page="login.jsp" />
<%
} else {
strUsuario = session.getAttribute("nomeUsuario").toString();
}
%>
<HTML>
<HEAD>
<TITLE>aplicacao.jsp</TITLE>
</HEAD>
<BODY>
<FORM METHOD="POST" ACTION="/" NAME="LOGIN">
<CENTER>
<TABLE>
<TBODY>
<TR>
<TD align="center">
<FONT color="#000099" size="5" face="Verdana">
Acesso a aplicao liberado para o usurio:
</FONT>
</TD>
</TR>
<TR>
<TD></TD>
</TR>
<TR>
<TD align="center">
<FONT color="#ff8000" size="5" face="Verdana">
<I><%= strUsuario %></I>
</FONT>
</TD>
</TR>
<TR>
<TD></TD>
</TR>
<TR>
<TD align="center">
<INPUT type="submit" name="voltar" value="Voltar"
onClick="LOGIN.action='login.jsp';LOGIN.submit()";>
</TD>
</TR>
</TBODY>
</TABLE>
</CENTER>
</FORM>
</BODY>
</HTML>
Listagem error.jsp
<%@page isErrorPage="true"%>
<html>
<head>
<title>Error Page</title>
</head>
<body>
Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP 44
webmaster@dbsystems.com.br
<font face="Comic Sans MS" size=4>
<blockquote>
<center>
<h1><font color=red>404 Error Page</font></h1>
</center>
<p>Favor verificar, os dados no confere!
</blockquote>
</font>
</body>
</html>