Java - JSP

Embed Size (px)

Citation preview

  • Apostila de JSP

    Traduo Resumida do LivroWeb Development with JavaServer Pages

    de Duane K. Fields e Mark A. Kolb

    Prof. Carlos Ribeiro

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 2

    ndice

    1. INTRODUO ..................................................................................................................................5

    1.1 Desempenho .............................................................................................................................51.2 Separando a Apresentao da Implementao..........................................................................71.3 Diviso do Trabalho .................................................................................................................8

    2. FUNDAMENTOS...............................................................................................................................9

    2.1 Primeiro Exemplo de Pgina JSP ............................................................................................92.2 Segunda Verso do Exemplo Al Mundo ................................................................................92.3 Verso do Exemplo Al Mundo com Bean ............................................................................102.4 Convenes sobre Tags ..........................................................................................................122.5 Como JSP Funciona................................................................................................................13

    3. PROGRAMANDO SCRIPTS JSP..................................................................................................17

    3.1 Linguagens de Script ..............................................................................................................173.2 Tags JSP .................................................................................................................................173.3 Diretivas JSP ..........................................................................................................................17

    3.3.1 Diretiva de Pgina ..............................................................................................................183.3.2 Diretiva Include ..................................................................................................................233.3.3 Diretiva Tag Library ...........................................................................................................23

    3.4 Elementos de Script ................................................................................................................243.4.1 Declaraes.........................................................................................................................243.4.2 Expresses ..........................................................................................................................273.4.3 Scriptlets .............................................................................................................................28

    3.5 Fluxo de Controle ...................................................................................................................293.5.1 Condies ...........................................................................................................................293.5.2 Iterao ...............................................................................................................................303.5.3 Tratamento de excees......................................................................................................31

    3.6 Comentrios............................................................................................................................323.6.1 Comentrios de Contedo...................................................................................................323.6.2 Comentrios JSP.................................................................................................................323.6.3 Comentrios da Linguagem de Script.................................................................................33

    4. OBJETOS IMPLCITOS E AES ........................................................................................34

    4.1 Objetos Implcitos...................................................................................................................344.1.1 Objetos Relacionados a Servlets.........................................................................................354.1.2 Entrada e Sada ...................................................................................................................374.1.3 Objetos Contextuais............................................................................................................424.1.4 Tratamento de Erros ...........................................................................................................49

    4.2 Aes ......................................................................................................................................494.2.1 Forward...............................................................................................................................504.2.2 Plug-in ................................................................................................................................534.2.3 Bean Tags ...........................................................................................................................53

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 3

    5. UTILIZANDO COMPONENTES JSP.......................................................................................54

    5.1 O Modelo de Componentes JSP .............................................................................................545.1.1 Arquiteturas de Componentes.............................................................................................545.1.2 Benefcios da Abordagem Baseada em Componentes........................................................545.1.3 O Projeto de Componentes para Aplicaes Web ..............................................................54

    5.2 Fundamentos de JavaBeans ....................................................................................................555.3 JSP Bean Tags ........................................................................................................................58

    5.3.1 Programao com Componentes Baseados em Tags..........................................................585.3.2 Acessando Componentes JSP .............................................................................................595.3.3 Inicializando Beans.............................................................................................................655.3.4 Controlando o Escopo de um Bean.....................................................................................69

    6. DESENVOLVENDO COMPONENTES JSP ............................................................................75

    6.1 O Que Faz de um Bean um Bean............................................................................................756.1.1 Convenes.........................................................................................................................756.1.2 O Construtor Bean ..............................................................................................................766.1.3 Definindo as Propriedades de um Bean ..............................................................................776.1.4 Propriedades Indexadas ......................................................................................................796.1.5 Propriedades Boleanas........................................................................................................826.1.6 Converso de Tipo JSP.......................................................................................................836.1.7 Configurando Beans ...........................................................................................................83

    6.2 Alguns Exemplos....................................................................................................................856.2.1 Exemplo: HoraCorrenteBean..............................................................................................856.2.2 Um Bean que Calcula Juros Compostos.............................................................................86

    6.3 Interfaces Definidas para Beans .............................................................................................906.3.1 A Interface Serializable ......................................................................................................906.3.2 A Interface HttpSessionBindingListener ............................................................................90

    6.4 Misturando Scriptlets e Bean Tags .........................................................................................916.4.1 Acessando Beans Atravs de Scriptlets ..............................................................................916.4.2 Acessando Objetos Criados Atravs de Scriptlets ..............................................................91

    7. TRABALHANDO COM BANCOS DE DADOS.......................................................................95

    7.1 JSP e JDBC.............................................................................................................................957.1.1 JNDI e Data Sources...........................................................................................................95

    7.2 Aplicaes de Banco de Dados com JSP................................................................................967.2.1 Criando Componentes JSP a partir de Dados de uma Tabela.............................................967.2.2 Tipos de Dados JSP e JDBC...............................................................................................987.2.3 Mantendo Conexes Persistentes......................................................................................1007.2.4 Manipulando Grandes Conjuntos de Resultados ..............................................................102

    7.3 Exemplo: Ferramenta para Controle de Reservas para Conferncias ........................................1067.3.1 Resumo do Projeto............................................................................................................1067.3.2 O Banco de Dados ............................................................................................................1077.3.3 Resumo do Projeto............................................................................................................107

    8. PROJETANDO APLICAES JSP........................................................................................114

    8.1 Aplicaes para a Web .........................................................................................................1148.1.1 O Fluxo de Aplicaes para a Web ..................................................................................1158.1.2 Abordagens de Projeto......................................................................................................116

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 4

    8.2 Projeto Page-Centric.............................................................................................................1168.2.1 Pginas Baseadas em Funes..........................................................................................1168.2.2 Construindo Pginas Compostas ......................................................................................1188.2.3 Limitaes da Abordagem Page-Centric ..........................................................................120

    8.3 Abordagem Servlet-Centric ..................................................................................................1208.3.1 O Exemplo Al Mundo com Servlets...............................................................................1218.3.2 JSP e a API Servlet ...........................................................................................................1228.3.3 Servlets para Controle de Aplicaes ...............................................................................1258.3.4 Servlets para o Tratamento da Lgica da Aplicao.........................................................1268.3.5 Servlets como Ponto nico de Entrada ............................................................................1298.3.6 Tratando Erros no Servlet .................................................................................................1338.3.7 Exemplo: Uma Aplicao Servlet-Centric........................................................................1338.3.8 Retornando uma Lista de Empregados .............................................................................1398.3.9 Retornando um nico Empregado ...................................................................................140

    8.4 Enterprise JavaBeans............................................................................................................1418.4.1 O que so Enterprise JavaBeans .......................................................................................1428.4.2 JavaBeans x EJBs .............................................................................................................1428.4.3 Projeto de Aplicaes com EJBs ......................................................................................142

    9. EXECUTANDO TAREFAS COMUNS COM JSP .................................................................144

    9.1 Tratando Cookies..................................................................................................................1449.1.1 Gerenciando Cookies........................................................................................................1449.1.2 A Classe Cookie ...............................................................................................................1449.1.3 Exemplo 1: Criando um Cookie .......................................................................................1469.1.4 Exemplo 2: Recuperando um Cookie ...............................................................................147

    9.2 Criando Pginas de Erro .......................................................................................................1489.2.1 Uma Pgina com Erro.......................................................................................................1499.9.2 Mtodos para a Coleta de Dados sobre o Erro..................................................................1499.2.3 Enviando Correio Eletrnico ............................................................................................1539.2.4 A pgina de Erro...............................................................................................................155

    9.3 Misturando JSP e JavaScript ................................................................................................1589.4 Construindo Interfaces Interativas ........................................................................................161

    9.4.1 Mtodos Utilitrios ...........................................................................................................1629.4.2 O Formulrio Exemplo .....................................................................................................1649.4.3 Criando o Formulrio .......................................................................................................1649.4.4 Campos de Texto e Escondidos ........................................................................................1659.4.5 reas de Texto..................................................................................................................1659.4.6 Botes de Rdio................................................................................................................1669.4.7 Caixas de Seleo .............................................................................................................1669.4.8 Caixas de Confirmao.....................................................................................................1669.4.9 Cdigo Fonte do Formulrio ............................................................................................167

    9.5 Validando Dados de Formulrio...........................................................................................1709.5.1 Validao de Dados nos Lados Cliente e Servidor ...........................................................1709.5.2 Exemplo de Validao no Lado Servidor .........................................................................170

    9.6 Tarefas Variadas ...................................................................................................................1749.6.1 Determinando a ltima Data de Modificao de uma Pgina..........................................1749.6.2 Executando Comandos de Sistema ...................................................................................1759.6.3 Gerando XML...................................................................................................................176

    10. BIBLIOGRAFIA ....................................................................................................................177

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 5

    1. INTRODUO

    Em 1996 a Sun Microsystems introduziu os servlets como pequenas aplicaesbaseadas em Java para adicionar funcionalidade dinmica aos servidores web. JavaServlets possuem um modelo de programao similar a scripts CGI, uma vez que elesrecebem do servidor web uma requisio HTTP como entrada e geralmente constrem ocontedo apropriado para a resposta que o servidor web dever encaminhar ao usurio.

    1.1 Desempenho

    No entanto, diferentemente dos CGIs que necessitam de um novo processo na memriapara tratar cada nova requisio, todos os servlets associados a um servidor web soexecutados dentro de um nico processo. Este processo executa a Mquina VirtualJava (JVM) que dependente de plataforma para executar (em qualquer plataforma)programas Java compilados. Em vez de criar um processo para cada requisio, a JVMcria uma thread Java para manipular cada requisio enviada a um servlet. ThreadsJava causam um overhead muito menor do que a completa instanciao de processospara a execuo de programas CGI, isto , o overhead causado para a instanciao edestruio de uma thread significativamente menor do que para a instanciao edestruio de um processo. Por esta razo threads costumam ser chamadas deprocessos peso leve. Por utilizarem menos recursos, so muito mais eficientes do queprocessos. Por exemplo, processos geralmente copiam a memria do processo pai,enquanto as threads compartilham a memria com o processo pai.

    Por outro lado, como as requisies a servlets e a pginas JSP so atendidas por ummesmo processo (JVM) que persiste alm do ciclo de vida de uma nica requisio,servlets tambm podem evitar operaes que consomem muito tempo, tal como aconexo com bancos de dados. Isto , uma nica conexo pode ser compartilhada porvrias requisies. Por exemplo, o acesso a banco de dados muito mais rpidoquando se utiliza um pool de conexes reutilizveis que sempre permanecem abertas.

    Ao mesmo tempo, como servlets so escritos em Java, eles se beneficiam do ncleo daplataforma Java: um modelo de programao orientado a objetos, gerenciamento dememria automtico, portabilidade total e acesso a uma rica coleo de APIs Javaagora disponveis para acesso a bancos de dados, recursos de rede, etc.

    Uma desvantagem potencial desta abordagem, no entanto, reside no cdigo fonte doprograma. Como resultado, qualquer modificao em um documento requer ainterveno de um programador. O designer de uma pgina HTML no pode modificar olayout de uma pgina a menos que saiba como mexer no cdigo fonte do servlet. Defato, qualquer mudana em um elemento esttico de um documento requer acorrespondente mudana do cdigo fonte.

    Como discutido no pargrafo anterior, a incorporao de contedo dinmico a umdocumento envolve alguma forma de programao para descrever como este contedo

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 6

    gerado. Cdigo de programa, no entanto, tende a ser caro na criao e manuteno,logo, minimizar a necessidade de programao geralmente um objetivo desejvel.JSP combina este objetivo com o suporte completo todas as caractersticas dalinguagem Java.

    JSP um sistema hbrido entre os sistemas template existentes, pois suportam doisestilos diferentes para se adicionar contedo dinmico a pginas web. Como PHP e ASP,scripts podem ser embutidos em pginas JSP contendo cdigo de programao. Nocaso de JSP este cdigo geralmente Java, embora, de acordo com a especificao deJSP, uma linguagem de script alternativa possa ser utilizada. E como ColdFusion, JSPsuporta um conjunto de tags no estilo HTML que interagem com objetos Java noservidor, sem a necessidade de aparecer cdigo Java na pgina. Em particular, estestags so projetados para se criar, consultar e modificar server-side JavaBeans.

    De fato, a especificao de JSP 1.1 prov um mecanismo que permite que osdesenvolvedores criem bibliotecas de tags customizados que possam ser carregados emuma pgina JSP. Estes tags customizados podero ento ser utilizados na pgina assimcomo os tags JSP padro.

    Como uma demonstrao do poder desta abordagem, a empresa Live Software,construtora do JRun (um software que habilita a execuo se servlets e de pginas JSPem qualquer servidor web), desenvolveu um conjunto de tags JSP customizados quereproduziam os tags utilizados pelo produto ColdFusion da Allaire. Este produto (umclone do ColdFusion, multi-plataforma e baseado em Java) foi liberado em maio de1999 como . A Allaire ficou to impressionada com o produto que emmaio de 1999 comprou a Live Software.

    Servlets e JavaServer Pages apareceram pela primeira vez como parte do Java WebServer da Sun, um servidor HTTP escrito em Java. Posteriormente a Sun liberou atecnologia servlet como uma extenso padro da linguagem Java. A primeiraespecificao de JSP surgiu em Junho de 1999.

    Logo aps a Sun ter publicado a especificao para servlets, outras companhiascomearam a adicionar suporte a servlets em seus produtos. Atualmente h uma sriede produtos de terceiros capazes de adicionar a funcionalidade de servlets e JSP aservidores web. Dois dos mais populares produtos nesta categoria so JRun da Allairee o ServletExec da New Atlanta. E em junho de 1999 a Sun Microsystems e a ApacheSoftware Foundation anunciaram o projeto Jakarta, com o objetivo de gerar umaimplementao Open Source de servlets e JSP que tambm ir servir de referncia paraestas tecnologias. E dentre os Enterprise Web Application Servers podemos encontraro Netscape Application Server, IBM WebSphere e BEA WebLogic, entre outros.

    Atualmente, o desenvolvimento de aplicaes JSP est comeando a deixar de ser umprocesso manual. Boas ferramentas de desenvolvimento esto sendo desenvolvidas.Vrios vendedores de ferramentas para a construo de sites para a web esto

    CARLOS ALBERTOJavaBeans so objetos escritos em Java, cujas implementaes seguem um conjunto de convenes projetadas para promover modularidade e reuzabilidade. O termo computacional genrico para um objeto que exibe este tipo de interoperabilidade plug-and-play um componente. JavaBeans , ento, um exemplo de modelo de programao de componentes, tal como ActiveX, que desempenha um papel similar em relao ao ASP. Um componente , ento, um objeto stand-alone que representa uma coleo de propriedades e comportamento.

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 7

    providenciando o suporte a JSP nas verses de seus produtos. Entre eles podemos citarDreamweaver Ultradev (sucessor do Drumbeat 2000 que deixa de existir) daMacromedia, Visual Age for Java da IBM, e o HomeSite da Allaire.

    1.2 Separando a Apresentao da Implementao

    JSP agora parte integrante do desenvolvimento de aplicaes para web utilizandoJava. Em funo da sua habilidade de separar a apresentao da lgica deimplementao atravs da combinao de texto markup padro com elementos descript e componentes orientados a objetos (JavaBeans), JSP prov uma excelentetecnologia de front-end para a web. Isto , possvel manter uma estrita separaoentre a apresentao dos dados a exibio da informao para o usurio final e asua implementao o cdigo necessrio para gerar a informao. O benefcio dedesacoplar estes dois aspectos que isto permite que modificaes sejam efetuadas emum dos lados sem afetar o outro. Por exemplo, a forma como os dados so exibidos(tipo de letra, cor, layout da pgina) podem ser revisados sem que seja necessriomodificar qualquer cdigo Java. Da mesma forma, enquanto a interface com umcomponente permanece inalterada, a implementao do componente pode ser alterada(por ex., para melhorar o desempenho ou a manutenibilidade) sem nenhum efeito sobreas pginas JSP que utilizam o componente. Se uma pgina JSP contm apenas tags enenhum cdigo Java, o primeiro requisito para garantir a separao entre apresentaoe implementao foi atingido, uma vez que no haver nenhum cdigo deimplementao misturado com cdigo de apresentao.

    O segundo requisito fcil de explicar: no deve haver nenhum cdigo HTML em seusJavaBeans, uma vez que nada impede que um JavaBean possua uma propriedade queinclua strings de HTML. Por exemplo, pode ser tentador criar um JavaBean que tenha ahabilidade de gerar uma grande tabela HTML a partir dos resultados de uma query a umbanco de dados. Se, por qualquer razo, for necessrio modificar a aparncia da tabelaHTML, o JavaBean necessitar ser editado, compilado e testado.

    Em algumas situaes, no entanto, a gerao de cdigo HTML programaticamente amelhor soluo. Por exemplo, escrever uma aplicao que mostre as 10 ltimastransaes bancrias de um cliente utilizando um Bean que retorne uma transao seriadesajeitado. Isto porque JSP no inclui nenhum built-in tag para interagir compropriedades de Beans. Para resolver este dilema, as solues seriam: incluir cdigoJava em sua pgina JSP, ou, escrever um Bean que gere sada HTML.

    Felizmente JSP prov uma terceira alternativa, especificamente criada para se gerarcdigo HTML programaticamente utilizando cdigo Java. O programador podeimplementar um novo tag JSP e empacot-lo em uma biblioteca especfica de umaaplicao. Pginas JSP podero, ento, import-lo.

    A utilizao de tags customizados no resolve o problema da separao entreapresentao e implementao, mas h duas vantagens na gerao de cdigo HTML

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 8

    atravs de tags customizados. Em primeiro lugar, tags customizados so uma forma dese evitar a insero de cdigo Java em uma pgina HTML e, segundo, no lado daprogramao, a gerao de cdigo HTML isolada dentro do cdigo da tag library. A taglibrary ter dependncias sobre o seu cdigo JavaBeans, mas no vice-versa. Logo,tags customizados provem uma interface bem definida entre apresentao eimplementao, sem contaminar arquivos JSP com cdigo de implementao, ou apropriedade de um Bean com cdigo de apresentao.

    E o fato de que JSP suporta a utilizao de componentes atravs de JavaBeans,promete habilitar um novo conjunto de ferramentas para a criao de pginas webgraficamente, utilizando a abordagem da programao visual. A habilidade de criarsofisticadas pginas JSP sem escrever um nico tag HTML pode ser uma realidade embreve.

    1.3 Diviso do Trabalho

    Um importante efeito colateral deste desacoplamento entre apresentao eimplementao atravs de pginas JSP que ele promove uma clara diviso dotrabalho no desenvolvimento e manuteno de aplicaes para a web. De fato, raro oindivduo que possui grande habilidade em programao e no projeto artstico.

    Como resultado a maioria das equipes de desenvolvimento de aplicaes para a webpossuem pessoas com habilidades distintas, representando mltiplas especialidades.Projetistas, artistas grficos e codificadores HTML so responsveis pela apresentao.Programadores Java e projetistas de sistemas so responsveis pela implementao.Equipes grandes de corporaes podem incluir ainda editores, consultores demarketing, administradores de banco de dados, administradores de rede eadministradores de sistemas.

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 9

    2. FUNDAMENTOS

    JavaServer Pages (JSP) uma tecnologia baseada na linguagem Java que simplifica oprocesso de desenvolvimento de sites de contedo dinmico. Com JSP, web designerse desenvolvedores podem rapidamente incorporar elementos dinmicos em suaspginas utilizando cdigo Java embutido e uns poucos markup tags bastante simples.

    Pense em JSP como um tipo de linguagem de script executada no servidor web,embora, internamente seu funcionamento seja bastante diferente.

    Como os elementos HTML estticos provem uma estrutura (framework) na qual ocontedo dinmico gerado pelo cdigo script ser inserido, ferramentas como JSP,PHP, ASP, ColdFusion e etc, so conhecidas como sistemas template.

    2.1 Primeiro Exemplo de Pgina JSP

    Nesta sesso vamos criar uma pgina JSP que envia para o browser cliente a frase AlMundo!.

    Al Mundo!

    Para chamar esta pgina JSP: http://sbd:8100/jsp/aluno01/exercicio01/alomundo.jsp

    Embora o exemplo acima contenha apenas cdigo HTML, no h nada errado nisto. Estearquivo, com a extenso .jsp seria interpretado como uma requisio JSP. O servidorweb encaminharia a requisio ao container JSP local (a JSP engine) paraprocessamento. Naturalmente, o container JSP no encontraria nenhum elemento JSPe, consequentemente, apenas devolveria estes comandos HTML ao servidor web que osencaminharia ao browser do usurio.

    2.2 Segunda Verso do Exemplo Al Mundo

    Abaixo vem uma nova verso do exemplo anterior, desta vez no entanto, gerandocontedo dinamicamente atravs do uso um par de tags JSP.

    Al, !

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 10

    Neste exemplo JSP tenta inicializar a varivel visitante a partir da requisio HTTP. Umvalor default designado varivel visitante caso um valor no seja fornecido pelarequisio. Uma expresso JSP ento utilizada para inserir o valor desta varivel nasada HTML da pgina.

    Parmetros de requisies so passados a pginas JSP utilizando o mecanismo normalde passagem de parmetros HTTP. Para requisies do tipo GET valores de parmetrosso codificados e adicionados ao URL.

    Para chamar esta pgina JSP: http://sbd:8100/jsp/aluno01/exercicio02/alomundo.jsp

    ou http://sbd:8100/jsp/aluno01/exercicio02/alomundo.jsp?nome=Vinicius+Aguiar

    O que torna este documento especial a sua terminao .jsp. Por default o nossoservidor Web, configurado para reconhecer arquivos com a extenso .jsp e traduzi-los para Java Servlets. Esta operao totalmente transparente para o cliente quesolicita a pgina. E o browser cliente v apenas a resposta do servidor web requisiodo usurio.

    Em outras palavras, quando o servidor web recebe a requisio correspondente a umapgina JSP, esta requisio encaminhada ao container JSP para processamento. ocontainer JSP quem l e interpreta o cdigo no arquivo .jsp e gera o contedodinmico, inserindo o resultado no contedo esttico existente na pgina e retornando apgina completa ao servidor HTTP. Esta a pgina que enviada de volta ao browser.

    2.3 Verso do Exemplo Al Mundo com Bean

    Alm se suportar scripts, JSP possui tags para a interao com Java Beans. A vantagemde se utilizar a abordagem baseada em Java Beans, como vimos no captulo anterior, que esta abordagem promove a reutilizabilidade de cdigo (vrias pginas JSP podemutilizar a classe AloBean sem a necessidade de escrever nenhuma linha de cdigo Javaadicional) e a separao entre apresentao e implementao (um arquivo contmapenas HTML e tags tipo HTML, e outro contm apenas Java). Tambm fica evidente queesta ltima abordagem requer um esforo maior para alcanar os mesmos resultados.

    Antes de examinarmos a pgina JSP que faz uso de um Bean preciso cri-lo. Abaixovem o cdigo para um Bean denominado AloBean, que possui uma propriedadedenominada nome.

    CARLOS ALBERTOExibir, Cdigo Fonte

    CARLOS ALBERTOo JRun

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 11

    package jsp.aluno01.exercicio03;public class AloBean implements java.io.Serializable{ String nome;

    public AloBean (){ this.nome = "Mundo!";}public String getNome (){ return nome;}public void setNome (String nome){ this.nome = nome;}

    }

    Java Beans, como se pode ver, so implementados como classes Java que aderem a umconjunto de convenes para sua instanciao e para o acesso e determinao de suaspropriedades. Para conhecer todos os detalhes sobre estas convenes veja o captuloDesenvolvendo Componentes.

    Por enquanto observe que a classe AloBean possui um construtor sem argumentos, masque designa um valor default para a propriedade nome. Esta propriedade acessadaatravs do mtodo getNome(), e pode ser modificada atravs do mtodo setNome().

    Agora vejamos a utilizao deste Bean na pgina JSP abaixo:

    Al, !

    O tag indica que o Bean de uma classe particular ser utilizado nestapgina. Aqui a classe AloBean especificada. Alm disso, um identificador, alo, especificado para a instncia deste Bean. Este identificador poder ser utilizado maistarde, para referenciar o Bean no arquivo JSP.

    J o tag , neste exemplo, utilizado para modificar a propriedadenome do Bean alo baseado no valor do parmetro nome da requisio. Este tag indicaque deve ser pesquisado na requisio HTTP um parmetro denominado nome, e seencontrado, seu valor deve ser copiado da requisio para a propriedade nome do Bean.

    E o tag , utilizado para acessar o valor de uma propriedade doBean e inseri-lo na pgina no local do tag original. Neste caso, o tag recupera apropriedade nome do Bean associado ao identificador alo.

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 12

    Neste caso foi preciso criar, no servidor web, a pgina JSPjsp/aluno01/exercicio03/alomundo.jsp sob o diretrio onde so armazenados osarquivos .html e o Bean jsp/aluno01/exercicio03/AloBean sob o diretrio onde soarmazenados os arquivos .class.

    Caso venhamos a executar esta pgina JSP assim:

    http://sbd:8100/jsp/aluno01/exercicio03/alomundo.jsp

    a sada ser Al Mundo! pois o valor default da propriedade nome o stringMundo!. Como nenhum parmetro foi fornecido, o tag nopde designar um novo valor para a propriedade nome. Por esta razo foi utilizado ovalor default, designado pelo construtor, que foi chamado como resultado do tag.

    Por outro lado, se executarmos esta pgina JSP assim,

    http://sbd:8100/jsp/aluno01/exercicio03/alomundo.jsp?nome=Vinicius+Aguiar

    o tag encontraria um parmetro denominado nome na requisioHTTP e atribuiria o valor deste parmetro propriedade nome do Bean.

    2.4 Convenes sobre Tags

    Tags JSP podem ser classificados em duas categorias bsicas: tags orientados a scriptsinspirados no ASP, e um conjunto completo de tags baseados em Extensible MarkupLanguage (XML).

    2.4.1 Tags Orientados a Scripts

    Estes tags so facilmente reconhecidos pelos seus delimitadores. Comeam com , e um caracter adicional pode aparecer aps

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 13

    2.4.2 Tags Baseados em XML

    Tags XML so case-sensitive enquanto tags HTML no so. XML requer que todos osvalores de atributos apaream entre aspas simples ou duplas. Valores de atributos HTMLs necessitam aparecer entre aspas quando contm espaos em branco. XML tambm fazuma distino entre os tags que contm um corpo e os que no contm: os tags que nocontm corpo (tags que contm corpo so aqueles que possuem abertura e fechamento,como ... ) so delimitados por < e />. Por exemplo:

    E os tags que possuem um corpo utilizam a mesma sintaxe do HTML. O tag de aberturautiliza < para indicar o incio do tag e > para indicar o seu fim. E o tag de fechamentoutiliza para indicar o seu fim. Abaixo vem um exemplode tag JSP com corpo:

    Neste caso o contedo do corpo outro tag JSP. O tag no corpo no possui ele prprioum corpo, logo, segue a outra conveno.

    2.5 Como JSP Funciona

    O primeiro componente de uma implementao de JavaServer Pages baseada emservlets um servlet especial geralmente referenciado como compilador de pgina. Ocontainer configurado para chamar este servlet para todas as requisies cujos URLspossuam a extenso .jsp (ou outra qualquer que tenha sido configurada). A tarefa desteservlet encontrar a pgina JSP solicitada, e compil-la em um servlet se necessrio.Este servlet ter a funo de gerar o contedo dinmico da pgina JSP.

    Logo, sempre que o servidor HTTP recebe uma requisio de uma pgina JSP, estarequisio encaminhada ao container JSP que chama o compilador de pgina paratratar a requisio. Na primeira vez que uma requisio recebida para uma pginaJSP especfica, esta pgina JSP compilada em um servlet.

    Para compilar a pgina, o compilador de pgina JSP examina a pgina procurando portags JSP. O contedo desta pgina traduzido no equivalente cdigo Java que, quandoexecutado, ir gerar a sada indicada pelo contedo do arquivo original. ComandosHTML estticos so traduzidos em Java strings e so escritos sem modificao e namesma seqncia no output stream. Tags JSP so traduzidos em cdigo Java para agerao de contedo dinmico: tags para acesso a Beans so traduzidos nascorrespondentes chamadas a objetos e propriedades, enquanto elementos de scripts sotransferidos sem modificao. Uma vez construdo todo o cdigo do servlet, este

    CARLOS ALBERTOPara permitir que tags de mltiplas aplicaes XML apaream no mesmo documento, XML introduziu a noo de namespaces para identificar que tags esto associados com cada aplicao. Isto efetuado adicionando antes de cada tag o namespace seguido de ponto-e-vrgula. JSP tags esto no namespace jsp, logo cada tag comea com jsp:. Namespaces XML tambm so utilizados quando utilizamos JSP tag libraries. Quando se incorpora uma tag library estendida em uma pgina JSP, necessrio especificar o namespace que deve ser utilizado com os tags daquela biblioteca.

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 14

    cdigo compilado e o arquivo .class resultante colocado no diretrio apropriadopara execuo subsequente.

    A figura abaixo mostra o processo de criao e execuo de servlets JSP.

    A maioria dos sistemas de gerao de contedo dinmico se baseiam em tags especiais,linguagens de scripts interpretadas, ou a combinao de ambos. Na maioria destessistemas os arquivos que contm estes tags e/ou scripts devem sofrer o parse toda vezque o documento requisitado. Este parse produz um overhead que evitado comJavaServer Pages, uma vez que os arquivos JSP sofrem o parse apenas na primeira vezque so requisitados. JSP mais lento do que outras abordagens na primeirarequisio, mas mais rpido nas requisies subsequentes.

    Existe tambm um mecanismo que faz com que uma pgina JSP possa ser pr-compilada pelo container JSP antes de qualquer usurio requisitar por esta pgina.

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 15

    Alm disso a JVM que executada dentro do container JSP procura manter residente namemria do servidor web o cdigo associado a uma classe servlet JSP se as requisiesencaminhadas a esta classe ocorrem regularmente.

    Sada Buferizada

    Um servidor HTTP pode receber vrios tipos de requisies (GET ou POST, por exemplo)que determinam como dados de parmetros so transmitidos para o servidor.Requisies tambm podem ser acompanhadas por informaes de header que sotipicamente utilizadas para identificar o tipo e capacidades do browser, controle decache e o suporte a cookies.

    Da mesma forma o protocolo HTTP permite que o servidor envie informaesadicionais de volta para o cliente na forma de headers de resposta. Estes headers soenviados de volta ao cliente juntamente com o contedo solicitado, que referenciadocomo o corpo da resposta. Headers de resposta so principalmente utilizados paraenviar ao browser informao de status sobre a requisio. E assim como headers derequisio, tambm podem ser utilizados para controlar o cache e para enviar cookies.

    Uma limitao do protocolo HTTP que o servidor no pode comear a enviar umdocumento para um browser, mudar de idia, e pedir ao browser para no mostr-lo. Oservidor web pode abortar a transmisso do documento, mas o que j foi enviado exibido. Por exemplo, se um erro ocorre no meio do processamento de uma pgina,todo o contedo gerado at o momento do erro exibido pelo browser, seguido damensagem de erro.

    Para resolver este problema os projetistas de JSP determinaram que toda sada geradapor uma pgina JSP no deve ser automaticamente enviado ao browser a medida que apgina gerada. Todo o contedo da pgina deve ser temporariamente armazenado emum buffer de sada. A sada armazenada no buffer s deve ser enviada ao browser(como o corpo de uma resposta HTTP) aps o processamento de toda a pgina.

    Como a sada armazenada em um buffer possvel gerar informao de header emqualquer ponto do processamento de uma pgina JSP. Por exemplo, uma pgina JSPpode incluir cdigo (ou um tag customizado) que condicionalmente envia um cookie, eeste cdigo (ou tag) pode aparecer em qualquer lugar da pgina. Assim sendo, o autorde uma pgina JSP possui a garantia de que o corpo da resposta no ser enviado atque toda a pgina seja processada, logo o header de resposta que envia o cookienecessariamente ser enviado antes do corpo da resposta.

    A buferizao da sada tambm permite que o processamento de uma resposta sejaabortado a qualquer momento, permitindo assim que uma nova resposta seja gerada.Esta deciso pode ser baseada na lgica de programao associada ao processamento

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 16

    da pgina JSP, ou pode resultar da deteco de um erro durante o processamento dapgina.

    importante levar em considerao, no entanto, que o buffer de sada finito. Seutamanho default de 8K, mas este valor pode ser alterado para cada pgina. Uma vezatingido o limite de 8K (ou o valor especificado) a sada gerada at o momento enviada ao browser cliente e o buffer e esvaziado para posterior utilizao. A partir domomento que seu contedo enviado ao browser novas informaes de header nopodem mais ser adicionadas.

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 17

    3. PROGRAMANDO SCRIPTS JSP

    A abordagem purista recomendada no captulo anterior para o desenvolvimento deaplicaes baseadas em JavaBeans nem sempre a soluo mais prtica. Por exemplo,no desenvolvimento do prottipo de uma aplicao o cronograma de desenvolvimentopode no fornecer tempo suficiente para a construo de todos os componentesnecessrios aplicao. Nestes casos a alternativa a utilizao de uma linguagem descript dentro de pginas JSP.

    3.1 Linguagens de Script

    A linguagem de script default para JSP Java. Se uma linguagem de script capaz deinteragir com objetos Java, ou pode ser estendida para interagir com objetos Java,ento esta linguagem uma boa candidata para integrao com um container JSP. Hno mercado, por exemplo, containers JSP que utilizam Java Script como linguagem descript.

    3.2 Tags JSP

    JSP prov quatro categorias principais de markup tags:

    Directives um conjunto de tags que especificam caractersticas especficas parauma pgina, isto , contm informaes de como um documento que contm estasdiretivas deve ser processado.

    Scripting Elements so utilizados para embutir instrues de programao,escritas na linguagem de script designada para a pgina.

    Comments so utilizados para adicionar strings de documentao a pginas JSP.

    Actions suportam vrios comportamentos diferentes. Assim como elementos descript, actions so processados para cada requisio recebida pela pgina. Actionspodem transferir o controle entre pginas, especificar Applets e interagir comcomponentes server-side JavaBeans.

    3.3 Diretivas JSP

    Uma diretiva pode, por exemplo, especificar qual a linguagem de script utilizada emuma determinada pgina, incluir o contedo de outra pgina, ou indicar que a pginautiliza uma determinada biblioteca de tags customizados (custom tag library).

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 18

    Diretivas no produzem diretamente nenhuma sada que seja visvel para os usuriosfinais quando a pgina requisitada. Elas determinam a forma como um container JSPir processar a pgina.

    3.3.1 Diretiva de Pgina

    A sintaxe bsica a seguinte:

    O espao em branco aps opcional mas recomendvel paramelhorar a leitura.

    Como todos os tags JSP, a diretiva de pgina suporta a sintaxe baseada em XML, comovem abaixo:

    Nos exemplos abaixo ser utilizada a primeira sintaxe por ser mais simples e maisutilizada na prtica.

    A figura abaixo relaciona os 11 atributos que podem ser utilizados nesta diretiva.

    possvel especificar vrias diretivas de pgina em uma nica pgina. Com a exceodo atributo import, no entanto, nenhum atributo de pgina individual pode aparecer emmais de uma diretiva de pgina.

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 19

    Por exemplo, as diretivas abaixo so vlidas:

    Esta uma diretiva de pgina invlida, pois session aparece duas vezes:

    E estas so diretivas invlidas, pois o atributo info est repetido:

    O Atributo Info

    Permite a incluso de comentrios que podero ser vistos por outras ferramentas,programaticamente.

    O Atributo Language

    Especifica a linguagem de script a ser utilizada na pgina. O default Java.

    O Atributo ContentType

    Este atributo utilizado para indicar o tipo MIME da resposta sendo gerada pelapgina JSP. Os tipos MIME mais comuns so text/html, text/xml, e text/plain.,indicando respostas em HTML, XML ou texto puro. O tipo MIME default text/html.

    O Atributo Extends

    Este atributo identifica a superclasse a ser utilizada pelo container JSP quando ele esttraduzindo a pgina JSP em um Servlet, e especificado assim:

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 20

    Se, como geralmente ocorre, a pgina JSP est sendo entregue atravs do protocoloHTTP, ento a superclasse especificada deve implementar a interfacejavax.servlet.jsp.JspPage.

    Na prtica este atributo raramente utilizado.

    O Atributo Import

    Ao contrrio do atributo extends, o uso deste atributo bastante comum.

    O Atributo Session

    O atributo session indica se a pgina JSP participa ou no do gerenciamento desesses. Isto , se haver ou no uma sesso associada a esta pgina. O valor defaultpara este atributo true. Caso no haja uma sesso associada a uma pgina h um leveganho de desempenho quando especificamos este fato.

    O Atributo Buffer

    Para desabilitar a buferizao que ocorre por default em relao ao contedoencaminhado aos browsers, faa:

    Alternativamente, este atributo pode ser utilizado para se modificar o tamanho defaultdo buffer em kilobytes, assim:

    Geralmente os containers JSP, com o objetivo de melhorar o desempenho, criam umpool de buffers de sada em vez de criar um buffer de sada para cada requisio depgina JSP.

    Em particular, a sada buferizada permite que se faa uso do atributo errorPage paratransferir o controle para uma pgina de erro amigvel quando ocorrem excees aolongo da execuo de uma pgina JSP. Tais pginas de erro customizadas sogeralmente preferidas em vez de uma mensagem de erro da JVM no meio de uma sadanormal. Alm disso, pginas de erro podem ser escritas para notificar o webmaster ou a

    CARLOS ALBERTOO correto none embora a tabela fale em false.

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 21

    equipe de desenvolvimento quando um erro de run-time ocorre. Veja o captuloExecutando Tarefas JSP Comuns para maiores informaes sobre tratamento deerros.

    Lembre-se de estipular um tamanho para o buffer de sada caso o valor default de 8kno seja suficiente.

    O Atributo AutoFlush

    Este atributo controla o comportamento do container JSP quando o buffer de sada deuma pgina enche. Se este atributo for designado para true (o default), o buffer de sadaser automaticamente enviado ao servidor HTTP, que o responsvel por enviar estecontedo ao browser cliente.

    Por outro lado, se este atributo for designado para false, o container JSP no enviar obuffer automaticamente para o servidor HTTP quando ele encher. Em vez disso, ocontainer JSP gerar uma exceo, que ter o efeito de interromper o processamento dapgina JSP e exibir uma pgina de erro no browser que originou a requisio dapgina. Atravs do uso deste atributo pode-se descobrir o tamanho da resposta geradapor uma pgina JSP.

    O Atributo IsThreadSafe

    Este atributo utilizado para indicar se sua pgina JSP, uma vez compilada em umservlet, ser capaz de responder a vrias requisies simultneas. Caso contrrio, esteatributo deve ser designado para false, assim:

    Quando este atributo designado para false, o container JSP despachar as requisiespara a pgina seqencialmente, na ordem em que foram recebidas, esperando pelotrmino do processamento da requisio corrente antes de iniciar a prxima. Quandoeste atributo designado para true (o default), uma nova thread criada para tratarcada requisio para a pgina. Assim, vrias requisies para uma mesma pginapodero ser tratadas simultaneamente.

    Se este atributo pode ou no ser designado para true, no entanto, geralmente dependedos recursos que so utilizados. Por exemplo, se sua pgina JSP cria e armazena umaconexo de banco de dados, esta conexo dever ser utilizada apenas por um usuriofinal de cada vez caso esta pgina trate transaes no atmicas, exceto se controlesespeciais forem efetuados na utilizao da conexo (como a utilizao de blocossynchronized). Se, por outro lado, uma pgina JSP acessa um pool de conexes de

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 22

    banco de dados e espera por uma conexo livre antes de comear seu processamento,ento o atributo isThreadSafe pode provavelmente ser designado para true.

    Logo, preciso examinar cuidadosamente todas as variveis estticas e todos osobjetos utilizados por pginas JSP cujos escopos sejam session ou application (veja oprximo captulo).

    Finalmente, importante saber que se uma pgina JSP designa o atributo isThreadSafepara false, possvel determinar que uma implementao instancie vrias instncias doservlet correspondente a fim de prover um desempenho melhor. Desta forma asinstncias individuais manipulam uma requisio de cada vez. No entanto, atravs dacriao de um pool de instncias, o container JSP poder ainda tratar um limitadonmero de requisies simultneas.

    O Atributo ErrorPage

    Este atributo utilizado para especificar uma pgina alternativa que dever ser exibidacaso um erro (no capturado) ocorra enquanto o container JSP processa uma pgina.

    Esta pgina alternativa especificada atravs de um URL local, conforme vem abaixo:

    Isto , o URL do atributo errorPage deve especificar uma pgina JSP no mesmo servidorda pgina que gerou o erro. Um URL relativo tambm pode ser especificado. Neste casoo URL ser relativo pgina que provocou o erro. No contexto do atributo errorPage,URLs absolutos comeam por /, enquanto URLs relativos no.

    Se a sada de uma pgina JSP no est sendo armazenada em um buffer e alguma sadaj tiver sido gerada antes da ocorrncia do erro, no ser possvel efetuar um forwardpara a pgina de exibio de erro. Caso a sada esteja sendo armazenada em um buffere o atributo autoFlush esteja designado para true, no momento em que o buffer enchere a sada for enviada pela primeira vez, tambm no ser mais possvel efetuar oforward para a pgina de exibio de erro.

    O Atributo IsErrorPage

    O atributo isErrorPage utilizado para marcar uma pgina JSP que serve comopgina de exibio de erro para uma ou mais pginas JSP.

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 23

    Quando este atributo designado para true, ele indica que a pgina corrente sercapaz de acessar o objeto implcito exception que ser ligado ao objeto Javaexception.

    O valor default deste atributo false.

    3.3.2 Diretiva Include

    Esta diretiva permite que se inclua o contedo de um arquivo em outro. O arquivo a serincludo identificado atravs de um URL local.

    Como todos os tags JSP, h uma sintaxe XML alternativa para esta diretiva;

    O valor do atributo file da diretiva include pode especificar um URL absoluto ourelativo.

    O container JSP recompila uma pgina JSP quando detecta que ela foi modificada. Istono se aplica a um arquivo includo a uma pgina. Isto , o container JSP no controladependncias entre arquivos.

    3.3.3 Diretiva Tag Library

    Esta diretiva utilizada para notificar o container JSP que a pgina utiliza uma ou maisbibliotecas de tags customizados (custom tag libraries). Uma biblioteca de tags umacoleo de tags customizados que podem ser utilizados para estender a funcionalidadedo JSP. Esta funcionalidade estendida se aplica pgina que utiliza o tag customizado.

    Utilizando esta diretiva podemos indicar, por exemplo, que uma pgina JSP ir utilizaruma determinada biblioteca de tags. A partir deste momento todos os tags existentesnesta biblioteca se tornam disponveis para uso na pgina.

    ou a variao XML

    Em ambas as sintaxes, o valor do atributo uri indica o local do arquivo Tag LibraryDescriptor (TLD) para a biblioteca, e o atributo prefix especifica o identificador donamespace XML que ser pr-adicionado a todas as ocorrncias dos tags da biblioteca na

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 24

    pgina. Por exemplo, a seguinte diretiva carrega uma biblioteca de tags cujo TLD acessvel atravs do URI local /EncomTags:

    Dentro da pgina na qual esta diretiva aparece, os tags definidos por esta biblioteca soacessados utilizando o prefixo mcp. Um tag desta biblioteca denominado endProgram,ento, seria referenciado dentro da pgina como . Note que todosos tags customizados seguem a sintaxe XML.

    Como o prefixo especificado externamente biblioteca (em cada pgina), vriasbibliotecas podem ser carregadas em uma nica pgina sem o risco de ocorreremconflitos entre os nomes dos tags. Se duas bibliotecas definem tags com o mesmonome, uma pgina JSP ainda assim capaz de carrega e utilizar ambas as bibliotecas jque os tags podem ser identificados pelo prefixo especificado para a biblioteca.

    Por razes de segurana, a especificao JSP determina que containers JSP podem lerapenas TDLs armazenadas no servidor local.

    3.4 Elementos de Script

    Elementos de script permitem que os desenvolvedores insiram cdigo diretamente emuma pgina JSP, inclusive cdigo capaz de gerar sada que enviada de volta aousurio.

    JSP prov trs tipos de elementos de script: declaraes, expresses e scriptlets. Enenhum dos tags para elementos de script suportam atributos.

    3.4.1 Declaraes

    Declaraes so utilizadas para definir variveis e mtodos especficos de uma pginaJSP.

    Declaraes de Variveis

    Variveis definidas como declaraes se tornam variveis de instncia da classe servletna qual a pgina JSP ser traduzida e compilada. Exemplo:

    Esta declarao ter o efeito de criar 3 variveis de instncia no servlet criado para apgina JSP. Estas variveis podem ser referenciadas por quaisquer elementos de scriptna pgina, incluindo aqueles que aparecem antes da declarao destas variveis.

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 25

    Quando variveis de instncia JSP so declaradas, importante ter em mente quevrias threads podero acessar simultaneamente estas variveis. Se um elemento descript em uma pgina modifica o valor de uma varivel de instncia, todas asreferncias subsequentes a esta varivel de instncia utilizaro o novo valor, inclusivereferncias em outras threads. Se voc deseja criar uma varivel cujo valor local aoprocessamento de uma nica requisio, isto deve ser feito em um scriptlet. Variveisdeclaradas so associadas pgina (atravs da classe servlet), e no a requisiesindividuais.

    Para definir uma varivel de classe, isto , uma varivel esttica (variveis cujosvalores so compartilhados entre todas as instncias de uma classe), faa:

    Na prtica, como o container JSP geralmente cria apenas uma instncia da classeservlet representando uma pgina JSP em particular, h pouca diferena entre sedeclarar uma varivel de classe e uma varivel de instncia. A principal exceo a estaregra quando a pgina JSP designa o valor false ao atributo isThreadSafe dadiretiva de pgina, indicando que a pgina no a prova de threads. Neste caso ocontainer pode criar vrias instncias da classe servlet da pgina, para poder tratarrequisies simultneas (uma requisio por instncia). Para compartilhar uma varivelentre estas vrias instncias esta varivel necessita ser declarada como esttica.

    Declaraes de Mtodos

    Mtodos definidos atravs de declaraes se tornam mtodos da classe servlet na quala pgina JSP ser compilada. Por exemplo, a seguinte declarao define um mtodopara calcular fatoriais:

    Este mtodo pode ser referenciado por quaisquer elementos de script na pgina,incluindo aqueles que aparecem antes da declarao do mtodo.

    Vrios mtodos e variveis podem aparecer dentro de um nico tag de declarao,conforme vem abaixo:

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 26

    static public double varlor = 0; public int ... { ... }%>

    Assim como existem variveis de classe, h tambm os mtodos de classe. Somtodos estticos que no podem referenciar variveis de instncias, mas apenasvariveis de classe. Na prtica, como geralmente no possvel obter o nome da classeservlet correspondente a uma pgina JSP particular, mtodos de classe no soutilizados em pginas JSP.

    Tratando Eventos do Ciclo de Vida

    Um evento de inicializao de uma pgina JSP ocorre na primeira vez que umcontainer recebe uma requisio para esta pgina. E um evento de destruio da pginaocorre quando o container JSP est sofrendo um shutdown ou quando a pgina retirada da memria por no ter sido utilizada recentemente.

    O evento de inicializao tratado atravs da declarao de um mtodo especial queser automaticamente chamado pelo container JSP quando o evento correspondenteocorrer. O evento de inicializao tratado pelo mtodo denominado jspInit() e ode destruio tratado pelo mtodo denominado jspDestroy(). Exemplos:

    Um exemplo de utilizao do mtodo jspInit() seria a criao de um pool deconexes de banco de dados antes que uma requisio possa ser atendida.

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 27

    Observao: o mtodo construtor da classe PoolDeConexoes reutiliza um pool deconexes existente ou, se necessrio, cria um.

    Da mesma forma, se o mtodo jspDestroy for definido, ele ser chamado aps todasas requisies pendentes terem sido processadas, mas logo antes do container JSPretirar de servio o servlet correspondente.

    Se esta pgina a nica pgina a utilizar o pool, o pool pode encerrar as conexes poiselas no so mais necessrias.

    3.4.2 Expresses

    Declaraes so utilizadas para adicionar variveis e mtodos a pginas JSP, mas noso capazes de contribuir diretamente para a gerao de contedo dinmico de umapgina. Para este fim deve-se utilizar o elemento JSP denominado expression.

    ou a variao XML:

    expresso

    O efeito deste elemento avaliar a expresso especificada e substituir o valorresultante na sada da pgina, no exato local do elemento.

    Por exemplo:

    Esta expresso resultaria na sua substituio pelo nmero 479001600.

    Considerando que elementos de script produzem sada apenas atravs de expresses, eno atravs de comandos, como condicionar uma sada de uma pgina JSP? Atravs dooperador abaixo:

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 28

    3.4.3 Scriptlets

    Declaraes e expresses so intencionalmente limitadas no tipo de cdigo script queelas suportam. Scriptlets podem conter quaisquer comandos de linguagem, e noadicionam automaticamente contedo sada de uma pgina JSP.

    A seguir vem um exemplo de scriptlet:

    Este scriptlet instancia um objeto que utilizado para instanciar dois outros objetos.Mtodos so ento chamados sobre estes objetos para efetuar alguns clculos.

    Note que este scriptlet ser executado para cada requisio recebida por uma pgina.No exemplo acima duas novas instncias da classe Recognizer sero criadas toda vezque a pgina JSP que contm este scriptlet requisitada. importante saber ainda que,quaisquer variveis introduzidas em um scriptlet ficam disponveis para uso emscriptlets subsequentes e expresses na mesma pgina (sujeitas a regras de escopo devariveis). O scriptlet acima, por exemplo, poderia ser seguido da expresso:

    Esta expresso inseriria o resultado do mtodo statusReport() na sada da pgina.

    Para se controlar o escopo de uma varivel introduzida em um scriptlet, pode-seutilizar blocos de cdigo. Um bloco pode englobar mais de um scriptlet, conforme vemno exemplo abaixo:

    Alerta de IntrusoEntrada no autorizada, disparar recognizers...

    Status First Recognizer: second Recognizer:

    Nvel de Alerta:

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 29

    Neste exemplo, o primeiro scriptlet introduz um novo bloco de programa antes de criarduas instancias de Recognizer.

    O segundo scriptlet, no final da pgina, fecha este bloco. Dentro deste bloco, asinstncias r1 e r2 podem ser referenciadas livremente. Aps o bloco ser fechado, nopodem mais ser referenciadas, pois seu escopo delimitado pelo bloco no qual foramdeclaradas. J a varivel grid, que foi definida fora do bloco, no sofre esta limitao.

    A razo para isto funcionar tem a ver como o contedo de uma pgina JSP traduzidono cdigo fonte de um servlet. Contedo esttico, tal como cdigo HTML, traduzidoem comandos Java que imprimem o texto como sada do servlet. Da mesma forma,expresses so traduzidas em comandos Java que avaliam a expresso, convertem oresultado em um string, e imprimem este string como sada do servlet. Scriptlets, noentanto, no passam por qualquer traduo, e so simplesmente inseridos no cdigofonte do servlet.

    Comandos Java correspondentes a contedo esttico de pginas JSP, expresses escriptlets so utilizados para criar o mtodo _jspService() do servlet correspondente.Este mtodo responsvel por gerar a sada da pgina JSP. Diretivas e declaraestambm so traduzidas em cdigo servlet mas no contribuem com o mtodo_jspService() e no so afetados pelo escopo determinado por scriptlets. Por outrolado, os tags JSP de acesso a Beans, discutidos no captulo 5, so traduzidos emcomandos Java para o mtodo _jspService() e esto sujeitos s restries de escopointroduzidas por scriptlets.

    3.5 Fluxo de Controle

    A possibilidade dos scriptlets introduzirem blocos de comandos sem fech-los pode serutilizada para afetar o fluxo do controle atravs de vrios elementos, estticos oudinmicos, que controlam a sada gerada pela pgina.

    3.5.1 Condies

    O comando if pode ser utilizado para gerar contedo condicional em uma pgina JSP.

    Exemplo:

    No possvel calcular o fatorial de um nmero negativo.

    20) { %> Argumentos maiores do que 20 causam um erro de overflow.

    ! =

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 30

    3.5.2 Iterao

    Java possui trs comandos diferentes para controlar a execuo de loops: for loop,while loop e o comando do/while. Todos podem ser utilizados atravs de scriptletspara adicionar iterativamente contedo a uma pgina JSP, e so particularmente teisna exibio de dados tabulares. A seguir vem um exemplo de um fragmento de cdigoque utiliza o mtodo fatorial definido anteriormente para construir uma tabela defatoriais de um nmero.

    xx!

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 31

    3.5.3 Tratamento de excees

    O comportamento default quando uma exceo gerada durante o processamento deuma pgina JSP a exibio de uma mensagem de erro especfica da implementao,na janela do browser. Neste captulo tambm vimos como o atributo errorPage dadiretiva de pgina pode ser utilizado para especificar uma pgina alternativa para otratamento de erros no capturados, gerados por uma pgina JSP. Uma terceira opopermite um controle mais apurado sobre os erros atravs da incorporao domecanismo de tratamento de excees da linguagem Java em uma pgina JSPutilizando scriptlets.

    Se um bloco de cdigo possui o potencial de gerar um erro, conveniente capturar esteerro e gerar uma mensagem de erro adequada. Exemplo:

    20))

    throw new IllegalArgumentException (Fora dos Limites.); else if (x == 0) return 1; else return x * fatorial (x-1);

    } %>

    xx!

    Fatorial

    ! =

    Fatorial fora dos limites.

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 32

    A razo da exceo IllegalArgumentException ser gerada porque valores inteirosdo tipo long (em Java) esto limitados a 64 bits. E vinte o maior nmero cujo fatorialpode ser armazenado em um long. Note que toda a sada gerada at o momento dachamada ao mtodo fatorial aparece na pgina. Isto ocorre porque o cdigo do servletque produz esta sada no gera nenhuma exceo, e portanto executado quando apgina processada. Assim que a chamada a fatorial() ocorre, no entanto, aexceo gerada e o controle transferido ao bloco catch, que imprime a mensagemde erro.

    Alm das bibliotecas de tags customizados (custom tag libraries), scriptlets que fazemuso de blocos so a nica forma de se implementar em uma pgina JSP contedocondicional, iterativo, ou de se utilizar tratamento de exceo customizado. Por outrolado, o uso excessivo de scriptlets pode acarretar problemas de manuteno.

    3.6 Comentrios

    H comentrios que so transmitidos para o browser como parte da resposta JSP eaqueles que so visveis apenas no arquivo JSP original.

    3.6.1 Comentrios de Contedo

    Para escrever um comentrio que ser includo na sada de uma pgina JSP, utilize aseguinte sintaxe:

    Estes comentrios so enviados para o usurio como parte da resposta. Como socomentrios, no produzem nenhuma sada visvel, mas podem ser vistos pelo usuriofinal atravs dos itens de menu Exibir / Cdigo fonte do browser.

    3.6.2 Comentrios JSP

    Comentrios JSP so independentes do tipo de contedo sendo produzido pela pgina.Tambm so independestes da linguagem de script que est sendo utilizada. Sintaxe:

    O corpo deste comentrio ignorado pelo container JSP. Quando a pgina compiladaem um servlet, qualquer coisa que aparece entre estes delimitadores ignorada.

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 33

    3.6.3 Comentrios da Linguagem de Script

    E finalmente, comentrios tambm podem ser introduzidos em uma pgina JSP dentrode scriptlets utilizando a sintaxe de comentrio nativa da linguagem de script queestiver sendo utilizada.

    Em Java a sintaxe utilizada para a produo de comentrios a seguinte:

    // comentrio em uma nica linha

    /* Comentrio abrangendo mais de uma linha */

    Exemplo de utilizao de comentrios em scriptlets:

    Evite o estilo de comentrio abaixo. Dependendo da implementao do container JSPpoder no funcionar:

    O fatorial de 3 , certo?

    Nestes casos utilize os delimitadores /* ... */

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 34

    4. OBJETOS IMPLCITOS E AES

    Trs tipos de tags foram introduzidos no captulo 3: diretivas, elementos de script ecomentrios. O ltimo tipo, Aes (Actions), sero introduzidos neste captulo. Aesencapsulam comportamento comum, em simples tags que podem ser utilizados emqualquer pgina JSP. Aes so a base para a existncia dos tags customizados, masuma srie de aes (actions) fazem parte da especificao bsica de JSP. Estas aespadro so suportadas por todos os containers JSP.

    Antes de estudarmos as aes padro, vamos primeiramente examinar um conjunto deobjetos Java que o container JSP torna disponvel para os desenvolvedores de pginasJSP.

    4.1 Objetos Implcitos

    O container JSP disponibiliza, para os desenvolvedores, uma srie de objetosimplcitos que podem ser utilizados no desenvolvimento de pginas JSP. Estes objetosso denominados implcitos pois sua disponibilidade em uma pgina JSP automtica.Estes objetos podem ser acessados pelos desenvolvedores atravs de elementos descript. Mais especificamente, podem ser utilizados nomes especficos de variveis quepermitem o acesso a estes objetos.

    A tabela abaixo relaciona todos os objetos implcitos que podem ser utilizados em umapgina JSP.

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 35

    Os nove objetos implcitos fornecidos por JSP pertencem a uma das seguintescategorias:

    Objetos relacionados ao servlet decorrente da pgina JSP; Objetos utilizados na entrada e sada de dados; Objetos que fornecem informaes sobre o contexto no qual cada pgina JSP est

    sendo processada. Objetos resultantes de erros.

    Alm desta categorizao funcional, os objetos request, session, application epageContext so capazes de armazenar e recuperar valores arbitrrios de atributos.

    Os mtodos padro para o gerenciamento de atributos fornecidos pelas classes einterfaces destes quatro objetos so relacionados na tabela abaixo:

    4.1.1 Objetos Relacionados a Servlets

    O Objeto Page

    O objeto page representa a prpria pgina JSP ou, mais especificamente, uma instnciada classe servlet na qual a pgina ser traduzida. Logo, o objeto page pode serutilizado para se chamar qualquer dos mtodos definidos para aquela classe servlet. Oatributo extends da diretiva de pgina pode ser utilizado para especificar a classe doservlet explicitamente, caso contrrio uma classe especfica de implementao serutilizada pelo container JSP na construo do servlet. Em ambos os casos, a classeservlet sempre implementa a interface javax.servlet.jsp.JspPage. Nos casosespecficos de aplicaes JSP para a web, construdas com HTTP, a classe servlet deveimplementar a interface javax.servlet.jsp.HttpJspPage.

    Na prtica, o objeto page raramente utilizado quando a linguagem de script Java,pois o objeto page representado pela varivel this.

    Abaixo vem um fragmento de cdigo que exemplifica a utilizao deste objetoimplcito:

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 36

    Page info:

    Esta expresso ir inserir, na sada gerada pela pgina, o valor do string dedocumentao desta pgina.

    Como a classe servlet varia de uma pgina para outra, o tipo padro do objeto page object. Logo, para se poder acessar mtodos definidos na interfacejavax.servlet.jsp.HttpJspPage o objeto page deve primeiramente sofrer um cast.

    O Objeto Config

    O objeto config armazena dados de configurao do servlet na forma de parmetrosde inicializao no qual a pgina JSP compilada. Como pginas JSP raramenteinteragem com parmetros de inicializao, este objeto implcito raramente utilizadona prtica. Este objeto uma instncia da interface javax.servlet.ServletConfig.

    O cdigo abaixo mostra um exemplo de utilizao do objeto implcito config.

    Neste caso, em vez de armazenar o nome do usurio e a password diretamente nocdigo da pgina JSP, estas informaes foram fornecidas atravs de parmetros deinicializao e so acessadas atravs do objeto config.

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 37

    4.1.2 Entrada e Sada

    O objeto request representa os dados enviados a uma pgina JSP, e o objetoresponse representa o resultado enviado ao usurio. O objeto implcito out representao stream de sada associado ao objeto response, no qual o contedo da pgina escrito.

    O Objeto Request

    O objeto request representa a requisio que disparou o processamento da pginacorrente. Para requisies HTTP, este objeto prov acesso a todas as informaesassociadas requisio, como sua fonte, o URL requisitado, e quaisquer headers,cookies ou parmetros associados requisio. O objeto request deve implementar ainterface javax.servlet.ServletRequest. Quando o protocolo utilizado HTTP, oobjeto request deve implementar uma subclasse desta interface,javax.servlet.http.HttpServletRequest.

    O objeto request um dos quatro objetos implcitos JSP que suportam atributos,atravs dos mtodos apresentados na tabela abaixo:

    A interface HttpServletRequest tambm inclui mtodos para a recuperao deparmetros de requisio e cabealhos HTTP. Veja tabelas abaixo:

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 38

    Outros mtodos freqentemente utilizados desta interface encontram-se listados natabela abaixo:

    Entre os usos mais comuns do objeto request est a procura de valores de parmetrose cookies.

    Abaixo vem um fragmento de cdigo que ilustra o uso do objeto request para acessarum valor de parmetro:

    Resultado: ! =

    String ivlido. Informe um nmero.

    O valor do parmetro num recuperado do objeto request. Note que todos os valoresde parmetros so armazenados como strings, logo preciso efetuar uma conversoantes de se poder utilizar este valor como um nmero.

    O Objeto Response

    O objeto response representa a resposta que ser enviada de volta ao usurio comoresultado do processamento de uma pgina JSP. Este objeto implementa a interfacejavax.servlet.ServletResponse. Como ele representa uma resposta HTTP, eletambm implementa uma subclasse desta interface,javax.servlet.http.HttpServletResponse. Os mtodos principais desta ltimainterface encontram-se relacionados nas tabelas abaixo:

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 39

    Abaixo vem um exemplo de um scriptlet que designa, atravs do objeto response,vrios headers que impedem que o browser faa o cache desta pgina JSP.

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 40

    O scriptlet primeiramente informa que a data de expirao da pgina uma data nopassado. Isto indica que ao browser que o contedo da pgina j expirou, logo seucontedo no deveria sofrer cache.

    O mtodo setDateHeader deve receber como data de expirao da pgina um objetodo tipo java.util.Date. E o zero informado representa a meia noite de 31 dedezembro de 1969.

    A verso 1.0 do protocolo HTTP 1.0 utiliza o header Pragma com valor no-cache paraindicar que a pgina no deve sofrer cache. J a verso 1.1 do protocolo HTTPsubstituiu o header Pragma pelo header Cache-Control (mais especfico para controlede cache), mas recomenda a incluso do header Pragma por questes decompatibilidade com o passado. Logo, se a requisio indicar que o browser (ouservidor proxy) suporta HTTP 1.1, ambos os headers so enviados.

    O Objeto Out

    Este objeto implcito representa o stream de sada para a pgina. O contedo desteoutput stream enviado ao browser como o corpo (body) da resposta.

    Utilizando este objeto implcito, sada pode ser gerada de dentro do corpo de umscriptlet, sem a necessidade de se fechar temporariamente o scriptlet para se inserircontedo esttico ou expresses JSP.

    Gerando os nmeros de 1 a 10.

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 41

    A tabela abaixo apresenta uma srie de mtodos que podem ser utilizados paracontrolar o buffer de sada, e gerenciar o seu relacionamento com o stream de sadaque envia contedo de volta ao browser.

    Segue abaixo um fragmento de cdigo que utiliza o objeto out para exibir o status dobuffer:

    Status do buffer:/ = %

    Esta uma forma de se descobrir o tamanho do buffer necessrio para se gerar umapgina.

    Os mtodos fornecidos para limpar o contedo do buffer so bastante teis. Emalgumas situaes, quando um erro detectado necessrio escrever novamente apgina que deve ser encaminhada ao usurio. Veja o exemplo abaixo:

    Exemplo para calcular o fatorial de um nmero.

    20)) throw new IllegalArgumentException ("Fora dos Limites.");

    else if (x == 0) return 1; else return x * fatorial (x-1);

    }%>

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP 42

    Resultado: ! = // No preciso chamar out.clearBuffer() aqui pois nenhum // contedo foi gerado.

    String ivlido. Informe um nmero.

    Fatorial fora dos limites.

    Lembre-se, no entanto, que uma vez enviado algum contedo ao usurio no maispossvel modificar o header de resposta j encaminhado.

    4.1.3 Objetos Contextuais

    O Objeto Session

    Este objeto implcito JSP representa uma sesso do usurio corrente. Uma sesso deum usurio corresponde a uma srie de interaes do usurio com o servidor web. Noentanto, se um certo intervalo de tempo decorre sem que novas requisies do usuriosejam encaminhadas ao servidor, a sesso expira.

    O objeto session armazena informaes sobre a sesso. Dados especficos daaplicao so adicionados ao objeto session atravs de atributos, utilizando-se osmtodos da tabela abaixo:

  • ____________________________________________________________________________________

    ____________________________________________________________________________________Apostila de JSP