JSP.SERVLET0011

25
sessão Iisteners Os Listetters relaeiottados à sessão Sim, esta é uma cópia quase fiel da tabela que vimos duas páginas atrás, então não vale olhar. Tente imaginar estes listeners e anote seus melhores palpites. Você pode esperar por no mínimo duas, ou até quatro perguntas sobre os listeners da sessão na prova. Use a memória e o bom senso para preencher a tabela. Cenário A interface Iistener/métodos Tipo do evento Geralmente implementado por Você quer saber D Uma classe tributo D Alguma outra lasse DUma classe tributo D Alguma outra lasse D Uma classe tributo sessão. D Alguma outra classe DUma classe tributo D Alguma outra essão. classe 'OJuaA:>! op!qo ap sod!J S!OP svuadv maJs!xa :g;)!<I 266 capl'tulo 6

Transcript of JSP.SERVLET0011

Page 1: JSP.SERVLET0011

5/8/2018 JSP.SERVLET0011 - slidepdf.com

http://slidepdf.com/reader/full/jspservlet0011 1/25

 

sessão Iisteners

Os Listetters relaeiottados à sessão

Sim, esta é uma cópia quase fiel da tabela que vimos duas

páginas atrás, então não vale olhar. Tente imaginar estes listeners

e anote seus melhores palpites. Você pode esperar por no mínimo

duas, ou até quatro perguntas sobre os listeners da sessão naprova. Use a memória e o bom senso para preencher a tabela.

Cenário A interface Iistener/métodos Tipo do evento Geralmente

implementado por

Você quer saber D Uma classetributoD Alguma outralasse

DUma classetributo

D Alguma outralasse

D Uma classetributo

sessão.

D Alguma outra

classe

DUma classetributo

D Alguma outraessão.

classe

'OJuaA:>!op!qo ap sod!J S!OP svuadv maJs!xa :g;)!<I

266 capl'tulo 6

Page 2: JSP.SERVLET0011

5/8/2018 JSP.SERVLET0011 - slidepdf.com

http://slidepdf.com/reader/full/jspservlet0011 2/25

 

'Pausa pata9 caté

1Dado:

10. pub1ic class MyServlet extends HttpServlet {

11. public void doGet(HttpServletRequest request,

HttpServletResponse response)

12.

13.

Ii14.

Ii15.

Ii16.

Ii17. 18.

throws IOException, ServletException

request.getSession() .setAttribute(~key", ~value");

request.getHttpSession() .setAttribute(~key", ~value");

«HttpSession)request.getSession(» .setAttribute(~key", ~value");

«HttpSession)request.getHttpSession(» .setAttribute(~key", ~value");

Qual(is) linha(s) poderia(m) ser desanotada(s) sem causar erros de compilação ou runtime?(Escolha todas as que se aplicam.)

DA. Somente a linha 13.

DB. Somente a linha 14.

Dc. Somente a linha 15.

DD. Somente a linha 16.

DE. Linhas 13 ou 15.

DF. Linhas 14 ou 16.

2 Se um cliente NÃO aceita cookies, qual mecanismo de gerenciamento da sessão o web containerpode utilizar? (Escolha uma.)

DA. Cookies, mas NÃO reescrita de URL.

OB. Reescrita de URL, mas NÃO cookies.

Dc. Tanto os cookies, como a reescrita de URL podem ser usados.

DD. Nem os cookies, nem a reescrita de URL podem ser usados.

DE. OS cookies e a reescrita de URL devem ser usados juntos.

você está aquj••.

267

Page 3: JSP.SERVLET0011

5/8/2018 JSP.SERVLET0011 - slidepdf.com

http://slidepdf.com/reader/full/jspservlet0011 3/25

 

teste preparatório

3 Quais declarações sobre os objetos HttpSession são verdadeiras? (Escolha todas as que seaplicam.)

DA. Uma sessão cujo tempo de timeout foi estipulado em -1 nunca expirará.

DB. Uma sessão tomar-se-á inválida assim que o usuário fechar todas as janelas do seu browser.

De. Uma sessão tomar-se-á inválida depois do tempo de timeout definido pelo servlet container.

DD. Uma sessão pode ser explicitamente invalidada chamando o HttpSession.invalidateSession().

4 Quais das segúintes opções NÃO representam tipos de eventos listener na API J2EE 1.4? (Escolhatodas as que se aplicam.)

[JA.HttpsessiOnEvent

DB. ServletRequestEvent

De. HttpSessionBindingEvent

DD.HttpsessiOnAttributeEvent

C}E.servletContextAttributeEvent

5 Quais das seguintes declarações sobre o monitoramento da sessão são verdadeiras? (Escolha todas

as que se aplicam.)C}A. A reescrita de URL pode ser usada por um servidor como base para o monitoramento de

sessões.

C}E. O SSL tem um mecanismo nativo, que um container servlet pode usar para obter dados usadospara definir uma sessão.

De. Ao usar cookies para acompanhar as sessões, não há restrições para o nome do cookie querealiza o acompanhamento da sessão.

C}D. Ao usar cookies para acompanhar as sessões, o cookie usado para acompanhar a sessão devereceber o nome de JSESSIONID.

