Escolar Documentos
Profissional Documentos
Cultura Documentos
Introduo ao JSP/Servlet (Parte 3) A Sintaxe JSP w Existem quatro diferentes tipos de elementos em JSP: n Elementos de Script: elementos que contm cdigo Java. Podem ser: l Scriptlets: elementos que contm cdigo Java. Representam os elementos de script mais comuns. l Declaraes: so utilizados na declarao de um mtodo ou varivel utilizado no cdigo. l Expresses: contm uma expresso Java que ser avaliada pelo servidor. O resultado da expresso inserido na pgina Web retornada ao cliente. n Comentrios: texto adicionado s pginas JSP para explicar o funcionamento da pgina ou do cdigo. Comentrios so ignorados pelo servidor. n Diretivas: so instrues especiais definidas em uma pgina para indicar como essa pgina deve ser processada. n Aes: permitem trabalhar com Javabeans em uma pgina ou especificar uma operao a ser executada (por exemplo, incluir uma pgina em outra pgina). Aes, diferentemente de diretivas, so reavaliadas cada vez que a pgina acessada.
227
ELFS, 2005
Introduo ao JSP/Servlet (Parte 3) Elementos de Script: Scriptlets w Scriptlets so utilizados para inserir cdigo Java em documentos HTML tornando esses documentos pginas JSP. Os fragmentos de cdigo so definidos dentro das balizas <% e %>. Um scriptlet pode conter um nmero qualquer de comandos, declaraes ou expresses Java vlidos. Um scriptlet no pode conter cdigo HTML.
exemplo7_1.jsp <html> <head> <title>Uma pgina Web</title> </head> <body> <% out.println ("Um scriptlet em uma pgina"); %> </body> </html>
w w
ELFS, 2005
228
Introduo ao JSP/Servlet (Parte 3) Elementos de Script: Declaraes w Estes elementos so utilizados para declarar um mtodo ou uma varivel utilizados no cdigo. As declaraes so definidas dentro das balizas <%! e %>. Pode-se tambm fazer declaraes nos scriptlets (o mais comum).
exemplo7_2.jsp <html> <head> <title>Uma pgina Web</title> </head> <body> <%! String msg = "Scriptlet primeiro definiu msg"; %> <% out.println(msg); %> </body> </html> A varivel declarada e depois usada no scriptlet. exemplo7_3.jsp <html> <head> <title>Uma pgina Web</title> </head> <body> <% String msg = "A declarao de msg faz parte do scriptlet"; out.println(msg); %> </body> </html> Note que assim tudo faz parte do scriptlet.
ELFS, 2005
229
Introduo ao JSP/Servlet (Parte 3) Elementos de Script: Expresses w Cdigo Java que avaliado resulta em um valor (por ex.: 2+2, o valor de uma varivel, uma chamada a um mtodo que retorna um valor). As expresses so definidas dentro das balizas <%= e %>. O resultado das expresses inserido pelo servidor nas pginas Web como um texto comum.
exemplo7_4.jsp <html> <head> <title>Uma pgina Web</title> </head> <body> <%! String msg = "Um valor qualquer!"; %> <%= msg %> </body> </html> Note que no deve haver um ponto-e-vrgula aps uma expresso. exemplo7_5.jsp <html><head><title>Uma pgina Web</title></head> <body> <%! String msg = "Veja que interessante: "; %> <%= msg + new java.util.Date() + Math.PI %> </body> </html>
ELFS, 2005 230
Introduo ao JSP/Servlet (Parte 3) Comentrios w O servidor retira os comentrios das pginas antes de envi-las ao cliente. Os comentrios so definidos dentro das balizas <%-- e --%>.
exemplo7_6.jsp <html> <head> <title>Uma pgina Web</title> </head> <body> <%-- Apresente a mensagem agora --%> <% out.println("Uma primeira mensagem.<br>"); %> <%-- Note que um comentrio pode ocupar mais de uma linha --%> <% out.println("Uma segunda mensagem."); %> </body> </html>
Diretivas w Diretivas permitem que se informe ao servidor como uma pgina deve ser processada e so definidas dentro das balizas <%@ e %>. w Existem trs diretivas:
ELFS, 2005 231
Introduo ao JSP/Servlet (Parte 3) w w <%@page ...%>: permite que se configure uma pgina inteira JSP informando por exemplo se o contedo da pgina HTML ou XML. <%@include ...%>: permite que se inclua uma pgina ou recurso em uma outra pgina. bastante til na criao de cabealhos e rodaps padro para um site. <%@taglib ...%>: permite que se utilize um conjunto de tags pr-definidos em bibliotecas do ambiente JSP.
Note que as diretivas so pares atributo="valor". Indica que se ocorrer um erro o servidor deve enviar ao navegador uma pgina chamada error.jsp Informa que a linguagem de programao usada na pgina Java.
Por exemplo:
<%@page errorPage="error.jsp" language="Java" contentType="aplication/xml" import="java.sql.*" %> <html> <head> M Informa que a sada da pgina Declara a importao da biblioteca deve ser em XML e no em java.sql.* para que o programa HTML (que o padro). possa trabalhar com BDs SQL.
ELFS, 2005 232
Detalhamento: Captulo 11 do Livro Core Servlets and JavaServer Pages. Descrio da Sun: Referncia na Pgina do Curso.
ELFS, 2005
233
Introduo ao JSP/Servlet (Parte 3) Aes w Existem dois tipos de aes: n Aes personalizadas (Custom actions): so aes definidas pelo programador. n Aes padres (Standard actions): so aes definidas no ambiente JSP. l <jsp:forward>: Envia o pedido do navegador para outra pgina web. Permite definir como as aplicaes web respondem aos navegadores. l <jsp:include>: Permite que se inclua um arquivo ou um mdulo web. A ao include diferente da diretiva include pois cada vez que a pgina for chamada o arquivo a ser inserido avaliado e s ento o servlet gerado. Na diretiva a incluso feita e o servlet gerado e armazenado. Mesmo se o arquivo includo for alterado nada muda, a menos que seja atualizado o arquivo que o inclui. l <jsp:plugin>: Permite que se execute applets ou Javabeans como um plugin. Se o navegador no tiver o plugin ele ir apresentar uma janela para que se possa recuperar o plugin. l <jsp:getProperty>, <jsp:setProperty> e <jsp:useBean>: Aes utilizadas com componentes Javabeans.
ELFS, 2005 234
Introduo ao JSP/Servlet (Parte 3) Ambiente de Programao JSP w O ambiente JSP disponibiliza alguns objetos implcitos (built-in objects) para a utilizao nas pginas JSP que sero depois transformadas em servlets pelo servidor: n application: manipula os dados para a aplicao web corrente (objeto da classe javax.servlet.http.HttpSession ) n config: manipula dados de configurao como, por exemplo, senhas (objeto da classe javax.servlet.ServletConfig ) n exception: permite que se faa a manipulao de erros (objeto da classe javax.lang.Throwable ) n out: possibilita o envio de dados a uma pgina (objeto da classe javax.servlet.jsp.JspWriter ) n page: fornece acesso ao servlet que responsvel pela pgina JSP (objeto da classe javax.servlet.jsp.HttpJspPage ) n pageContext: manipula os dados do servlet responsvel pela pgina JSP (objeto da classe javax.servlet.jsp.PageContext ) n request: manipula os dados enviados ao cliente pelo servidor (objeto da classe javax.servlet.http.HttpServlerRequest ) n response: manipula os dados enviados pelo cliente ao servidor (objeto da classe javax.servlet.http.HttpServlerResponse )
ELFS, 2005 235
Introduo ao JSP/Servlet (Parte 3) session: manipula dados sobre a seo atual (objeto da classe javax.servlet.http.HttpSession ) Documentao disponvel: http://jakarta.apache.org/tomcat/tomcat-5.0-doc/... w Servlet API: .../servletapi/index.html w JSP API: .../jspapi/index.html
n
ELFS, 2005
236
Introduo ao JSP/Servlet (Parte 3) Manipulao de Dados em JSP w Dados podem ser manipulados diretamente em pginas JSP dentro de scriptlets, expresses ou declaraes. w Os dados so utilizados atravs de variveis, que de acordo com a sintaxe Java, devem ser declaradas como: tipo nome [=valor] [, nome [=valor] ...];
Tipo boolean byte char double float int long short
ELFS, 2005
Faixa de Valores
-1,79769313486232E308 a -4,94065645841247E-324 4,94065645841247E-324 a 1,79769313486232E308 -3,402823E38 a -1,401298E-45 1,401298E-45 a 3,402823E38 -2.147.483.648 a 2.147.483.647 -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 -32.768 a 32.767
237
No esquea de modificar o arquivo build.xml para incluir as aes necessrias para a desimplantao (opo Undeploy):
<target name="undeploy"> <delete file="${deploy.dir}/${war}.war"/> <delete dir="${deploy.dir}/${war}"/> </target>
ELFS, 2005
239
Introduo ao JSP/Servlet (Parte 3) Converso de Tipos de Dados w Java uma linguagem com estrutura forte de tipos (fortemente tipada).
float float1; double double1 = 2; float1 = double1;
Produz um erro pois double usa 8 bytes e float usa 4. necessrio fazer uma converso entre os tipos.
Converso Automtica Realizada de maneira automtica pelo interpretador. S possvel de um tipo de dados que utiliza menos bytes para um que utiliza mais bytes. Exemplo:
float float1 = 1; double double1; double1 = float1;
Converso Forada Deve-se indicar ao interpretador que ele deve efetuar a converso. Possibilita converses de um tipo de dados que utiliza mais bytes para um que utiliza menos bytes. Deve-se levar em considerao que dados podem ser perdidos. Exemplo: float float1; Neste caso preciso uma coero,
double double1 = 1; float1 = (float)double1;
que indicada pelo nome do tipo entre parnteses.
ELFS, 2005
240
aula07_02.jsp
double2 = float1; float2 = (float) double1; short1 = (short) (float1 + double1); out.println("Converso direta: double2 = " + double2); out.println("<br>Converso forada: float2 = " + float2); out.println("<br>Converso com perda: short1 = " + short1); %> </body> </html> index.jsp <html> M <h2>Exerccios Aula 07</h2> <a href="aula07_01.jsp">Exerccio 1 - Variveis</a><br> <a href="aula07_02.jsp">Exerccio 2 - Converso de Tipos</a><br> </body> </html> Inclua mais uma linha no documento index.jsp
ELFS, 2005
241
Observe que: (float1 + double1) = (7000 + 27000) = 34000. Assim: (short)(float1 + double1) = -31536, pois 34000 extravasa o limite superior do tipo short (32767). Note que o extravasamento de: 34000 - 32767 = 1233 e que, portanto, o valor da converso est a (1233 - 1) do limite inferior do tipo short (-32768), ou seja: -32768 + 1233 - 1 = -31536 Da mesma forma, se fizermos: (short)(-4000 - 30000) = 31536, pois o extravasamento ser: -32768 - (-34000) = 1232 e, portanto, o valor da converso estar a (1232 - 1) do limite superior do tipo short, ou seja: 32767 - 1232 + 1 = 31536.
ELFS, 2005 242
Introduo ao JSP/Servlet (Parte 3) Strings w Cadeias de caracteres (strings) em Java so manipuladas atravs de uma classe especfica: java.lang.String, ou seja: strings so objetos desta classe (consultar a API Java para verificar os mtodos da classe String). w Objetos da classe java.lang.String so criados e manipulados de maneira similar aos outros tipos:
n
Objetos (cadeias de caracteres) da classe String so criados atravs do construtor da classe. Existem diversos construtores sobrecarregados (verificar na documentao). Verificar a necessidade de utilizao de mtodos prprios da classe para comparao, subtrao, etc. de strings.
\f Mudana de formulrio \n Nova linha \r Carriage return \t Tab \uxxxx caractere unicode hexadecimal
243
ELFS, 2005
out.println("s1 = \"Um primeiro \""); out.println("<br>s2 = \"teste com \""); out.println("<br>s3 = \"strings.\""); out.println("<br>s4 = Soma de strings (s1+s2+s3) = " + s4); out.println("<br>s5 = \"" + s5 +"\" - "); out.println("O comprimento de s5 : " + s5.length()); out.println("<br>s6 = \"Uso do Construtor\" - "); out.println("O substring \"Cons\" se inicia em s6 na "); out.println("posiao: " + index); %> </body> </html>
ELFS, 2005 244
Note que mais essa linha deve ser includa no documento index.jsp, como temos feito nos exerccios anteriores.
ELFS, 2005
245
Introduo ao JSP/Servlet (Parte 3) w Arranjos ("Arrays"): Agrupamento de dados de um mesmo tipo. Os dados da estrutura podem ser referenciados individualmente atravs de um ndice.
<html> <head> <title>Arranjos (Arrays)</title> <h2>Arranjos (<i>Arrays</i>)</h2> <% int n_func[]; n_func = new int[50]; int faixa[] = {1, 2, 3, 4, 5, 6, 7}; double salario[] = new double[50]; double imposto[] = new double[50]; double h[][] = new double[2][50]; aula07_04.jsp
n_func[23] = 12546; salario[23] = 3456.78; imposto[23] = 1058.43; h[0][23] = salario[23]; h[1][23] = imposto[23]; out.println("O nmero de registro do funcionrio 23 : " + n_func[23]); out.println("<br> A faixa de salrio do funcionrio 23 : " + faixa[2]); out.println("<br> O salario do funcionrio 23 : R$ " + h[0][23]); out.println("<br> O imposto pago pelo funcionrio 23 : R$" + h[1][23]); %>
ELFS, 2005 246
ELFS, 2005
247
Introduo ao JSP/Servlet (Parte 3) Operadores w Scriplets em pginas JSP contm cdigo Java, portanto, todos os operadores da linguagem Java podem ser utilizados.
aula07_05.jsp <html> <head> <title>Operadores Matemticos, de Atribuiao e de Incremento</title> <h2>Operadores Matemticos, de Atribuiao e de Incremento</h2> <% int op1, op2, op3 = 20; int som, sub, mul, div; op1 = 4; op2 = 3; som = op1 + op2; sub = op3 - op2; mul = op1 * op3; div = op3 / op2; out.println("op1 = " + op1 + " | op2 = " + op2); out.println(" | op3 = " + op3 + "<br /> <br />"); out.println("Soma (op1 + op2) = " + som + "<br />"); out.println("Subtraao (op3 - op2) = " + sub + "<br />"); out.println("Multiplicaao (op1 * op3) = " + mul + "<br />"); out.println("Diviso (op3 / op2) = " + div + "<br />"); ++som; out.println("Soma incrementada = " + som); %>
ELFS, 2005
248
Observe que a diviso entre dois valores inteiros resulta em um valor inteiro.
ELFS, 2005
249
Introduo ao JSP/Servlet (Parte 3) Operadores Relacionais e Lgicos w Os operadores relacionais (>, >=, <, <=, == e !=) so usados para fazer comparaes. O resultado de uma comparao sempre true ou false. w Os operadores lgicos || (or) e && (and) podem ser utilizados para conectar expresses lgicas. Existe tambm o operador lgico ! (not) para inverter o valor de uma expresso lgica.
aula07_06.jsp <html> <head> <title>Operadores Relacionais e Lgicos</title> <h2>Operadores Relacionais e Lgicos</h2> <% int vel = 125, temp = 37; out.println("<h3>vel = "+vel+"<br>temp = "+temp+"</h3>"); out.println("Resultado da comparao (vel > 50): "+(vel > 50)+"<br>"); out.println("Resultado da comparao (vel > 250): "+(vel > 250)+"<br>"); if(vel < 50) out.println("A velocidade menor que 50!" + "<br>"); else out.println("A velocidade maior que 50!" + "<br>"); if(vel > 120 && temp >= 37) out.println("V mais devagar e ligue o ar-condicionado!"); %>
ELFS, 2005 250
ELFS, 2005
251
252
ELFS, 2005
253
ELFS, 2005
ELFS, 2005
255
ELFS, 2005
257
ELFS, 2005
259
ELFS, 2005
261
Introduo ao JSP/Servlet (Parte 3) Mtodos w Mtodos contm cdigo que executado quando o mtodo chamado. out.println("Oi, pessoal"); w Mtodos so declarados da seguinte maneira: [acesso] [static] tipo nomeMtodo (lista de parmetros) w Mtodos no devem ser declarados em scriptlets e sim em declaraes, dentro das balizas <%! %>. Diversos mtodos podem ser declarados em uma mesma declarao. Problema: no se pode utilizar os objetos internos JSP (como out, por exemplo) como parte do cdigo do mtodo. Soluo: passar o objeto ao mtodo como um parmetro e ento utiliz-lo. w O cdigo do mtodo s executado quando o mtodo chamado dentro do servlet. O cdigo no scriptlet chamado to logo a pgina carregada.
ELFS, 2005
262
aula07_12.jsp
ELFS, 2005
264
Introduo ao JSP/Servlet (Parte 3) Passagem de Parmetros aos Mtodos w Existem dois mecanismos de passagem de parmetros a um mtodo: n passagem por valor n passagem por referncia Passagem por valor: uma cpia da varivel (que armazena o valor a ser passado ao mtodo) construda e esta cpia enviada ao mtodo. As manipulaes feitas no mtodo no alteram o valor original da varivel. Passagem por referncia: Quando um objeto passado a um mtodo uma cpia no feita. Em vez disto, a posio de memria do objeto passada ao mtodo e assim, manipula-se no mtodo o prprio objeto. As manipulaes feitas no mtodo podem alterar o objeto original. Um dos grandes interesses em se passar objetos para mtodos poder utilizar esses objetos dentro do cdigo do mtodo da mesma forma que se usa em scriptlets. Lembrar que em uma declarao JSP no se tem acesso aos objetos internos JSP.
ELFS, 2005
265
ELFS, 2005
267
ELFS, 2005
269
Introduo ao JSP/Servlet (Parte 3) Mtodos JSP Internos w A classe Java a partir da qual as pginas JSP so criadas (HttpJspBase) tem dois mtodos internos (built-in methods) que so automaticamente chamados em instantes especiais da vida da pgina:
n
jspInit: Mtodo chamado automaticamente quando a pgina criada pela primeira vez. Permite que se execute cdigo para a inicializao da pgina. Exemplo: abertura de uma conexo com um BD. jspDestroy: Mtodo chamado automaticamente quando a pgina no est mais carregada e destruda pelo servidor. Permite que se execute cdigo para a finalizao da pgina. Exemplo: fechamento da conexo com um BD.
w w
Nenhum desses dois mtodos especiais aceita argumentos ou retorna valores. Ao declarar qualquer desses mtodos faz-se uma sobrecarga dos mtodos originais. A sobrecarga deve ser feita respeitando a declarao original e, assim, os mtodos devem ser declarados como public (esses mtodos so declarados como sendo pblicos em HttpJspBase).
270
ELFS, 2005
aula07_15.jsp
ELFS, 2005
272
Introduo ao JSP/Servlet (Parte 3) Escopo de Variveis w O escopo de uma varivel indica que partes de um programa conseguem acessar a varivel. Situao similar acontece no ambiente JSP. w Escopo global: A varivel declarada fora de qualquer mtodo. A varivel acessvel a qualquer mtodo e tambm ao cdigo do scriptlet.
<%! double notas[] = new double[6]; double soma, media; ... %>
Escopo local: A varivel declarada dentro de um mtodo. A varivel acessvel somente internamente ao prprio mtodo. Nenhum outro mtodo ou o cdigo do scriptlet tem acesso a varivel.
<%! double media(double notas[]) { double soma = 0, media; ... Esse o escopo das variveis soma e media. } %> As variveis soma e media so declaradas dentro do mtodo media. Portanto, o escopo destas variveis o corpo do mtodo.
ELFS, 2005
273