Upload
jobson-medeiros
View
105
Download
0
Embed Size (px)
Citation preview
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
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
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
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
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
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á
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
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
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
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
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.
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
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
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
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
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
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).
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
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.
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 ••.
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
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
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
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
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 %>