Você está na página 1de 47

7.

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

Note que o ponto-e-vrgula de final de comando do Java continua sendo necessrio.

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

Introduo ao JSP/Servlet (Parte 3) Algumas Diretivas


Atributo info language contentType extends import session buffer autoFlush isThreadSafe errorPage isErrorPage Valor Cadeia de texto Linguagem de criao de scripts Tipo MIME, conjunto de caracteres Nome da classe Nome de pacote e/ou classe Flag booleano Tamanho de buffer, ou false Flag booleano Flag booleano URL local Flag booleano Padro None "java" None None "true" "6kb" "true" "true" None "true" language="java" contentType="text/html; charset=ISSO-8859-1" extends="com.taglib.wdjsp.MyJspPage" import="java.net.URL" session="true" buffer="12kb" autoFlush="false" isThreadSafe="true" errorPage="/failed.jsp" isErrorPage="false" Exemplos info="Registration form"

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

Pacotes das classes originrias dos objetos implcitos.

Descrio dos mtodos de uma classe particular.

Interfaces e Classes originrias dos objetos implcitos.

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

# Bytes 2 1 2 8 4 4 8 2 true, false -128 a 127 N/A

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

Introduo ao JSP/Servlet (Parte 3)


Vamos criar as aplicaes no mdulo Aula07. Vamos adotar o mesmo procedimento de criao de pginas JSP apresentado na aula anterior. Vamos tambm editar o arquivo index.jsp para cada exemplo. aula07_01.jsp <html> <head> <title>Variveis: Criando, Inicializando, Usando</title> </head> <body> <H2>Variveis: Criando, Inicializando, Usando</H2> <% int Idade; Idade = 36; out.println("Minha idade : " + Idade + " (na base 16)<br>"); out.println("Qual minha idade real?"); %> </body> </html> index.jsp <html> <head> <title>Exerccios Aula 07</title> </head> <body> <h2>Exerccios Aula 07</h2> <a href="aula07_01.jsp">Exerccio 1 - Variveis</a><br> </body> </html>
ELFS, 2005 238

Introduo ao JSP/Servlet (Parte 3)

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

Introduo ao JSP/Servlet (Parte 3) Converso de Tipos de Dados


<html> <head> <title>Converso de Tipos de Dados</title> <body> <H2>Converso de Tipos de Dados</H2> <% float float1 = 7000, float2; double double1 = 27000, double2; short short1;

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

Introduo ao JSP/Servlet (Parte 3) Converso de Tipos de Dados

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

Caracteres de "escape" (escaping)


\ Aspas simples \ Aspas duplas \\ - Backslash \b Backspace \ddd caractere octal (ddd o caractere)

ELFS, 2005

Introduo ao JSP/Servlet (Parte 3) Strings


<html> <head> <title>Strings</title> <h2>Strings</h2> <% String s1 = "Um primeiro "; String s2 = "teste com "; String s3 = "strings."; String s4, s5; s4 = s1 + s2 + s3; s5 = "Utilizando mtodos da classe String."; String s6 = new String("Uso do Construtor"); int index; index = s6.indexOf("Cons"); aula07_03.jsp

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

Introduo ao JSP/Servlet (Parte 3) Strings

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

Introduo ao JSP/Servlet (Parte 3) Arranjos (Arrays)

No mais preciso chamar a ateno para isto, no ?

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

Introduo ao JSP/Servlet (Parte 3) Operadores

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

Introduo ao JSP/Servlet (Parte 3) Operadores Relacionais e Lgicos

ELFS, 2005

251

Introduo ao JSP/Servlet (Parte 3)


