46
Rua Valorbe, 123 – Lauzane Paulista – Cep 02442-140 – São Paulo – SP [email protected] Módulo JSP

Apostila Curso Jsp Javabeans

Embed Size (px)

Citation preview

  • Rua Valorbe, 123 Lw

    Mauzane Paulista Cep 02442-140 So Paulo [email protected]

    dulo JSP

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo [email protected]

    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 [email protected]

    1. O que JSP

    JSP (Java Server Pages) uma tecnologia para desenvolvimento de aplicaesWEB semelhante ao Microsoft Active Server Pages (ASP), porm tem avantagem da portabilidade de plataforma podendo ser executado em outrosSistemas Operacionais alm dos da Microsoft. Ela permite que ao desenvolvedorde sites produzir aplicaes que permitam o acesso a banco de dados, o acessoa arquivos-texto, a captao de informaes a partir de formulrios, a captaode informaes sobre o visitante e sobre o servidor, o uso de variveis e loopsentre outras coisas.Quem conhece servlets ver que o JSP no oferece nada que voc no possaconseguir com os servlets puros. O JSP, entretanto, oferece a vantagem de serfacilmente codificado, facilitando assim a elaborao e manuteno de umaaplicao. Alm disso, essa tecnologia permite separar a programao lgica(parte dinmica) da programao visual (parte esttica), facilitando odesenvolvimento de aplicaes mais robustas, onde programador e designerpodem trabalhar no mesmo projeto, mas de forma independente. Outracaracterstica do JSP produzir contedos dinmicos que possam serreutilizados.Quando uma pgina JSP requisitada pelo cliente atravs de um Browser, estapgina executada pelo servidor, e a partir da ser gerada uma pgina HTMLque ser enviada de volta ao browser do cliente. A figura abaixo ilustra essefuncionamento:

    Quando o cliente faz a solicitao de um arquivo JSP, enviado um objectrequest para a JSP engine. A JSP engine envia a solicitao de qualquercomponente (podendo ser um JavaBeans component, servlet ou enterpriseBean) especificado no arquivo. O componente controla a requisio

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP [email protected]

    possibilitando a recuperao de arquivos em banco de dados ou outro dadoarmazenado, 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 ocliente, onde o usurio pode visualizar os resultados atravs do WEB browser. Oprotocolo de comunicao usado entre o cliente e o servidor pode ser HTTP ououtro protocolo.Por definio, JSP usa Java como sua linguagem de scripts. Por esse motivo, OJSP apresenta mais flexvel e mais robusto do que outras plataformasbaseadas simplesmente em JavaScripts e VBScripts.Requisitos para entender JSP? Para tirar um bom proveito do JSP precisoentender a linguagem Java. Isso porque, a parte lgica do JSP envolve JavaBeans, Objetos JDBC, Enterprise Java Beans (EJB) entre outros componentesque interagem com a plataforma Java. Portanto, alertamos aqueles quepretendem desenvolver uma aplicao mais sofisticada que entedam um poucode programao em Java.O ideal que se conhea um pouco de HTML, pouco mesmo. comum emgrandes aplicaes que o Programador JSP e o Designer sejam pessoasdiferentes. Portanto, nesse curso, usamos pouqussimas tags HTML, nossapreocupao est voltada para a parte lgica das aplicaes e no para a partevisual.Nos prximos mdulos voc aprender como instalar um servidor JSP. Nummdulo posterior, voc iniciar a programao em JSP e aprender a simbologiadessa linguagem.

    2. Instalando um servidor JSP

    Para conseguir ver os resultados das pginas que iremos construir nos prximosmdulos desse curso, preciso instalar na sua mquina um servidor JSP. Por setratar de uma extenso ao modelo de programao Java, o JSP pode serexecutado em qualquer plataforma. Existem diversos servidores JSP espalhadosna WEB, alguns deles, dispe de verses para plataforma Windows e Linux. Doisdos 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 plataformaWindows NT ou 98/95, bastante fcil de ser instalado e configurado. Se vocnunca instalou um servidor na sua mquina, no se preocupe!!! Mostraremospasso a passo como fazer. Contudo, se voc j um cobra nessa rea, umrpida lida na seo abaixo j ser suficiente para preparar sua mquina pararodar 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 odownload atravs do site da Empresa Sun. (http://java.sun.com).

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP [email protected]

    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 umasenha para o administrador do servidor. Aps a instalao concluda, sergerado alguns atalhos dentre eles Start Tomcat e Stop Tomcat, copie estesdois atalhos para o seu desktop, para iniciar o servidor use o atalho StartTomcat, para parar use o atalho Stop Tomcat. Passo 4: Configuraes default Tomcat.De acordo com a configurao original do Tomcat, os arquivos devero estarnos seguintes diretrios:- arquivos *.jsp (pginas com scripts JSP): " C:\Arquivos de programas\ApacheGroup\Tomcat 4.1\webapps \sistema"- arquivos *class e *.java (classes utilizadas em beans): " C:\Arquivos deprogramas\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 Jakartaaparecer 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 [email protected]

    3. Simbologia - Parte 1

    A maior parte do cdigo de uma pgina JSP consiste em template text. Otemplate text similar ao HTML, obedecendo s mesmas regras de sintaxe e simplesmente passado ao cliente por um servlet criado especialmente paramanusear a pgina. Para construir uma aplicao usando JSP voc geralmenteescreve o texto HTML e inclue cdigos JSP entre tags JSP. As tags normalmentecomeam com "". Vamos mostrar o clssico exemplodo "Ol Mundo".

    Salve esse artigo com o nome "exemplo01.jsp". Para executar esse cdigobasta digitar em seu browser a URL:

    ..exemplo01.jsp?text=Ola+Mundo.

    Perceba que foi possvel passar o valor do objeto "text" como parmetro naprpria URL e o servidor de JSP montou o cdigo.Se voc verificar o cdigo da pgina que apareceu no seu browser, ver oseguinte:

    Ola Mundo

    O que aconteceu foi que o servidor JSP executou os comandos entre as tagsespeciais "", 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 nosconcentrar aqui no estudo das declaraes, expresses, scriptlets ecomentrios. Os trs primeiras tm sintaxes e usos similares, mas tmdiferenas importantes. Vamos explicar, com alguns exemplos, as semelhanase diferenas entre elas.Declaraes (entre ):As declaraes so usadas para definir variveis e mtodos especficos parauma pgina JSP. Os mtodos e variveis declaradas podem ento ser

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP [email protected]

    referenciados por outros elementos de criao de scriptlets na mesma pgina. Acada declarao deve ser finalizada ou separada por "ponto-e-vrgula" e podeassumir a seguinte sintaxe:

    Veja alguns exemplos:

    Voc deve declarar uma varivel ou um mtodo antes de us-lo. O escopo deuma declarao geralmente o arquivo JSP, mas se for includo outros arquivoscom a diretiva include, o escopo se expande para o cover do arquivo includo.Expresses (entre )Podem conter alguma expresso vlida da linguagem de script usada nessapgina (o padro que a Linguagem seja Java), mas sem ponto-e-vrgula.A sintaxe para este elemento de criao de scripts a seguinte:

    Veja alguns exemplos:

    A expresso Java avaliada (da esquesda para a direita), convertida em Stringe depois inserida na pgina. Essa avaliao feita em tempo de execuo(quando a pgina solicitada) permitindo fcil e rpido acesso a informao quefoi 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 qualquerexpresso definida na Especificao da Linguagem Java. Ao contrrio dosscriptlets (que veremos a seguir), uma expresso no aceita ponto e vrgula edefine somente uma expresso da Linguagem.Veja um exemplo:Seu hostname: Para simplificar as expresses, existem um nmero de variveis predefinidasque voc pode usar e que veremos a seguir.Scriptlets (entre )Permitem voc escrever trechos de cdigo da Linguagem usada na pgina. Vejao exemplo abaixo:

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP [email protected]

    ...

    Opo Escolhida: ...

    Lembre-se que em um script voc deve finalizar as expresses atravs do usode ponto-e-vrgula. Quando voc escreve um script, voc pode usar algum dosobjetos implcitos do JSP ou das classes importadas atravs da diretiva page,variveis ou mtodos (declarados entre as tags ou objetosnomeados atravs da tag . Para testar a pgina acima bastasalv-la com o nome de "classificados.jsp" e digitar a url".../classificados.jsp?option=2". ComentriosExistem dois tipos principais de comentrios que podem ser usados em umapgina JSP:Comentrio de Contedo: esses comentrios so transmitidos de volta para onavegador como parte da resposta de JSP e so visveis na visualizao docdigo da pgina. O comentrio de contedo tem a seguinte sintaxe:

    Aqueles familiarizados com HTML percebem que a mesma sintaxe decomentrio para essa linguagem de marcao. Tais comentrios no produzemqualquer output visvel, mas podem ser visualizados pelo usurio final atravsdo item "view source" do navegador.

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP [email protected]

    Comentrios JSP: no so enviados para o cliente e so visveis apenas nosarquivos fonte JSP originais. O corpo do comentrio ignorado pelo containerJSP. Os comentrios JSP podem assumir duas sintaxes:

    e

    Esse segundo comentrio introduzido dentro da pgina atravs de umscriptlets, usando a sintaxe de comentrio nativa da linguagem de criao descripts, no caso JAVA.

    4. Simbologia - parte 2

    As diretivas so usadas para fornecer informaes especiais ao container JSPsobre a pgina JSP quando esta compilada para servlet. As diretivas JSPafetam a estrutura global da classe servlet.Existem dois tipos principais de diretivas:- page: permite situaes como importao de classes, customizao de superclasses servlet entre outras;- include: permite que seja inserido o contedo de um arquivo no servlet nomomento em que o arquivo JSP traduzido para servlet.01. Diretiva pageA diretiva page tem a seguinte sintaxe:

    Abaixo relacionamos os atributos mais utilizados nas diretivas page: Atributo importimport="package.class" ouimport="package.class1,...,package.classN".permite que seja especificado qual o pacote a ser importado. Por exemplo:

    O atributo import attribute o nico que pode aparecer vrias vezes.

    Atributo isThreadSafeisThreadSafe="true|false".O valor de true (default) indica o processamento normal do servlet quandomltiplas requisies podem ser acessadas simultaneamente na mesmainstncia de servlet. O valor false indica que o servlet deve implementarSingleThreadModel, como requisio para cada requisio sinalizada ou comrequisies simultneas sendo uma em cada instncia.

    Atributo session

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP [email protected]

    session="true|false".O valor de true (default) indica que a varivel predefinida session (do tipoHttpSession) 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 sessesno devem ser usadas. Aqui est a implementao do contexto.

    Atributo bufferbuffer="sizekb|none"Especifica o tamanho do buffer para o JspWriter out. O buffer padro definidopelo servidor.

    Atributo autoFlushautoflush="true|false"O valor de true (default) indica se o buffer deve ser esvaziado quando estivecheio. O valor false, indica que uma exceo deve ser mostrada quando ocorreroverflows.

    Atributo extendsextends="package.class"Define se a super classe do servlet deve ser gerada.

    Atributo infoinfo="message"Define uma string que pode ser recuperada pelo mtodo getServletInfo. Comesse atributo o autor pode adicionar uma cadeia de documentao pgina quesumariza sua funcionalidade. O valor padro para o atributo info a cadeiavazia.

    Atributo errorPageerrorPage="url"Especifica que a pgina JSP deve processar algum Throwables, mas nocarreg-lo na pgina corrente.

    Atributo isErrorPageisErrorPage="true|false"Define se uma pgina pode atuar como uma pgina de erro para uma outrapgina JSP. O default false.

    Atributo languagelanguage="java"Especifica a linguagem que est sendo usada. Por enquanto o JSP suportasomente Java.

    02. Diretiva include

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP [email protected]

    A diretiva include permite que sejam includos arquivos na hora em que apgina JSP traduzida no servlet. Uma directive include algo como:

    Essa diretiva pode ser implementada de acordo com o seguinte exemplo:muitos sites tm uma barra de navegao em cada pgina. Devido a problemascom frames HTML isto normalmente implementado com um tabela repetindo ocdigo HTML em cada pgina do site. Esta directive supre essa necessidade deminimizar os esforos de manuteno conforme o cdigo abaixo:

    Arquivo exemplo_02.jsp

    HOME -SEO 01 -SEO 02 -SEO 02

    Arquivo navbar.html

    HOME -SEO 01 -SEO 02 -SEO 02

    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 [email protected]

    Declaraes Declara variveis e mtodos vlidos noscript daquela pgina.

    Expresses Contm uma expresso vlida no scriptdaquela pgina.

    Scriptlet Contm um fragmento de cdigo vlidono script daquela pgina.

    Comentrio HTML Cria um comentrio que enviado parao cliente viabilizar no cdigo da pgina.

    Comentrio JSP visto apenas no fonte do JSP mas no enviado para o cliente.

    ou

    Diretiva "Include" Inclue um arquivo esttico, analisandoos elementos JSP daquela pgina.

    Diretiva "Page" Define atributos que sero aplicados auma pgina JSP.

    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 TaglibDefine uma biblioteca tag e um prefixopara uma tag padro usada na pginaJSP.

    Acessa um padro de funcionalidade deuma tag.

    other tags and data

    Redireciona uma requisio para umarquivo HTML, JSP ou servlet paraprocessar.

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP [email protected]

    Exemplo 01:

    Bom Dia!!! - Fonte:

    Loop While

    O loop while usado para repetir uma instruo ou bloco de instrues at queuma condio particular seja verdadeira.Veja o cdigo abaixo:

    Exemplo 2:

    Bom Dia!!! - Fonte:

    Observe que se a condio inicialmente falsa na primeira vez que testada ocorpo 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 executaruma dada instruo ou bloco at que uma condio seja falsa. A diferenaprincipal entre os dois que os loops while testam a condio antes de iniciar oloop, tornando possvel que o corpo do loop nunca seja executado caso a

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP [email protected]

    condio seja inicialmente falsa. Os loops do...while executam pelo menos umavez antes de testar a condio.Veja o exemplo abaixo:

    Exemplo 3:

    Bom Dia!!! - Fonte:

    Interrupo de Loops

    Em todos os loops (for, while e do), o loop termina quando a condio que vocest testando atingida. Porm, em alguma situao, voc desejar sair doloop antes do seu trmino normal. Para isso, voc pode usar as palavras chavesbreak e continue. A palavra chave break pra imediatamente a execuo doloop corrente. Se voc tiver loops aninhados dentro de loop mais externo; casocontrrio, o programa simplesmente continua a execuo da prxima instruoaps o loop.

    Bom Dia!!! - Fonte:

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP [email protected]

    No exemplo acima, o cdigo dentro do loop executado at que a varivel iassuma 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 cdigohtml (ao invs de 7). Aps gerar a pgina, o servidor JSP enviar para onavegador o seguinte cdigo:

    Bom Dia!!! - Fonte: 1

    Bom Dia!!! - Fonte: 2

    Bom Dia!!! - Fonte: 3

    Bom Dia!!! - Fonte: 4

    6. Comandos Condicionais

    Embora j possamos escrever algumas aplicaes em JSP com o que japrendemos at agora, elas sero ainda fracas. Um dos grandes potenciais dequalquer linguagem de programao, a utilizao de controles de fluxo(condicionais e loops) para executar diferentes partes de um programa baseadoem 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 unindoHTML e comandos Java. Mostraremos nessa lio como utilizar as conhecidasrotinas condicionais do Java em pginas JSP. Trs comandos sero tratadas aseguir: if.. else, operador condicional, switch.

    Comando IFCondicionais if contm a palavra-chave if, seguida de um teste booleano, e deuma instruo (na maioria das vezes um bloco de instrues) para serexecutada se o teste for verdadeiro.

    Exemplo 01:

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP [email protected]

    = 5) && (hourNow < 13)) { %>Bom Dia!!!

    = 13) && (hourNow < 19)) { %>< font face="verdana">Bom Tarde!!!

    = 19) && (hourNow < 24)) { %>Bom Noite!!!

    Boa Madrugada!!!

    Operador Condicional

    Uma alternativa para o uso das palavras-chaves if e else em uma instruocondicional usar o operador condicional, algumas chamado de operadorternrio.O operador ternrio uma expresso, significando que ele devolve um valor(diferentemente do if mais geral, o qual pode resultar em qualquer instruo oubloco sendo executado). O operador ternrio muito til para condicionaismuito curtos ou simples, e tem a seguinte formato:test ? trueResult : falseResul

    O teste uma expresso que devolve true e false (semelhante ao teste dainstruo if). Se o teste for verdadeiro retorna o valor de trueResult, casocontrrio, devolve o valor de falseResult.

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP [email protected]

    Vamos como podemos usar o operador condicional para obter o mesmo efeitodo cdigo anterior:

    Exemplo 2:

    Ol, Tudo bem?

    Apesar deste cdigo parecer, a uma primeira vista, um pouco menos fcil deentender 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, ainstruo (ou instrues) depois do teste executada. Se nenhum valor forencontrado, a instruo default executada. Vamos analisar o exemplo abaixo:

    Exemplo 3:

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP [email protected]

    Ns estamos em

    Esse cdigo atribui a varivel monthNow o valor do ms atual. Note que nainstruo ns incrementamos o ms em uma unidade porque o mtodo"getMonth()" retorna 0 para o ms de janeiro, 1 para fevereiro e assim pordiante.Observe que a limitao significativa no Java que os testes e valores podemser somente de tipos primitivos. Voc no pode usar tipos primitivos maiores(long, float) ou objetos dentro de um switch, nem pode testar para nenhumaoutra relao seno a igualdade. Isso limita a utilidade do switch para todos oscasos exceto os mais simples, ifs aninhados podem funcionar para qualquerespcie de teste em qualquer tipo.

    7. Tratando Formulrios

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP [email protected]

    Os formulrios so ferramentas teis e muito usada em diversas aplicaes:cadastro registros em um banco de dados, validao de um login/senha, enviode email, envio de dados de um pesquisa, etc. Hoje difcil desenvolver umaaplicao para Web que no exija o uso de formulrios. Pois bem, na lio dehoje vamos aprender manipular formulrios em aplicaes JSP.Apresentamos abaixo um cdigo para mostrar o formato de um formulrio HTMLe de seus objetos.

    Texto daVarivavel 2

    Texto da Varivavel3

    Valor 1Valor 2Valor 3

    Texto da Variavel 5

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP [email protected]

    importante fazermos algumas observaes a cerca do cdigo acima:- no cabealho do formulrio, indicamos atravs deaction="pathdoarquivo/paginajsp.jsp" o arquivo JSP que receber os seusdados.- cada objeto do formulrio recebe um nome. Deve-se tomar bastante cuidadoao nomear tais objetos, isto porque, como sabemos, as variveis Java sosensveis maiscula/minscula. Portanto, os objetos:

    So objetos diferentes porque receberam nomes diferentes (variavel1 eVariavel1).

    Mostraremos mais um exemplo (bastante simples) de como enviar dados apartir de um formulrio a uma pgina JSP.

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP [email protected]

    A pgina jsp acima, chamada "teste.jsp", contm um formulrio que envia paraela mesma. O valor digitado em uma caixa de texto ser mostrado como ttuloda pgina. Observe como fizemos isso:- a pgina para qual ns enviaremos os dados do formulrio designada nocabealho do formulrio:

    - o nome do objeto caixa de texto caixa de texto ("teste") usado na expressorequest.getParameter("teste"). Note que se usssemosrequest.getParameter("Teste") (com T maisculo), a pgina no iria retornar ovalor digitado na caixa de texto.O prximo exemplo formado por dois arquivos. O primeiro pode contmapenas cdigos HTML e o segundo contm cdigos HTML e JSP.Arquivo "envia_ms.htm":

    Qual o ms do seu aniversrio?

    JaneiroFevereiroMaroAbrilMaioJunhoJulhoSetembroAgostoOutubroNovembroDezembro

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP [email protected]

    Arquivo "recebe_ms.jsp":

    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.";}

    %>

    voltar

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP [email protected]

    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 msque a pessoa nasceu. Aps escolher o ms e clicar no boto "ok", o formulriochama a pgina "recebe_ms.jsp" e envia seus dados para ela. Esta segundapgina um pouco menos simples que a primeira. Vamos analisar o que elafaz:- nas primeira linhas utilizamos as tags "page import" para indicar quais classesiremos utilizar em nossa pgina:

    - cinco objetos so criados e inicializados.- Usamos o mtodo "request.getParameter(nomedoparametro)" com afinalidade de pegar o valor passado para a pgina atravs de algum formulrioou passando diretamente em sua URL. O segundo objeto foi inicializadoutilizando 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 varivelmesString em Inteiro.

    int mes = Integer.parseInt(mesString);

    - O penltimo objeto criado do tipo Date (da a importncia de termosimportado 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 valorretornado a partir desse mtodo porque ele retorna 0 para janeiro, 1 parafevereiro e assim por diante.

    int monthNow = dateNow.getMonth() + 1;

    - Cinco teste so efetuados dentro de um script (). Eles so usadospara 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 [email protected]

    - Uma expresso () usada para exibir o valor da varivel "msg":

    8. Objetos Implcitos - Introduo

    Como j vimos anteriormente, podemos criar, dentro de scriptlets na pginaJSP, instncias de uma classe Java e manipul-las a fim de produzir contedodinmico. Por exemplo, podemos criar um objeto de uma classe que acessauma base de dados e ento usar mtodos desse objeto para exibir na pginauma consulta ou transao com a base de dados. Ou seja, atravs damanipulao 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 doprogramador, o container JSP se encarrega de instanciar automaticamente,durante a execuo de uma pgina JSP, alguns objetos. Tais objetos podem serusados dentro da pgina JSP e so conhecidos como "Objetos Implcitos".Assim como todo objeto em Java, cada objeto implcito uma instncia de umaclasse ou interface e segue uma API correspondente. Abaixo segue um resumodos objetos implcitos disponveis em JSP, suas respectivas classes/interfaces euma pequena descrio do objeto.

    Objetos implcitos de JSP e suas APIS para aplicaes de HTTP.

    Objeto Classe ou Interface DescrioPage javax.servlet.jsp.HttpJspPage Instncia de servlet da pginaConfig javax.servlet.ServletConfig Dados de configurao de servletRequest javax.servlet.http.HttpServletRequest Dados de solicitao, incluindo parmetrosResponse javax.servlet.http.HttpServletResponse Dados de respostaOut javax.servlet.jsp.JspWriter Fluxo de sada para contedo da pginaSession javax.servlet.http.HttpSession Dados de sesso especficos de usurioApplication javax.servlet.ServletContext Dados compartilhados por todas as pginas de

    aplicaoPageContext javax.servlet.jsp.PageContext Dados de contexto para execuo da pginaException javax.lang.Throwable Erros no capturados ou exceo

    Os nove objetos implcitos fornecidos por JSP podem ser classificados daseguinte forma:

    Objetos relacionados ao servlet da pgina (page, config):Os dois objetos implcitos de JSP nesta categoria se baseiam na implementaoda 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 [email protected]

    Objetos contextuais (application, session, request, pageContext):Os objetos implcitos dessa categoria fornece pgina JSP acesso ao contextodentro 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. Nasquatro primeiras sero abordadas as categorias de objetos implcitos listadasacima. As duas ltimas trazem exemplos prticos do uso dos objetos implcitos:Parte 1 - Objetos Relacionados a ServletsParte 2 - Objetos Relacionados a Input/Output da pginaParte 3 - Objetos ContextuaisParte 4 - Objetos de Tratamento de ErroParte 5 - Criando funes que manipulam objetos implcitosParte 6 - Exemplos do uso de Objetos Implcitos

    9. Objetos Relacionados ao Servlet

    Os objetos implcitos nesta categoria se baseiam na implementao da pginaJSP como um servlet. Os dois objetos classificados nessa categoria so:

    pageconfig

    Objeto page

    O objeto page representa a prpria pgina JSP ou, mais especificamente, umainstncia da classe de servlet na qual a pgina foi traduzida. O objeto pageimplementa as interfaces javax.servlet.jsp.HttpJspPage ejavax.servlet.jsp.JspPage. Abaixo esto os links para a API que define essasinterfaces:HttpJspPageJspPage

    Exemplo utilizando o objeto implcito page:

    .....

    Objeto config

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP [email protected]

    O objeto config armazena dados de configurao de servlet - na forma deparmetros de inicializao - para o servlet na qual uma pgina JSP compilada. Pelo fato das pginas JSP raramente serem escritas para interagircom parmetros de inicializao, este objeto implcito raramente usado naprtica. O objeto config uma intncia da interface javax.servlet.ServletConfig.Os mtodos fornecidos por esta interface para recuperar parmetros deinicializao de servlet esto listados abaixo:

    Mtodos DescrioEnumeration getInitParameterNames() Recupera os nomes de todos os parmetros de

    inicializao.

    String getInitParameter(String name) Recupera o valor do parmetro de inicilizao a partirde um nome.

    Abaixo esto os links para a API que define a interfacejavax.servlet.ServletConfig:ServletConfig

    10. Objetos Relacionados a OutPut/InPut da pgina

    Os objetos classificados nessa categoria se concentram no input (entrada dedados) e output (sada de informao) de uma pgina JSP. Os trs objetosclassificados nessa categoria so:

    request response out

    Objeto requestO objeto request representa a solicitao que requisitou a pgina. O objetorequest 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 maisutilizados na construo de pginas JSP. Podemos dividir os mtodos desseobjeto em quatro funcionalidades:

    Armazenar e Recuperar valores de atributos:Mtodo DescrioVoid setAttribute(String key, Object value) Associa um valor de atributo com um nome.

    Enumeration getAttributeNames() Recupera os nomes de todos os atributos associados com oobjeto.

    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 [email protected]

    Mtodos DescrioEnumeration getParameterNames() Retorna os nomes de todos os parmetros de

    solicitao.

    String getParameter(String name) Retorna os primeiro valor (principal) de um nicoparmetro de solicitao.

    String[] getParameterValues(String name) Recupera todos os valores para um nico parmetrode solictao.

    Recuperar cabealhos de solicitao e cabealhos de HTTP:Mtodos DescrioEnumeration 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 desolicitao.

    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 asolicitao.

    Diversos mtodos da interface que javax.servlet.hhtp.HttpServletRequest:Mtodos DescrioString 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, sehouver algum.

    HttpSession getSession() Recupera os dados da sesso para a solicitao (i.e, o objetoimplcito session).

    HttpSession getSession(boolean flag) Recupera os dados da sesso para a solicitao (i.e, o objetoimplcito session), opcionalmente criando-o se ele ainda no existir.

    RequestDispatchergetRequestDispatcher(String path)

    Cria um dispatcher de solicitao para o URL local indicado.

    String getRemoteHost() Retorna o nome totalmente qualificado do host que enviu asolicitao.

    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:ServletRequestHttpServletRequest

    Exemplo utilizando o objeto implcito request:.....Seu IP :Seu Host :.....

    Objeto responseO objeto response representa a resposta que ser enviada de volta para ousurio como resultado do processamento da pgina JSP. Este objeto

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP [email protected]

    implementa a interface javax.servlet.http.HttpServletResponse que umasubinterface de javax.servlet.ServletResponse.

    Podemos dividir os mtodos desse objeto em quatro funcionalidades:

    Especificar o tipo de contedo e codificao da resposta:Mtodos DescrioVoid 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 ocontedo da resposta.

    Definir cabealhos da resposta:Mtodos DescrioVoid 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 cabealhoespecificado por "name"

    Void setIntHeader(String name, int value) Atribui o valor de nmero inteiro especificado por "value" aocabealho especificado por "name"

    Void setDateHeader(String name, long date) Atribui o valor de data especificado por "value" ao cabealhoespecificado por "name"

    Void addHeader(String name, String value) Adiciona o valor definido por "value" ao cabealho especificadopor "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, longdate)

    Adiciona o valor de data especificado por "value" ao cabealhoespecificado por "name"

    Definir cdigos de resposta:Mtodos DescrioVoid setStatus(int code) Define o cdigo de status para a resposta (para cisrcuntncias sem

    erro)Void sendError(int status, Stringmsg)

    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 deveriasolicitar um URL alternativo (absoluto)

    Reescrita da URL:Mtodos DescrioString 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 incluirinformaes de sesso.

    Abaixo esto os links para a API que define essas interfaces:ServletResponseHttpServletResponse

    O exemplo abaixo ilustra uma das utilidades desse objeto. Vrios cabealhosso definidos para evitar que a pgina seja armazenada em cache por umnavegador.

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP [email protected]

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP [email protected]

    "para a Sua para"+"jogar"+""+"");}%>

    Aconselhvel:

    Guga viaja nesta sextapara a Sua parajogar

    O links abaixo refere-se a API que define a interfaces que o objeto outimplementa:JspWriter

    11. Objetos Contextuais

    Os objetos implcitos dessa categoria fornece pgina JSP acesso ao contextodentro do qual ela est respondendo. Os quatro objetos implcitos contextuaisso:

    request; session; application; pageContext.

    Todos eles tm a capacidade de armazenar e recuperar valores de atributosarbitrrios. Os atributos de pgina, armazenados no objeto pageContext,duram apenas enquanto o processamento de uma nica pgina ocorre. Osatributos de solicitao, armazenados no objeto request, tambm tem poucadurao, mas podem ser transferidos entre pginas quando for transferido ocontrole. Os atributos de sesso, armazenados no objeto session, duramenquanto o usurio continuar a interagir com o servidor da web. Os atributos deaplicao, armazenados no objeto application, so mantidos enquanto ocontainer JSP mantiver uma ou mais pginas de uma aplicao carregada namemria - enquanto o container JSP estiver rodando. A tabela a seguir traz os

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP [email protected]

    mtodos comuns aos quatro objetos e que so usados para armazenar erecuperar valores de atributos:

    Tabela 1: Os mtodos comuns a esses quatro objetos e que so usados paraarmazenar e recuperar valores de atributos:Mtodos Descriovoid setAttribute(String key, Object value) Associa um valor de atributo com um nome.

    Enumeration getAttributeNames() Recupera os nomes de todos os atributos associados com oobjeto.

    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 sessionEste objeto representa a sesso atual de um usurio individual. Todas assolicitaes feitas por um usurio so consideradas parte de uma sesso. Desdeque novas solicitaes por aqueles usurios continuem a ser recebidas peloservidor, a sesso persiste. Se, no entanto, um certo perodo de tempo passarsem que qualquer nova solicitao do usurio seja recebida, a sesso expira.

    O objeto session armazena informaes a respeito da sesso. Um dosprincipais usos para o objeto session armazenar e recuperar valores deatributos, a fim de transmitir as informaes especficas de usurios entre aspginas. Abaixo segue um exemplo que armazena dados na sesso, na formade um objeto que instncia de uma classe hipottica "Usuario":

    Uma vez que um objeto tenha sido armazenado atravs do mtodosetAttibute(), ele pode ser recuperado - na mesma pgina ou em outraacessada pelo usurio. O cdigo abaixo ilustra a recuperao do objetoarmazenado no cdigo anterior:

    Perceba que o mtodo getAttribute() retorna um objeto da classe Object,portanto, necessrio fazermos um cast para converter o objeto retornado emuma instncia da classe desejada.

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP [email protected]

    O objeto session implementa a interface javax.servlet.http.HttpSession. Atabela abaixo traz os principais mtodos utilizados por esse objeto, almdaqueles descritos anteriormente na tabela 1:Mtodos DescrioObject 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 associadacom a sesso foi recebida.

    int getMaxInactiveInterval() Retorna o tempo mximo (em segundos) entresolicitaes pelo qual a sesso ser mantida.

    void setMaxInactiveInterval(int time) Define o tempo mximo (em segundos) entresolicitaes pelo qual a sesso ser mantida.

    boolean isNew() Retorna se o navegador do usurio ainda no tiverconfirmado o ID de sesso.

    boolean invalidate() Descarta a sesso, liberando quaisquer objetosarmazenados como atributos.

    O link abaixo exibe a API completa da interface que implementa o objetosession:HttpSession

    Objeto applicationEste objeto representa a aplicao qual a pgina JSP pertence. Ele umainstncia da interface javax.servlet.ServletContext. Os containers JSPtipicamente tratam do primeiro nome de diretrio em um URL como umaaplicao. 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 applicationpodem ser divididos em quatro funcionalidades:

    Recuperar informaes de verso do container servlet:Mtodo DescrioString 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 [email protected]

    Interagir com arquivos e caminhos no servidor:Mtodo DescrioString 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 objetoque acessa os contedos dos URLs, localmente ou na rede.

    InputStream getResourceAsStream(String path) Traduz uma cadeia especificando um URL em um fluxo deentrada para ler seu contedo.

    String getRealPath(String path) Traduz um URL local em um nome de caminho no sistemade arquivo local.

    ServletContext getContext(String path) Retorna o contexto de aplicao para o URL localespecificado.

    RequestDispatcher getRequestDispatcher(Stringpath)

    Cria um dispacher de solicitao para o URL local indicado.

    Suporte para log de mensagens:Mtodo DescrioVoid 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 pilhapara a exceo especificada.

    Acessar parmetros de inicializao:Mtodo DescrioEnumerations getInitParameterNames() Recupera os nomes de todos os parmetros de

    inicializao.

    String getInitParameter(String name) Recupera o valor do parmetro de inicilizao como onome dado.

    O link abaixo exibe a API completa da interface que implementa o objetoapplication: ServletContext

    Objeto pageContextO objeto pageContext fornece vrias facilidades como gerenciamento desesses, atributos, pginas de erro, incluses e encaminhamento de requisiesde fluxo de resposta.O objeto pageContext uma instncia da classejavax.servlet.jsp.PageContext. Alm dos mtodos descritos na tabela 1, osprincipais mtodos desse objeto podem ser divididos em trs categorias:

    Acessar outros objetos implcitos de JSP:Mtodo DescrioObject getPage() Retorna a instncia de servlet para a pgina atual (objeto implcito

    page).

    ServletRequest getRequest() Retorna a solicitao que iniciou o processamento da pgina (objetoimplcito 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, sehouver 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 implcitoapplication).

    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 [email protected]

    Envio de solicitaes de uma pgina JSP para outra:Mtodo Descriovoid 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 Descriovoid 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 associadocom "key" no escopo "scope".

    Object getAttribute(String name, int scope) Recupera o valor de tributo associado com "name" noescopo "scope"

    removeAttribute(String name, int scope) Remove o valor de atributo associado com "name" noescope "scope"

    Object findAttribute(String name) Procura em todos os escopos pelo atributo associadocom "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, atravsde todos os escopos definidos, por um atributo associado com uma Stringpassada como parmetro. Nos dois casos, o objeto pageContext ir realizaruma busca atravs dos escopos na seguinte ordem: pageContext, request,session e application.A tabela anterior traz mtodos que recebe parmetros para especificar oescopo. A classe javax.servlet.jsp.PageContext fornece variveis estticas pararepresentar estes quatro escopos diferentes. A tabela a seguir resume estasvariveis:

    Varivel DescrioPAGE_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 variveisestticas descritas na tabela anterior:

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP [email protected]

    //Recupera o object "usuario" do escopo session

    UseruApp=(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 objetopageContext:PageContext

    12. Tratamento de Erros

    Esta ltima categoria dos objetos implcitos tem apenas um membro, o objetoexception. Este objeto implcito fornecido com o propsito de tratamento deerros dentro de uma pgina JSP.

    Objeto ExceptionO objeto exception no est automaticamente disponvel em todas as pginasJSP. Este objeto est disponvel apenas nas pginas que tenham sidodesignadas como pginas de erro, usando o atributo isErrorPage configuradocom true na diretiva page. O objeto exception uma instncia da classejava.lang.Throwable correspondente ao erro no capturado que fez com que ocontrole fosse transferido para a pgina de erro. Os principais mtodos daclasse java.lang.Throwable que so utilizados dentro das pginas JSP solistados na tabela abaixo:Mtodo DescrioString 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 funcionamentoquando a exceo foi lanada para o fluxo de sadaespecificado pelo parmetro out.

    String toString()Retorna uma cadeia combinando o nome da classe daexceo com sua mensagem de erro, se houveralguma.

    O trecho abaixo ilustra o uso do objeto exception em uma pgina de erro JSP:

    Erro EncontradoO seguinte erro foi eoncontrado:

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP [email protected]

    13. JavaBeans

    JavaBeans so componentes de software que so projetados para seremunidades reutilizveis, que uma vez criados podem ser reusados semmodificao 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 interfacesna forma de pacotes Java que deve ser usado em uma forma particular paraisolar e encapsular um conjunto de funcionalidades.

    Os componentes JavaBeans so tambm conhecidos como Beans. Passaremos ausar esta nomenclatura no restante deste curso.

    Neste curso no falaremos sobre todos os conceitos de JavaBeans, daremosateno queles conceitos que mais so utilizados nas pginas JSP.

    Regras para Escrever Beans

    Para que esses componentes possam ser reconhecidos de forma geral, suaimplementao deve seguir um conjunto de regras que sero usadas pelasferramentas para introspeco da classe, ou seja, o processo de descobrir quaisas funcionalidades do Bean e disponibiliz-la para o usurio. Cabe ao usuriofazer a interface entre o componente e o restante da aplicao, criando assimum novo tipo de programador, o programador de componenetes.

    import java.io.Serializable;

    01 public class MyBean implements Serializable {0203 private int property1;04 private boolean property2;0506 public MyBean() {0708 }0910 public void setProperty1(int property1) {11 this.property1 = property1;12 }1314 public void setProperty2(boolean property2) {15 this.property2 = property2;16 }

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP [email protected]

    1718 public int getProperty1() {19 return property1;20 }2122 public boolean isProperty2() {23 return property2;24 }25 }

    Esta classe um exemplo do que devemos seguir para tornar uma classe umbean, ou seja, o conjunto de regras que devemos obdecer para tornar ocompoenente 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 umbean deve ser sem parametros.

    Outra regra que devemos seguir diz respeito ao nome dos mtodos que daroacesso as propriedades do bean. Os mtodos podem ser divididos em duascategorias:

    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 omtodo de acesso getProperty1 . Note que a primeira letra da propriedade deveser minuscula enquanto a primeira letra depois do get deve ser em maiscula. Apalavra TipoDaPropriedade deve ser substituida por o tipo da propriedade. Paravariveis booleanas vale o mesmo conceito, mas, ao invs do get usamos apalavra is. No exemplo temos o acesso a propriedade property2 que booleanacomo:public boolean isProperty2()

    Observao: Voc pode no definir um mtodo de leitura para a varivel. Seisto for feito voc no permitir o acesso a ela.

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP [email protected]

    Mtodos de escrita:Os mtodos de escrita permitem ao usurio do componente modificar ocontedo da propriedade. Ele segue a seguinte terminologia:public void setNomeDaPropriedade(TipoDaPropriedade varName)

    Nos mtodos de escrita no h caso especial para variveis booleanas quetambm 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 dapropriedade.

    Outra regra que um Bean deve seguir a implementao da interfaceSerializable. A implementao desta interface fornece ao bean a propriedadechamada de persistncia.

    O conceito de persistncia permitir que o usurio faa uso do componente emum determinado momento e possa salvar o seu estado para o uso posteriorpartindo do mesmo ponto. A tecnologia que possibilita essa propriedade aSerializao de Objetos. Esta tecnologia permite salvarmos o objeto em umfluxo para posterior recuperao. Quando houver a recuperao, o objeto devese comportar como se fosse exatamente o mesmo de quando foi salvo, seolharmos o objeto como uma mquina de estado, ento podemos dizer que oobjeto recuperado no mesmo estado de quando foi salvo.

    A tecnologia de serializao de objetos muito importante em Java pois permitea linguagem atividades complexas como computao distribuda e alm demuitas outras funcionalidades interessantes.

    Para sermos capazes de serializar objetos basta fazer a classe implementar ainterface 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 porpropriedades indexadas.

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP [email protected]

    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). Asferramentas de desenvolvimento em Java so capazes de ler beans e prover afuncionalidade do componente para o usurio. Mas como as ferramentas socapazes de descobrir a funcionalidade de um Bean j que ele no uma classeconhecida, ou seja, pode ser qualquer componente?

    Para a realizao desta tarefa, que chamamos introspeco, usada uma APIdisponvel no Ambiente Runtime da plataforma Java, a Java Reflection API .Usando a funcionalidade desta API a ferramenta procura os mtodos pblicos dobean e faz a ligao dos mtodos com as propriedades. Aps a ferramenta terobtido todas as informaes que ela necessita sobre a classe ento aspropriedades e os mtodos so disponibilizados para uso.

    A introspeco realizada pela classe java.beans.Introspector que usa aReflection API para descobrir as funcionalidades do bean por casamento depadro. No entanto, alternativamente voc pode definir as informaes sobre oBean 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 mtodosque no aqueles que lem ou gravam as propriedades. Esses mtodos nodiferem 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 oEnterprise JavaBeans (EJB). Quais as diferenas?

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP [email protected]

    Os JavaBeans assim como o EJB so modelos de componente, porm apesardos dois compartilharem o termo JavaBeans os modelos no so relacionados.Uma parte da literatura tem referenciado EJB como uma extenso dosJavaBeans, mas isto uma interpretao errada. As duas APIs servem parapropsitos bem diferentes.

    O JavaBean tem a inteno de ser usado em propsitos do mesmo processo(intraprocesso) enquanto EJB projetado para ser usado como componentesinterprocessos. Em outras palavras, os JavaBeans no tm a inteno de serusado como componente distribudo assim como o EJB.

    O EJB uma tecnologia que est em grande asceno e ser abordado emfuturos materias da DBSystems.

    14. Ao jsp:useBean

    Aes possibilitam a realizao de tarefas complexas como instanciao deobjetos, comunicao com recursos do lado do servidor como pginas JSP eservlets sem a necessidade de cdigo Java. Embora o mesmo possa ser feitocom o uso de cdigo Java dentro de scriptlets, o uso das tags de aespromovem reusabilidade de seus componentes e aumenta a capacidade demanuteno 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 obean e obter uma referncia dele. A tag jsp:useBean tenta obter uma refernciade um bean que j esteja criado, dependendo do escopo em que ele foidefinido. Caso no haja o componente definido haver a criao de um novoobjeto.

    Por exemplo a tag:

    Neste exemplo, a tag useBean instanciar um objeto que ser identificado porcontador, a partir da classe dbsystems.Contador. A definio do escopo dependemuito do projeto em questo. No exemplo acima, este objeto criado sercompartilhado por toda sesso que ser mantida com o usurio. Caso encontre-se uma nova tag de criao de um objeto da classe dbsystems.Contador, oobjeto j instanciado ser usado no havendo a necessidade de criao deoutro.

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP [email protected]

    Passos para criao do objeto:

    Tentativa de localizar o objeto baseado nas informaes (id, scope). Estainspeo feita sincronizada apropriadamente por escopo para evitarcomportamentos no-determinsticos.

    Definir a varivel de script identificado por id.

    Se o objeto for encontrado, a varivel inicializada com a referncia localizadae ento realizado um casting para o tipo especfico. Se o cast falhar entouma exceo do tipo java.lang.ClassCastException ir ocorrer e oprocessamento da tag acaba.

    Se o objeto no for encontrado no escopo e a classe no poder ser localizadaento uma exceo do tipo java.lang.InstantiationException ocorrer e oprocessamento da tag acabar.

    Se o objeto no foi encontrado no escopo dado e a classe for encontrada comum construtor padro (sem argumentos) o objeto instanciado e relacionadocom a varivel de scriplet identificada por id.Se um contrutor sem argumentos no for encontrado ento uma exceo dotipo java.lang.InstantiationException ocorrer e o processamento da tagacabar.

    O processamento do corpo da tag ento executado. Um corpo de uma tag executado para realizar algumas inicializaes desejadas,como no exemplo abaixo:

    O exemplo acima inicializa o objeto instanciado clientes com as propriedadesnome e telefone.

    Entendendo os Escopos:

    Os escopos definem o ciclo de vida de um objeto, eles podem ser definidoscomo:

    page: Objetos definidos com o escopo page so vistos apenas pela pginaonde ele foi criado. As referncias para objetos no contexto page soarmazenados no objeto pageContext.

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP [email protected]

    request: Objetos definidos no escopo request so vistos nas pginas usadaspara responder a requisio do usurio. Se uma pgina redirecionada paraoutra, os objetos de escopo request so preservados uma vez que fazemparte da mesma requisio. As referncias a objetos do contexto request soarmazenados no objeto implcito request.

    session: Objetos definidos no escopo sesso so acessveis por pginas quefazem parte da mesma sesso. As referncias as esses objetos soarmazenadas no objeto session.

    application: Objetos definidos no escopo application so acessveis por todaaplicao JSP em questo e so armazenadas no objeto implcito application.

    A tag tem a seguinte sintxe bsica:

    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 [email protected]

    * 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

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP [email protected]

    session.setAttribute("nomeUsuario",request.getParameter("usuario"));%>

    login.jsp

    Acesso a Aplicao

    Usurio:

    Senha:

    Listagem aplicacao.jsp

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP [email protected]

    private String strUsuario = "";%>

    aplicacao.jsp

    Acesso a aplicao liberado para o usurio:

    Listagem error.jsp

    Error Page

  • Rua Valorbe, 123 Lauzane Paulista Cep 02442-140 So Paulo SP [email protected]

    404 Error Page

    Favor verificar, os dados no confere!