[JE. Se o browser de um usuário está desabilitado para receber cookies, o container pode decidirusar um objeto javax. servlet. http.CookielessHttpSession para monitorar a sessão dousuário.

268 capítulo 6

Page 4: JSP.SERVLET0011

5/8/2018 JSP.SERVLET0011 - slidepdf.com

http://slidepdf.com/reader/full/jspservlet0011 4/25

 

gerenciamento da sessão

6 Dado:

1. import javax.servlet.http.*;

2. public class MySessionListener

implements HttpSessionListener

3. public void sessionCreated() {

4. System.out.println(~Session Created");

5.

6. public void sessionDestroyed() {

7. System.out.println(~Session Destroyed");

8.

9.

o que há de errado com esta classe? (Escolha todas as que se aplicam.)

DA. A assinatura do método na linha 3 está INCORRETA.

DB. A assinatura do método na linha 6 está INCORRETA.

De. A declaração import não importará a interface HttpSessionListener.

DD. O sessionCreated e o sessionDestroyed NÃO são os únicos métodos definidos pelainterface HttpSessionListener.

1Quais declarações sobre os atributos da sessão são verdadeiras? (Escolha todas as que se aplicam.)

DA. O tipo de retomo do HttpSession.getAttribute (String) é Object.

DB. O tipo de retomo do HttpSession.getAttribute (String) é String.

De. OS atributos associados a uma sessão ficam disponíveis para qualquer servlet que faça partedo mesmo Serv1.etContext, e que trate uma solicitação identificada como sendo parte da mesmasessão.

DD. Chamar o setAttribute (~keyA", ~va1.ueB")em um HttpSession que já possua um valorpara a chave keyAcausará uma exceção.

DE. Chamar o setAttribute (~keyA", ~valueB") em um HttpSession que já possua um valorpara a chave keyAfará com que o valor anterior para este atributo seja substituído pela StringvalueB.

você está •• 269

Page 5: JSP.SERVLET0011

5/8/2018 JSP.SERVLET0011 - slidepdf.com

http://slidepdf.com/reader/full/jspservlet0011 5/25

 

teste preparatório

8 Quais interfaces definemummétodo getSession () ? (Escolha todas as que se aplicam.)

C]i\.ServletRequest

C]B. ServletResponse

C]C. HttpServletRequest

C]D. HttpServletResponse

9 Seja um objeto sessão s e o código:

s.setAttribute{~key", value);

Quais dos listeners podem ser notificados? (Escolha um.)

Di\. i\penas o HttpSessionListener.

C]B. i\penas o HttpSessionBindingListener.

C]C. i\penas o HttpSessionAttributeListener.

C]D. O HttpSessionListener e o HttpSessionBindingListener.

C]E. O HttpSessionListener e o HttpSessionAttributeListener.

C]E O HttpSessionBindingListener e o HttpSessiOnAttributeListener.

00. Todos os três.

10 Considerando que req é um HttpServletRequest, quais das opções criam uma sessão, caso não

exista nenhuma? (Escolha todas as que se aplicam.)

Di\.req.getsession{) ;

C]B. req.getSession{true);

C]C. req. getSession (false) ;

C]D. req. createSession () ;

DE. req.getNewSession{);

C]F.req.createSession{true);

00. req. createSession (false) ;

270 capítulo 6

Page 6: JSP.SERVLET0011

5/8/2018 JSP.SERVLET0011 - slidepdf.com

http://slidepdf.com/reader/full/jspservlet0011 6/25

 

gerencíamento da sessão

11 Dado o objeto sessão s com dois atributos chamados myAttrl emyAttr2, quais alternativas

removerão ambos os atributos desta sessão? (Escolha todas as que se aplicam.)

CJi\. s.removeAllValues();