aula07_07.jsp <%@page language="Java" import="java.util.Calendar" %> <html> <head> Sem a diretiva <title> Instruo if / else</title> import="java.util.Calendar", M a declarao de dia ... <h2>Instruo if / else</h2> <% int dia = Calendar.getInstance().get(Calendar.DAY_OF_WEEK); if (dia == 1 || dia == 7) out.println("Parabns, final de semana.<br>"); if (dia == 1) ... teria que ser out.println("Hoje domingo.<br>"); feita como: else if (dia == 2) out.println("Hoje segunda-feira.<br>"); else if (dia == 3) out.println("Hoje tera-feira.<br>"); else if (dia == 4) out.println("Hoje quarta-feira.<br>"); else if (dia == 5) out.println("Hoje quinta-feira.<br>"); else if (dia == 6) out.println("Hoje sexta-feira.<br>"); else out.println("Hoje sbado.<br>"); %> int dia = java.util.Calendar.getInstance().get(java.util.Calendar.DAY_OF_WEEK); ELFS, 2005

Estruturas de Controle: Instruo if / else

252

Introduo ao JSP/Servlet (Parte 3) Estruturas de Controle: Instruo if / else

ELFS, 2005

253

Introduo ao JSP/Servlet (Parte 3) Estruturas de Controle: Instruo switch


aula07_08.jsp <%@page language="Java" import="java.util.Calendar" %> <html> <head> A expresso avaliada pelo switch <title>Instruo switch</title> deve ser de um dos tipos: byte, M char, short ou int. <h2>Instruo switch</h2> <% int dia = Calendar.getInstance().get(Calendar.DAY_OF_WEEK); switch(dia) { case 1: out.println("Hoje domingo."); break; case 2: out.println("Hoje segunda-feira."); break; case 3: out.println("Hoje tera-feira."); break; case 4: out.println("Hoje quarta-feira."); break; case 5: out.println("Hoje quinta-feira."); break; case 6: out.println("Hoje sexta-feira."); break; default: out.println("Hoje sbado."); } %>
254

ELFS, 2005

Introduo ao JSP/Servlet (Parte 3) Estruturas de Controle: Instruo switch

ELFS, 2005

255

Introduo ao JSP/Servlet (Parte 3) Estruturas de Repetio: Instruo for


aula07_09.jsp <html> <head> <title>Instruo for</title> M <h2>Instruo for</h2> <% double notas[] = {8.7, 3.5, 6.7, 7.8, 2.9, 9.8}; double soma = 0, media; for(int indice=0; indice < notas.length; indice++) { out.println("A nota " + indice + " : " + notas[indice] + " | "); soma += notas[indice]; if(indice == 2) out.println("<br>"); if(notas[indice] == 0) { out.println("Professor, no d zero aos alunos..."); break; Em qualquer estrutura de repetio o comando break } pode ser utilizado para interromper a repetio. } media = soma/notas.length; out.println("<br> A mdia das notas : " + media); %> M
ELFS, 2005 256

Introduo ao JSP/Servlet (Parte 3) Estruturas de Repetio: Instruo for

ELFS, 2005

257

Introduo ao JSP/Servlet (Parte 3) Estruturas de Repetio: Instruo while


aula07_10.jsp <html> <head> <title>Instruo while</title> M <h2>Instruo while</h2> <% double notas[] = {8.7, 3.5, 6.7, 7.8, 2.9, 9.8}; int indice = notas.length; double soma = 0, media; while(indice > 0) { out.println("A nota " + (indice-1) + " : " + notas[indice-1] + " | "); soma += notas[indice-1]; if (indice == 4) out.println("<br>"); indice--; } media = soma/notas.length; out.println("<br> A mdia das notas : " + media); %> M
ELFS, 2005 258

Introduo ao JSP/Servlet (Parte 3) Estruturas de Repetio: Instruo while

ELFS, 2005

259

Introduo ao JSP/Servlet (Parte 3) Estruturas de Repetio: Instruo do ... while