[JB. s.removeAttribute(~myAttrl");s.removeAttribute(~myAttr2");

[Je. s. removeAllAttributes () ;

[JD. s. getAttribute (~myAttrl", UNBIND);. getAttribute (~myAttr2", UNBIND);

[JE. s. getAttributeNames (UNBIND)

12 Quais das seguintes declarações sobre os objetos HttpSession em um ambiente distribuído são

verdadeiras? (Escolha todas as que se aplicam.)

CJA Quando uma sessão é movida de uma NM para outra, quaisquer atributos armazenados na

sessão serão perdidos.

DE. Quando uma sessão é movida de uma NM para outra, os objetos

HttpSessionBindingListener devidamente registrados serão notificados.

De. Quando uma sessão é movida de uma NM para outra, os objetos

HttpSessionActivationListener devidamente registrados serão notificados.

DD. Quando uma sessão é movida de uma NM para outra, os valores dos atributos que

implementam j ava. io. Serializable serão transferidos para a nova NM.

13 Quaisdeclarações sobre o timeout das sessões são verdadeiras? (Escolha todas as que se

aplicam.)

DA i\s declarações de timeout da sessão que foram criadas no DD aceitam o tempo em segundos.

DE. i\s declarações de timeout da sessão que foram criadas no DD aceitam o tempo em minutos.

De. i\s declarações de timeout da sessão que foram criadas programaticamente aceitam o tempo

em segundos.

DD. i\s declarações de timeout da sessão que foram criadas programaticamente aceitam o tempoem minutos.

CJE. i\s declarações de timeout da sessão que foram criadas programaticamente aceitam o tempo

em minutos ou segundos.

você está

Page 7: JSP.SERVLET0011

5/8/2018 JSP.SERVLET0011 - slidepdf.com

http://slidepdf.com/reader/full/jspservlet0011 7/25

 

teste preparatório

14- Escolha o trecho do código servlet que ativaria a partir de uma solicitação o valor de um cookie

denominado "ORA_UID"? (Escolha todas as que se aplicam.)

DA. String value = request.getCookie("ORA_ UID");

DB. String value = request.getHeader("ORA_ UID");

Dc. javax.servlet.http.Cookie[] cookies =

request.getCookies();

String cName = null;

String value = null;

if (cookies !~ null) {

for (int i = O; i < cookies.length; i++) {

cName = cookies[i] .getName();

if (cName != null &&

cName.equalsIgnoreCase(~ORA_UID")){

value = cookies[i] .getValue();

}

DD. javax.servlet.http.Cookie[] cookies =

request.getCookiesO;

if (cookies.length > O) {

String value = cookies[O] .getValue();

15 Qual(is) método(s) pode(m) ser usado(s) para pedir ao contêiner para notificar seu aplicativosempre que uma sessão estiver com o tempo esgotado? (Escolha tudo que se aplica.)

DA. HttpSessionlistener.sessionDestroyed;

DB. HttpSessionBindingListener.valueBound;

Dc. HttpSessionBindingListener.valueUnbound;

DD. HttpSessionBindingEvent.sessionDestroyed;

DE. HttpSessionAttributeListener.attributeRemoved;

DF. HttpSessionActivationListener.sessionWillPassivate;

272 6

Page 8: JSP.SERVLET0011

5/8/2018 JSP.SERVLET0011 - slidepdf.com

http://slidepdf.com/reader/full/jspservlet0011 8/25

 

gerenciamento da sessão

16 Como você usaria o objeto HttpServ1.etResponse em um servlet para adicionar um cookie no

cliente? (Escolha todas as que se aplicam.)

DA. <context-param>

<param-name>myCookie</param-name>

<param-va1ue>cookieVa1ue</param-va1ue>

</context-param>

DB. response.addCookie("myCookie"," cookie Value");

Dc. javax.servlet.http.Cookie newCook =

new javax.serv1et.http.Cookie(~myCookieH,HcookieValueH);

// ...set other Cookie properties

response.addCookie(newCook);

DD. javax.servlet.http.Cookie[] cookies = request.getCookiesO;

String cname ~ nu11;

if (cookies != nu11) {

for (int i = O; i < cookies.1ength; i++) {

cName ~ cookies[i] .getName();

if (cName !~ nu11 &&

cName.equa1sIgnoreCase(~myCookieH»){

out.print1n( cName + ~: ~ + cookies[i] .getVa1ue();

11Dado:

13. pub1ic c1ass Serv1etX extends HttpServ1et {

14. pub1ic void doGet (HttpServ1etRequest req, HttpServletResponse resp)

15. throws IOException, Serv1etException {

16. HttpSession sess = new HttpSession (req);

17. sess.setAttribute(~attr1H,

18. sess.invalidate();

19. String s = sess.getAttribute(~attr1H);

20.

21. }

Qual é o resultado? (Escolha tudo que se aplica.)

DA. A compilação falha

DB. O valor de s é null

De. O valor de s é "value"

DD. Uma IOException é enviada

DE. Uma ServletException é enviada

DF. Uma IllegalStateException é enviada

você está ~ 273

Page 9: JSP.SERVLET0011

5/8/2018 JSP.SERVLET0011 - slidepdf.com

http://slidepdf.com/reader/full/jspservlet0011 9/25

 

respostas do teste

1Dado:

10. public class MyServlet extends HttpServlet {

11. public void doGet(HttpServletRequest request,

HttpServletResponse response)

12.

13.

Ii14.

Ii15.

Ii16.

Ii17. 18.

throws IOException, ServletException

request.getSession() .setAttribute(~key", ~value");

request.getHttpSession() .setAttribute(~key", ~value");

«HttpSession)request.getSession(» .setAttribute(~key", ~value");

«HttpSession)request.getHttpSession(» .setAttribute(~key", ~value");

Qual(is) linha(s) poderia(m) ser desanotada(s) sem causar erros de compilação ou runtime?(Escolha todas as que se aplicam.)

DA. Somente a linha 13.

DB. Somente a linha 14.

Dc. Somente a linha 15.

DD. Somente a linha 16.

~ E. Linhas 13 ou 15.

DF. Linhas 14 ou 16.

Z Se um cliente NÃO aceita cookies, qual mecanismo de gerenciamento da sessão o web containerpode utilizar? (Escolha uma.)

DA. Cookies, mas NÃO reescrita de URL. (.5ervle.f-v2.'~f~' S7

~ B. Reescrita de URL, mas NÃO cookies.

Dc. Tanto os cookies, como a reescrita de URL podem ser usados.

OD. Nem os cookies, nem a reescrita de URL podem ser usados. - A- /jfJ';~ es.f-: CÓl'l"fl.f-fJ.;

DE. OS cookies e a reescrita de URL devem ser usados juntos. f/j~l~e I-JA-o POJ)f.M.~?(/;fJ.;::tl_ff;S) 4\{'I.$4 l"eeSCI'IT"IJ. ",e "" ••.•AJA-o tiepenJe tie 3(/f! eles es.f-tja4\f"dtlt.f-a.tiós.

274 capítulo 6

Page 10: JSP.SERVLET0011

5/8/2018 JSP.SERVLET0011 - slidepdf.com

http://slidepdf.com/reader/full/jspservlet0011 10/25

 

gerenciamento da sessão

3 Quais declarações sobre os objetos HttpSession são verdadeiras? (Escolha todas as que se

aplicam.) (Servle-l-v2.~p~. S"9)

Iilr A. Uma sessão cujo tempo de timeout foi estipulado em -1 nunca expirará.

OB. Uma sessão tomar-se-á inválida assim que o usuário fechar todas as janelas do seu browser.

~ C. Uma sessão tomar-se-á inválida depois do tempo de timeout definido pelo servlet container.

OD. Uma sessão pode ser explicitamente invalidada chamando o HttpSession.invalidateSession().

- A- DfSãó!J es-l-: tÍ'/cÓN'e-l-~plu'ave <l ",Ht:uill avedevert). ser I/stldó ct.a",a-se tÍ'/valtda-hO.

- A- ófSãó 5 es-l-:eXis-h: v", stPial

de 3ve ti sessãó acabóv.

4 Quais das seguintes opções NÃO representam tipos de eventos listener na API J2EE IA? (Escolhatodas as que se aplicam.)

OA. HttpSessionEvent

OB. ServletRequestEvent

OCo HttpSessionBindingEvent

IilrD.HttpSeSSiOnAttributeEventOE.servletContextAttributeEvent

5 Quais das seguintes declarações sobre o monitoramento da sessão são verdadeiras? (Escolha todas

as que se aplicam.) <'Servle+-IilrA. A reescrita de URL pode ser usada por um servidor como base para o monitoramento de

sessões.

Iilr B. O SSL tem um mecanismo nativo, que um container servlet pode usar para obter dados usadospara definir uma sessão.

Oe. Ao usar cook:ies para acompanhar as sessões, não há restrições para o nome do cookie querealiza o acompanhamento da sessão.

Iilr D. Ao usar cook:ies para acompanhar as sessões, o cookie usado para acompanhar a sessão devereceber o nome de JSESSIONID.

DE. Se o browser de um usuário está desabilitado para receber cook:ies, o container pode decidirusar um objeto javax. servlet. http.CookielessHttpSession para monitorar a sessão dousuário.

- A- ~PSãó í es-l-: tÍ'/c6N'e-l-tl)fór3ve '1ãóexls-!-e es-l-a c/4S5e.

você está IP 275

Page 11: JSP.SERVLET0011

5/8/2018 JSP.SERVLET0011 - slidepdf.com

http://slidepdf.com/reader/full/jspservlet0011 11/25

 

respostas do teste

6 Dado:

8.

9.

1. import javax.servlet.http.*;

2. public class MySessionListener

implements HttpSessionListener

3. public void sessionCreated() {

4. System.out.println(~Session Created");

5.

6. public void sessionDestroyed() {

7. System.out.println(~Session Destroyed");

- fJrs "pí.';es fJr e 8 es-l-';" c""'t'e-l-4sJ f"t'3ve

eshs •.•é-l-'Jfl"s tievel'l"Q..•hl' ti•.•p4t'M..e+l'''

HHpSes sl(JIfLve.rl-.

O que há de errado com esta classe? (Escolha todas as que se aplicam.)

~ A. A assinatura do método na linha 3 está INCORRETA. - fJr "P'j';t)C es-l-: ~Ptc4N'e-l-4J

~ B. A assinatura do método na linha 6 está INCORRETA. pt:II"3ve" lishlfel' e ofel,PtIi;f"IfD

p4c6h i"'f>"1'-I-4ti6.

Dc. A declaração import não importará a interface HttpSessionListener.

DD. O sessionCreated e o sessionDestroyed NÃO são os únicos métodos definidos pelainterface HttpSessionListener.

- fJr lJp,';6!J es-l-: IPtc(Jl'l'e-l-~ptJI'11'eeshs s'; •• tJS tids tJ..,ic/JS ""é=l-tJtitJs

Ifes-l-a ,Pt-h,..{ace.

1Quais declarações sobre os atributos da sessão são verdadeiras? (Escolha todas as que se aplicam.)

(Sel'vle-l- 112..~ p~. S-9)~ A. O tipo de retomo do HttpSession.getAttribute (String) é Object.

DB. O tipo de retomo do HttpSession.getAttribute (String) é String.

~ C. Os atributos associados a uma sessão ficam disponíveis para qualquer servlet que faça partedo mesmo ServletContext, e que trate uma solicitação identificada como sendo parte da mesmasessão.

OD. Chamar o setAttribute (~keyA", ~valueB") em um HttpSession que já possua um valorpara a chave keyAcausará uma exceção.

~ E. Chamar o setAttribute (~keyA", ~valueB") em um HttpSession que já possua um valorpara a chave keyAfará com que o valor anterior para este atributo seja substituído pela String

valueB.

276 capítulo 6

- fJr tJP'j';tJ8es-l-~ IPtc61'1"e-l-t!..J61'{pe tJ

-I-ip"tie 1"e+"1"If6e 0!(jec+.- fJr 6f,';" Õ es-l-: IPtC61"1"e+~fóI"3{jei!f-l-a

d,a_tio. apel1f),Ssvbs-l-,.-I-v""'f),()Vf),I",..aexishl1h.

Page 12: JSP.SERVLET0011

5/8/2018 JSP.SERVLET0011 - slidepdf.com

http://slidepdf.com/reader/full/jspservlet0011 12/25

 

gerencíamento da sessão

8 Quais interfaces definemummétodo getSession{)? (Escolha todas as que se aplicam.)

eli\. ServletRequest

elB. ServletResponse

~C.HttpServletRequest

elD. HttpServletResponse

9 Sejaum objeto sessão 5 e o código:

s.setAttribute(~key", value);

Quais dos listeners podem ser notificados? (Escolha um.)

eli\. i\penas o HttpSessionListener.

elB. i\penas o HttpSessionBindingListener.

elC. i\penas o HttpSessionAttributeListener.

elD. O HttpSessionListener e o HttpSessionBindingListener.

elE. O HttpSessionListener e o HttpSessionAttributeListener.

~ F.O HttpSessionBindingListener e o HttpSessionAttributeListener.

DG. Todos os três.

- Pr 4plã4 Fé li C41'1'rl-fl.)p4t''lll'!. VIYI,H#p5es Si61'1t;r#I'' '!w/~L''s+el'1l!.I ' I!.114+'-llCfl.d<lse""I'e 3";

VIYIa.f-l't!IlI-l-<I I!.aCl"escel'l-l-ad<l) e <I <lfje-l-tl valtll" .f-alYlIJelYtsel"aI1tl+'-llcfl.d<l se ele iJty>lelYlelrÍ-fl.l' VlYtff#p5essl41'18t"ldtI'15L,"sI-e",el".

10 Considerando que req é um HttpServletRequest, quais das opções criam uma sessão, caso não

exista nenhuma? (Escolha todas as que se aplicam.)

~ i\. req.getSession{);

~B. req. getSession (true) ;

elC. req.getSession(false);

elD. req. crea teSession () ;

elE. req.getNewSession();

elE req. createSession (true) ;

elG. req. createSession (false) ;

- Prs tlpjces Pr e 8 cri"tJ.I'';<I"IYtfl."'''lia Cfl.Stl

l'l6.tl ex'"s+-fI. "IYta. O5rl-5essftll'l(IfJ.lstl) I'e.f-"I'I'IfJ. tllYIl'es"l-I-ad6 "Ivl" se fi.S(,SS';<l '"146

você está li> 277

Page 13: JSP.SERVLET0011

5/8/2018 JSP.SERVLET0011 - slidepdf.com

http://slidepdf.com/reader/full/jspservlet0011 13/25

 

- /} cp{õ,c 8 es+: cCI'I'e+a. e>

reIMclleA-#rl/JlI+eO é a tfJ'JlcafUIMtI. de

reIMCllerIMCSVIMa+l'lltll+C de VIMctje+ó sess46;

e ele reIMclle VIMa+l'lltv+c de cada lIe;.

res.lJostas do teste

11 Dado o objeto sessão s com dois atributos chamados myAttrl e myAttr2, quais alternativas

removerão ambos os atributos desta sessão? (Escolha todas as que se aplicam.)

DA. s. removeAllValues () ;

~B. s.removeAttribute(~myAttrl");s.removeAttribute(~myAttr2");

De. s. removeAllAttributes () ;

DD. s.getAttribute(~myAttrl", UNBIND)s.getAttribute(~myAttr2", UNBIND);

DE. s. getAttributeNames (UNBIND)

12 Quais das seguintes declarações sobre os objetos HttpSession em um ambiente distribuído são

verdadeiras? (Escolha todas as que se aplicam.) (5ervle+v2..~pt.s. (,0)DA. Quando uma sessão é movida de uma NM para outra, quaisquer atributos armazenados na

sessão serão perdidos.

DE. Quando uma sessão é movida de uma NM para outra, os objetos

HttpSessionBindingListener devidamente registrados serão notificados.

~ C. Quando uma sessão é movida de uma NM para outra, os objetos

HttpSessionActivationListener devidamente registrados serão notificados.

~ D. Quando uma sessão é movida de uma NM para outra, os valores dos atributos que

implementam java. io. Serializable serão transferidos para a nova NM.

13 Quais declarações sobre o timeout das sessões são verdadeiras? (Escolha todas as que se

aplicam.) (A-fI)DA. As declarações de timeout da sessão que foram criadas no DD aceitam o tempo em segundos.

~ E. As declarações de timeout da sessão que foram criadas no DD aceitam o tempo em minutos.

~c. As declarações de timeout da sessão que foram criadas programaticamente aceitam o tempo

em segundos.

DD. As declarações de timeout da sessão que foram criadas programaticamente aceitam o tempoem minutos.

DE. As declarações de timeout da sessão que foram criadas programaticamente aceitamo tempoem minutos ou segundos.

-lJólJlJ; se IISfJ,t'IMCSeleIMe'l+c<ses SlDJ'J-+,'w,ecl.I+:>~ f-cJew"t;sespect/lcal' cs IMi'J'1V+cs.e flSal'IMóS{; se+MlJ.xI'Iac~·veI'I+ervtl.IO rJó

ft#pSesS'i'c"l; ape"lfJs6S se51.1"1rJós6r1eIMseI' especr-li'caJ6S'.

278 capitulo 6

Page 14: JSP.SERVLET0011

5/8/2018 JSP.SERVLET0011 - slidepdf.com

http://slidepdf.com/reader/full/jspservlet0011 14/25

 

gerenciamento da sessão

-If (Jp{á(JIf f"efef'e- S't: 4 tllfI lfIé.f(JtJ(J

Ôllt: "â.(J t:xtsh.

- If (JPSâ.(JC f"ect:be 1I1f1 41'1'" C(J"kte

lIsa"tJ(J (J reÔlles.f'5~óók"e$()J etJepói'$ verlflca a exts+eJfci'fJ; tJe IIIf1 cóó/:te,de "(Jlfle espec,ftc(J.

-If ópSâ." b 1J11.44pf!114$ tl p"tlflt:if"tlCó"l:te Jfó tAl'f"4j.

request.getCookies();

String eName ~ null;

String value = null;

if (eookies != null) {

for (int i = O; i < eookies.length; i++){

eName = eookies[i].getName();

if (cName != null &&

eName.equalsIgnoreCase(~ORA_UID"»){

value ~ cookies[i].getValue();

14 Escolha o trecho do código servlet que ativaria a partir de uma solicitação o valor de um cookie

denominado "ORA_ UID"? (Escolha todas as que se aplicam.)

DA. String value = request.getCookie("ORA _illD");

DB. String value = request.getHeader("ORA _UID");

li2' c. javax.servlet.http.Cookie[] cookies =

}

DD. javax.servlet.http.Cookie[] cookies =

request. getCookiesO;if (eookies.length > O) {

String value ~ eookies[O] .getValue();

15 Qual(is) método(s) pode(m) ser usado(s) para pedir ao contêiner para notificar seu aplicativosempre que uma sessão estiver com o tempo esgotado? (Escolha tudo que se aplica.)

li2' A. HttpSessionlistener.sessionDestroyed;

DB. HttpSessionBindingListener.valueBound;

li2' C. HttpSessionBindingListener.valueUnbound;

DD. HttpSessionBindingEvent.sessionDestroyed;

DE. HttpSessionAttributeListener.attributeRemoved;

DF. HttpSessionActivationListener.sessionWillPassivate;

você está 11> 279

Page 15: JSP.SERVLET0011

5/8/2018 JSP.SERVLET0011 - slidepdf.com

http://slidepdf.com/reader/full/jspservlet0011 15/25

 

reSiPos:tas do teste

- jf Dffã ••$ es+~ il'/c{>l"l"e+a,;ffJf'3l1e (>

""fj-lNJIJ ~JdC<)fJJ:i'eO ehlpl'ej" li"" IJtje-l- ••

C6fJtte) e I'/ã•• :5+1"I"1'I5s, ••

- /} "ffã6 b es+: '''''CIJI''I'e+a,;p"l"?Jve

eltJ. ""6S+I'~ V"" servle+ (J;·/-lV{J;I7J6)Cf'i'o.I1JIJ11""cÕ6/i:ie.

<param-name>myCookie</param-name>

<param-value>cookieValue</param-value>

</context-param>

OB. response.addCookie("myCookie"," cookie Value");

~ C. javax.servlet.http.Cookie newCook =

16 Como você usaria o objeto HttpServletResponse em um servlet para adicionar um cookie no

cliente? (Escolha todas as que se aplicam.)

DA. <context-param>

new javax.servlet.http.Cookie(~myCookie","cookieValue");

// ...set other Cookie properties

response.addCookie(newCook);

OD. javax.servlet.http.Cookie[] cookies = request.getCookiesO;

String cname = null;

if (cookies !~ null) {

for (int i = O; i < cookies.length; i++) (

cName = cookies[i] .getName();

if (cName != null &&

cName.equalsIgnoreCase(~myCookie")) (

out.println( eName + ~: ~ + cookies[i] .getValue();

11Dado:

resp)public elass ServletX extends HttpServlet (publie void doGet (HttpServletRequest req, HttpServletResponse

throws IOException, ServletException (

HttpSession sess = new HttpSession (req);

sess.setAttribute(~attrl",

sess.invalidate();

String s ~ sess.getAttribute(~attrl");

13.

14.

15.

16.

17 .

18.

19.

20.

21. )

Qual é o resultado? (Escolha tudo que se aplica.)

~ A. A compilação falha _ {) ãD 1Jr:a ;,.",t.o.I' : ,,,,,c/)f'reh.. Võcê <IJSlltl"e 11""

O. í"~ . I L #-/-+p5eSSi{»IIlSfA'7JIJ re'!..B. O valor de s e null "tie.,-/)~lIe ihlp e""e'7ra , fi

lXe+5esstIJJ'I( ).De. O valor de s é "value" "

OU. Uma IOException é enviada

DE. Uma ServletException é enviada

DF. Uma IllegalStateException é enviada

280 capitulo 6

Page 16: JSP.SERVLET0011

5/8/2018 JSP.SERVLET0011 - slidepdf.com

http://slidepdf.com/reader/full/jspservlet0011 16/25

 

t USand9 9JSP

Sendo umJSP

Um JSP torna-se um servlet. Um servlet que você não cria.

O Container olha o seu JSP, o traduz em código-fonte Java e o

compila em uma classe servlet de Java completa. Porém, você tem

que saber o que acontece quando o código que você escreveu em

JSP se transforma em código Java. Você pode escrever códigos

Java em JSP, mas será que você deveria? E se você não escrever

o código Java, o que você escreverá? Como ele faz a tradução

para o código Java? Neste capítulo, veremos seis diferentes tipos

de elementos JSP - cada um com seu próprio propósito e, sim,

sintaxe única. Você aprenderá como, por que e o que escrever

no seu JSP. Talvez o mais importante, você aprenderá o que não

escrever no seu JSP.

este é um novo ca{.lítu,rO'" 281

Page 17: JSP.SERVLET0011

5/8/2018 JSP.SERVLET0011 - slidepdf.com

http://slidepdf.com/reader/full/jspservlet0011 17/25

 

objetivos do exame oficial da Sun

o Modelo de Tecnologia do JSP

6.1 Identificar, descrever ou escrever o código

JSP para os seguintes elementos: (a) template

text, (b) elementos de scripting (comentários,diretivas, declarações, scriptlets e

expressões), (c) ações-padrão e customizadas,

e (d) elementos da expression language.

6.2 Escrever o código JSP que usa as

diretivas: (a) page (com os atributos

import, session, contentType e

isELIgnored), (b) include, e (c) taglib.

6.3 Escrever um Documento JSP (documentobaseado em XML) que usa a sintaxe correta.

6.4 Descrever o propósito e a seqüência de

eventos do ciclo de vida de uma página JSP:

(1) tradução da página JSP, (2) compilação

da página JSP, (3) carregar a classe, (4) criar

a instância, (5) chamar o método jspInit, (6)

chamar o método jspService, e (7) chamar o

método jspDestroy.

6.5 Dado um objetivo de design, escrever o

código JSP, usando os objetos implícitos

apropriados: (a) request, (b) response, (c)

out, (d) session, (e) config, (f) application,

(g) page, (h) pageContext, e (i) exception.

6.6 Configurar o deployment descriptor para

declarar uma ou mais bibliotecas de tags,

desativar a linguagem de avaliação e

desativar a linguagem de scripting.

6.7 Dado um objetivo de projeto especifico para

incluir um segmento JSP em outra página,

escrever o código JSP que usa o mecanismo

de inclusão mais apropriado (a diretiva

include ou a ação-padrão jsp:include).

282 capítulo 7

os

Notas sobre aAbrangência:

A maioria é tratada neste capítulo, mas os

detalhes que envolvem as (c) ações-padrão e

customizadas e (d) os elementos da expressionlanguage serão abordados nos próximos capítulos.

A diretiva de página será abordada neste

capítulo, mas o include e a taglib serão

abordados nos próximos capítulos.

Não será abordado aqui; verifique o capítulo

sobre Distribuição.

Tudo abordado neste capítulo. (Dica: estas

serão algumas das perguntas mais tranqüilas

do exame, uma vez que você aprendeu o básico

neste capítulo.)

Tudo abordado neste capítulo, embora se espera

que você já saiba o que a maioria deles significa,

baseado nos dois capítulos anteriores.

Nós falamos sobre tudo aqui, exceto declarar as

bibliotecas de tags, que será visto no capítuloUsando a JSTL.

Não é abrangido aqui; verifique no próximo

capítulo (JSP sem scripts).

Page 18: JSP.SERVLET0011

5/8/2018 JSP.SERVLET0011 - slidepdf.com

http://slidepdf.com/reader/full/jspservlet0011 18/25

 

usando o JSP

No fitM das comas, o JSP é só UtM servlet

9 seu JSP toma-se um servlet completo rodando em sua aplicação.E muito parecido com qualquer outro servlet, exceto pelo fato de

que a classe do servlet é escrita para você - pelo Container.

O Container utiliza o que você escreveu no seu JSP, o traduz

para um arquivo-fonte da classe servlet (.java) e o compila em

uma classe servlet Java. Depois disso, ele será só um servlet e

rodará exatamente do mesmo jeito, como se você mesmo tivesse

escrito e compilado o código. Ou seja, o Container carrega a

classe servlet, instancia-a e inicializa-a, cria uma tbread para

cada solicitação e chama o método serviceO do servlet.

MyJSP jsp Servlet

, carregado

: iniciali zadocomo

~

MyJSPjsp.class

com-pila em~

é traduzido-paro.

~

MyJSP.jsp

••Algumas das perguntas que responderemos neste capítulo são:

~ Para onde vai cada parte do seu arquivo JSP no código-fonte do servlet?

~ Você tem acesso às características "sem servlet" da sua página

JSP? Por exemplo, o JSP tem noção do ServletConfig ou doServletContext?

~ Quais são os tipos de elementos que você pode inserir em um JSP?

~ Qual é a sintaxe para os diferentes elementos de um JSP?

~ Qual é o ciclo de vida de um JSP? Você pode interferir nele?

~ Como os diferentes elementos de um JSP interagem no servlet final?

você está ~ 283

Page 19: JSP.SERVLET0011

5/8/2018 JSP.SERVLET0011 - slidepdf.com

http://slidepdf.com/reader/full/jspservlet0011 19/25

 

fazendo um JSP

Criando UtM JSP que exiba quatttas vezes ele foi acessado

Pauline quer usar JSPs em suas aplicações - ela está realmente cansada de

escrever HTML no seu método printlnO do PrintWriter do seu servlet.

Ela decide aprender JSPs, criando uma página dinâmica simples queexibe o número de vezes que ela foi solicitada. Ela sabe que você pode

colocar um código Java normal em um JSP usando um scriptlet - que

significa simplesmente o código Java dentro de uma tag <% ... %>.

Já que eu posso colocar códigoJava no JSP, voucriar um

método estático emuma classe

Counter, para manter a variávelestática de contagem de

acessos e chamar este método

a partir do JSP ...

284 capítulo 7

BasicCounter.jsp

<html>

<body>

The page count is:

<%

out.println(Counter.getCount(»;

~~bOdY> ~/html>

1/ U I ID cltje+6 (jiJ.f es+a ,~/u:r+t'J

1Vi/ce~l'e <% e %> é iJl;i SCl'l,+le+J

3iJeé a,eJ1s's JIJ.IIs' s,~/es.

Counter.java

package foo;

public class Counter (

private static int count;

public static synchronized int getCount()

count++i

return count;

Clas se (;.ssis-k?t-k

JlJ.1I4 siMples.

Page 20: JSP.SERVLET0011

5/8/2018 JSP.SERVLET0011 - slidepdf.com

http://slidepdf.com/reader/full/jspservlet0011 20/25

 

usando o JSP

Ela distribui e testa o JSP

Distribuir e testar é trivial. A única parte confusa é

garantir que a classe Counter esteja disponível parao JSP. E isso é fácil: basta colocá-Ia no diretório

WEB-INF/classes da aplicação. Ela acessa o JSPdireto pelo browser:

http://localhost:8080/testJSPl/BasicCounter.j sp

The page count is: 1

Kcljhgn

3fhg.iFijgof

weh.'<rnl

!tdjhqnJfhq.iF.ijqof

BasicCouj'-fér.jsp

{Po.l'fJ. flc

1 error

HTTP Status 500 -

The server encountered an internal error o that prevent it f rom ful fi ll ing this request.

II!!J!IIorg.apache.jasper.JasperException: Unable to compi le c1ass for JSPAn er rar occur red at line 1 in the jsp file :/Basic Counter .jsp

Gene ra ted servlei er ra r:

Uavac } Compiling 1 source f ile

IUsers/kathy/App[ications2/jakarta-tomcat-5.019!workfCatalinaJIocalhostltestJSP1/org/apache/jspl

~::~~I~U ;~~~f~ba~~~:;cannot resolve symbol \4,cê C611Se Vflocation: class org.apache.jsp.basicCounterjsp ':5

out.pri~t( Counter.getCountO); eJ1ffJ1Jel' IJ 3(1E'

Jev E'I'I'D.,/ó?

"-'OlOI

~.,m Couni~~lcla"

Ctl/lJ3ve b ,/il'e-l-/-l'ltJ J (J

pfJ.clJh e" al'3VlV6 .classJI1lJ .,fll'e-l-/-I'tô wí$-IIJFI

clo.sses) e 1Jtltl,!fl/el'pfJ.l'hI '" I

,/es"F1.I.apltcl.l.fl.l.o sel'lt"capa; Je ve-!c.

org.apache.jasper.compiler. DefaultErrorHandler.javacError(DefaultErrorHandler.java: 127)

org.apache.jasper.compiler. ErrorDispatcher.javacError(ErrorDispatcher.java:351 )

org.apache.jasper.compiler.generateclass(Compiler.java:415)

org.apache.jasper.compiler.Compiler.compile(Compiler.java:458)

org.apache.jasper.compiler.Compiler.compile(Compiler.java:439)

org.apache.jasper.JspCompilalionContext.compile(JspCompilationContext.java:553)

org.apache.jasper.servleUspServletWrapper.service(JspServletWrapper.java:291 )

org.apache.jasper.servleUspServlet.serviceJspFile(JspServlet.java:301 )

org.apache.jasper.servleUspServlet.service(JspServlet.java :248)javax.servlet-http.HttpServlet.service(HttpServle1.java:856)

.,

você está aqui ••.

Page 21: JSP.SERVLET0011

5/8/2018 JSP.SERVLET0011 - slidepdf.com

http://slidepdf.com/reader/full/jspservlet0011 21/25

 

o atributo imporl da diretiva da página

o JSP Kão recoKhece a classe Couttter

A classe Counter está no pacote foo, mas não há nada no

JSP capaz de reconhecê-Ia. É idêntico ao que acontece

com você em qualquer outro código Java. E você conhecea regra: importe o pacote ou use o nome da classe

totalmente qualificado no seu código.

Eu acho que você tem que usar onome da classe totalmente qualificadodentro dos JSPs. Faz sentido, poistodos os JSPs foram transformados

em código servlet Java simplespelo Container. Mas é claro que eugostaria que você pudesse colocar

im orts no seu código JSP ...

C>O

Counter.java

package foo;

public class Counter (

private static int count;

public static int getCount()

count++;

return count;

o código JSP era:

<% out.println(Counter.getCount()); %>

o código JSP deveria ser:

<% out.println(foo.Counter.getCount()); %>

Il.~ . fVl'fcitJl'ltU".1"f3eJl'IJ. Vai

286 ca(,~ítwro 7

Page 22: JSP.SERVLET0011

5/8/2018 JSP.SERVLET0011 - slidepdf.com

http://slidepdf.com/reader/full/jspservlet0011 22/25

 

usando o JSP

Mas você PODE

incluir declarações

import num JSP...

basta ter umadiretiva.

C>O

Para importar múltiplos pacotes:

Use a diretiva de págitla para itMportar pacotes

count is:

f.s-t-a é vh'la ptl.Je

'import="foo. *" %> '-(---- J. J ------yC"'h'I Vh'I fJ.-rl"tbvró tlrlpl:il"r.

(Obsel"ve 3ve #fã", 1.:

#fel1t.VIt'Ip.m-t-.re-v{,.jVifJ. 11/J

tli711.1/4 di're.f.tV4).out.println(Counter.getCount(») ;

%> \

</body> Os scrlh-t-Ie.f.s sã", Jtlva</html> r

l1",rh'lal:S-~l"'j4.) -t-6'/fJ.S as

decl41"l~f;e:s e:1t'I VIt'I scriphe-t

devel!l1 -I-erh'lli7ar C<ll1!l1 Vh'I

p61'1-t-c-e-v:l"jVIQ.!

<html>

<body>

The page

<%

<%@ page

<%@ page import="foo.*,java.util.*" %>

1',tise VI!l1Q. VlrjvllA parti separlAl" .os pIAC6-1-eS.

II:S--t-a1i1-1-etra '/e pll.CfJ-I-es vel!l1fl'1-t-re

A diretiva é um recurso que você tem para dar instruções especiais ao

Container no momento da tradução da página. As diretivas vêm em três

sabores: page, include e taglib. Nós veremos as diretivas include e taglib nos

próximos capítulos. Por enquanto, nossa preocupação será com a diretiva

page, porque ela é a única que nos permite importar.

Para importar um único pacote:

Reparou a diferença entre o código Java que exibe o contador e a diretiva

de página?

O código Java vem entre os símbolos <% e %>. Mas a diretiva acrescenta

um caractere a mais no começo do elemento - o símbolo @ (arroba)!

Se você vir um código JSP que começa com <%@, você já sabe que se tratade uma diretiva. (Nós entraremos em maiores detalhes sobre a diretiva de

página mais adiante.)

você está ~ 287

Page 23: JSP.SERVLET0011

5/8/2018 JSP.SERVLET0011 - slidepdf.com

http://slidepdf.com/reader/full/jspservlet0011 23/25

 

usando expressões

Mas etlt seguida Kitlt tltetlciotla as "expressões~~

Justo quando você pensou que fosse seguro, o Kim percebe

o scriptlet com uma declaração out.printlnO. Isto é JSP,

pessoal. Grande parte da razão do JSP é evitar o printlnO! Épor isso que existe um elemento expressão no JSP - ele exibe

automaticamente aquilo que você colocou entre as tags.

o código expressão:

o código script/et:

It '" '" J I"f expJ"esst'uJ e ífJi'\tdscClJ"-ra - I1IJS

pJ"edsfJ.ífJi'\lJs escJ"eveJ" IJ

<%@ page import="foo.*" %>

<html>

<body>

The page count is:

<% out.println(Counter.getCount()); %>

</body>

</html>

<%@ page import="foo.*" %>

<html>

<body>

The page count is now:

<%= Counter.getCount() %>

</body>

</html>

Você não precisa dizer out.

printlnO em um JSP! Basta

usar uma expressão ...

Notou a diferença entre a tag para o código scriptlet e a tag da

expressão? O código scriptlet vem entre os sinais de porcentagem

<% e >%. Já as expressões recebem um caractere adicional no

início do elemento: um sinal de igual (=).

Até agora nós já vimos três tipos diferentes de elementos do JSP:

Scriptlet:

Diretiva:

Expressão:

<% %>

<%@ %>

<%= %>

288 capftuio 7

Page 24: JSP.SERVLET0011

5/8/2018 JSP.SERVLET0011 - slidepdf.com

http://slidepdf.com/reader/full/jspservlet0011 24/25

 

usando oJSP

O;;Je es+: ópo;;+ó-e-v!rjVla?J

<%= Counter.getCount() %>

As expressões se tOl11atM o argUtMettto para UtM

out.prittt()

Em outras palavras, o Container carrega tudo o que você

digita entre <%= e >% e acrescenta como argumento para uma

declaração que exibe para a resposta implícita out do PrintWriter.

Quando o Container encontra isso:

<%~ Counter.getCount() %>

Ele o transforma nisso:

out.print(Counter.getCount(»);

Se você colocou mesmo um ponto-e-vírgulana sua expressão:

<%= Counter.getCount(); %>

Isso é mau. Significaria isso:

out.print(Counter.getCount();) ;

, ~'x.l!! Is+ó i1Vl1ca

NUNCA termine uma expressão com um ponto-e-vírgula!

<%= nuncaColoqueUmPontoEVírgulaAqui %>

<%= porquelstoÉUmArgumentoParaPrintO %>

você está •• 289

Page 25: JSP.SERVLET0011

5/8/2018 JSP.SERVLET0011 - slidepdf.com

http://slidepdf.com/reader/full/jspservlet0011 25/25

 

expressões e diretiva de página

N&9 exIstem

feth'untas Ídl9tas

Y: Bem, se você tem que usar asexpressões EMVEZ DE colocar o out.printlnOem um scriptlet, então por que existe um

"out" implícito?

I\: Você provavelmente não usará a variávelout implícita de dentro da sua página JSP, masvocê pode passá-Ia adiante ... alguns outros

objetos que são parte da sua aplicação não têmacesso direto ao stream de saída de dados da

resposta.

f: Em uma expressão, o que acontece se ométodo não retomar coisa alguma?

I\: Você receberá um erro!! Você não pode,e NÃO DEVE, usar um método com um tipo de

retorno void como uma expressão. O Containeré esperto o suficiente para descobrir que não

haverá nada a exibir se o método tem um tipo

de retorno void!

Y: Por que a diretiva import começa coma palavra "page"? Por que é <%@ page

import %> em vez de simplesmente <%@

import %>?

I\: Boa pergunta! Em vez de possuir umaenorme pilha de diretivas, a especificaçãoJSP tem apenas três diretivas, que podem teratributos. O que você chamava de "a diretivaimport" é na verdade "o atributo import da diretivada página".

Y: Quais são os outros atributos para a

diretiva da página?

I\: Lembre-se, a diretiva da página é para darao Container a informação de que ele precisaquando traduz seu JSP para servle1. Os atributosque nos importam (além do import) são: session,content-Type e isELlgnored (falaremos delesmais adiante neste capítulo).

Diga quais das seguintes expressões sãoválidas, ou não, e por quê. Nós não abordamostodos os exemplos aqui; portanto, use a suaimaginação, baseado no que você já sabe sobre ofuncionamento das expressões.(As respostas estão mais adiante neste capítulo;então, faça o exercício AGORA).

Válido? (Verifique se é válido ou não,

justificando quando não for.)

0<%= 27%>

0<%= ((Math.randomO + 5)*2); %>

0<%= "27"%>

0<%= Math.randomO %>

0<%= String s = "foo" %>

0<%= new String(3]) %>

0<% = 42*20; %>

0<%= 5>3 %>

0<%= false %>

0<%= new CounterO %>