aula07_11.jsp <html> <head> <title>Instruo do ... while</title> M <h2>Instruo do ... while</h2> <% double notas[] = {8.7, 3.5, 6.7, 7.8, 2.9, 9.8}; int indice = 0; double soma = 0, media; do { out.println("A nota " + (indice) + " : " + notas[indice] + " | "); soma += notas[indice]; if (indice == 2) out.println("<br>"); indice++; } while (indice < notas.length); media = soma/notas.length; out.println("<br> A mdia das notas : " + media); %> M
ELFS, 2005 260

Introduo ao JSP/Servlet (Parte 3) Estruturas de Repetio: Instruo do ... while

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

Introduo ao JSP/Servlet (Parte 3) Mtodos


M <h2>Criando e Usando Mtodos</h2> <%! double media(double soma, int qtd) { return soma/qtd; } double soma(double notas[]) { double soma = 0; for(int indice=0; indice < notas.length; indice++) { soma += notas[indice]; } return soma; } %> <% double notas[] = {8.7, 3.5, 6.7, 7.8, 2.9, 9.8}; double soma = soma(notas); out.println("A soma das notas : " + soma); out.println("<br>A mdia das notas : " + media(soma, 6)); %> M
ELFS, 2005 263

aula07_12.jsp

Introduo ao JSP/Servlet (Parte 3) Mtodos

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

Introduo ao JSP/Servlet (Parte 3) Passagem de Parmetros aos Mtodos


aula07_13.jsp M <h2>Passagem de Parmetros aos Mtodos</h2> Tipo do parmetro <%! double media(double notas[], javax.servlet.jsp.JspWriter out) throws java.io.IOException { A utilizao do objeto out torna necessria a double soma = 0, media; declarao do tratamento de exceo. for (int indice=0; indice<notas.length; indice++) { out.println("A nota " + indice + " : " + notas[indice] + " | "); soma += notas[indice]; if (indice == 2) out.println("<br>"); } return soma/notas.length; } %> <% double notas[] = {8.7, 3.5, 6.7, 7.8, 2.9, 9.8}; double media; media = media(notas, out); out.println("<br>A mdia das notas : " + media); %> M
ELFS, 2005 266

Introduo ao JSP/Servlet (Parte 3) Passagem de Parmetros aos Mtodos

ELFS, 2005

267

Introduo ao JSP/Servlet (Parte 3) Alternativa Passagem de Parmetros


aula07_14.jsp M <h2>Alternativa Passagem de Parmetros</h2> <%! Um objeto da classe JspWriter declarado... javax.servlet.jsp.JspWriter sai; double media(double notas[]) throws java.io.IOException { double soma = 0, media; for (int indice=0; indice < notas.length; indice++) { sai.println("A nota " + indice + " : " + notas[indice] + " | "); soma += notas[indice]; if (indice == 2) sai.println("<br>"); } return soma/notas.length; } %> <% double notas[] = {8.7, 3.5, 6.7, 7.8, 2.9, 9.8}; double media; sai = out; ... e inicializado no scriptlet. media = media(notas); out.println("<br>A mdia das notas : " + media); %> M
ELFS, 2005 268

Introduo ao JSP/Servlet (Parte 3) Alternativa Passagem de Parmetros

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

Introduo ao JSP/Servlet (Parte 3) Mtodos JSP Internos


<h2>Mtodos JSP Internos</h2> <%! double notas[] = new double[6]; double soma, media; public void jspInit() { soma = 0; notas[0] = 8.7; notas[1] = 3.5; notas[2] = 6.7; notas[3] = 7.8; notas[4] = 2.9; notas[5] = 9.8; } public void jspDestroy() { notas = null; } %> <% for (int indice=0; indice < notas.length; indice++) { out.println("A nota " + indice + " : " + notas[indice] + " | "); soma += notas[indice]; if (indice == 2) out.println("<br>"); } media = soma/notas.length; out.println("<br>A mdia das notas : " + media); %>
ELFS, 2005 271

aula07_15.jsp

Introduo ao JSP/Servlet (Parte 3) Mtodos JSP Internos

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

Você também pode gostar