use a cabeça jsp & servlets

Download Use a cabeça   jsp & servlets

If you can't read please download the document

Upload: ana-paula-de-alexandria

Post on 25-Jun-2015

28.320 views

Category:

Documents


211 download

TRANSCRIPT

  • 1. "Scidade de Ensino Sunerior da PamffJaElogios antecipados para o Use a Cabea! Servlets & JSpTM"Este livro, Use a Cabea! Servlets & JSP, to bom quanto o Use a Cabea! EJB, que me fez rir Eme garantiu 97% de aproveitamento na prova!" - Jef Cumps, Consultor de J2EE, Cronos"Para nossas aulas de Servlet/JSP, ns compramos mais de dez livros, sem encontrar nenhum, de fato,satisfatrio para nossas necessidades de ensino ... At que encontrarmos esta jia pedaggica quevoc tem agora nas mos! Os livros da srie Use a Cabea! nos tornaram melhores professores."- Philippe Maquet: Instrutor Snior da Loop Factory, BruxelasElogios para o Use a Cabea! EJBTM e para o formato da srie Use a Cabea!"A tecnologia Java est em todos os lugares - em telefones celulares, carros, cmeras, impressoras,jogos, PDAs, ATMs, smart cards, bombas de gasolina, estdios, equipamentos mdicos, webcams, servidores, voc escolhe. Se voc desenvolve software e no conhece Java, definitivamente, est nahora de voc mergulhar de cabea - Use a Cabea!." - Scott McNealy, Chairman, Presidente e CEO, Sun Microsystems (Nota do departamento de marketing: isto foi o melhor que voc conseguiu do Scott? Veja se consegue fazer com que ele acrescente algo do tipo: "Se ns tivssemos os livros da srie Use a Cabea! h dois anos, ainda podamos ter aquela iluso ...~). "Um livro incrivelmente agradvel. Dividido e interconectado como uma rede de conhecimentos.Como professor da Purdue University, com especializao em desenvolvimento avanado de softwareutilizando tecnologias baseadas em Java, estou em constante busca por materiais de apoio queofeream motivao e uma linguagem compreensiva direcionada para o exame, mas que ao mesmotempo no desestimulem os alunos. O livro Use a Cabea! EJB preenche estes requisitos facilmente!Livros como estes so extremamente raros.Inclu este livro como um dos textos essenciais para as futuras turmas do curso de graduao avanadaque eu dou de Desenvolvimento de Aplicaes para Empresas. Parabns para os autores; continuemcom o excelente trabalho!" - Professor Dan Gill, Departamento de Tecnologia de Computadores, Purdue University."Alm do estilo envolvente que o levar do nvel de leigo ao status de guerreiro aclamado no Java, olivro Use a Cabea! Java traz um grande nmero de questes prticas, que outros ttulos tratam comoo temvel exerccio para o leitor ...Ele inteligente, irnico, descolado e prtico - existem poucoslivros com estas caractersticas e que so capazes de ensinar sobre serializao de objetos e protocolosde execuo em rede ao mesmo tempo."- Dr. Dan Russel, Diretor de Pesquisas Experimentais eCientficas com Usurios, IBM Almaden Research Center (eprofessor de Inteligncia Artificial na Stanford University).Que maneira maravilhosa de aprender!!! EU NO CONSIGO LARGAR ESTE LIVRO!!! Meufilho de 3 anos acordou Ih40 da manh, e eu o col>queide volta na cama segurando o livro e umalanterna, e continuei lendo por mais uma hora.- Ross Goldberg"O Use a Cabea! Java, escrito por Kathy e Bert, d s suas pginas impressas uma aparncia GUIcomo voc jamais viu. De um jeito diferente e descolado, os autores transformam a aprendizagem emJava em uma empolgante experincia, do tipo qual ser a prxima surpresa?" .- Warren Keuffel, Revista Software Development.

2. Parabns pelo formato Use a Cabea!" rpido, irreverente, divertido e envolvente. Cuidado - voc pode realmente aprender alguma coisa!" - Ken Arnold, ex-Engenheiro Snior da Sun Microsystems e co-autor (com James Gosling, criador do Java) do livro "The J ava Programming Language""Eu passei no exame SCBCD com 94% de aproveitamento. Realmente, o P! EJB demais! Eu li olivro todo em 10 dias ..." - Basavaraj Devershetty( " ... a nica maneira de saber o valor de um tutorial saber se ele realmente ensinar bem. Use aCabea! Java excelente para ensinar. Tudo bem, eu pensei que ele fosse bobinho ... mas, me dei contade que estava aprendendo os tpicos totalmente, medida que avanava pelo livro.""O estilo do Use a Cabea! Java tomou meu aprendizado, digamos, mais fcil."- slashdot (anlise do site honestpuck)"Eu jamais poderia imaginar que algum pudesse rir enquanto lesse um livro de TI! Usando o materialdo Use a Cabea! EJB eu consegui uma tima pontuao (91 %) e estabeleci um recorde mundialcomo o mais jovem SCBCD, com 14 anos de idade." - Afsah Shafquat (o mais novo SCBCD do mundo)"Esse livro to bacana que me deu vontade de CHORAR! Estou chocado." - Floyd Jones, Escritor Tcnico Snior/Garoto da piscina, BEA"Se voc quer aprender Java, no procure mais: bem-vindo ao primeiro livro tcnico comcaractersticas GUI! Com seu formato revolucionrio e elaborado com perfeio, o livro oferecevantagens que outros ttulos sobre Java simplesmente no conseguem ... Prepare-se para um passeiorealmente extraordinrio pelo universo Java."- Neil R. Bauman, Diretor Executivo e capito da GeekCruises (www.GeekCruises.com)"Se existe algum no mundo familiarizado com o conceito do Use a Cabea!, este sou eu. Este livro to bom que eu me casaria com ele na TV!"- Rick Rockwell, comediante.O noivo original do programa "Quem Quer Se Casar comum Milionrio?" ("Who Wants to Marry a Millionaire"),da FOX Television"O Use a Cabea! Java como o Monty Python meets the gang offourl ... o texto est to bemdividido entre quebra-cabeas e histrias, questionrios e exemplos, que voc obtm uma abrangnciaquehenhum livro de informtica conseguiu at agora."- Douglas Rowe, Comunidade de Usurios de Java, Columbia."Use a Cabea! Java ... d um novo significado frase de marketing da OReilly: Existe umOReilly para issoz. Eu o escolhi, pois muitas outras pessoas que eu admiro o classificaram comorevolucionrio e eu descrevi uma tcnica totalmente diferente para este livro. Eles estavam (esto)certos ... Sem fugir do tpico formato da OReilly, eles conseguiram um formato cientfico, mas bemaceito. O resultado divertido, irreverente, atui, interativo e brilhante ... A sensao de ler este livro a de estar sentado bem prximo aos alto-falantes em uma sala de reunio, aprendendo - e rindo - comos colegas ... Se voc quer ENTENDER Java, compre logo o seu."- Andrew Pollack, www.thenorth.com 3. Sociedade de Ensino Superbr da Paat1ira"Lembra quando voc estava no jardim de infncia? No? Bem, e quando voc aprendeu pela primeiravez o alfabeto? dificillembrar? Bem, no faz mal. Lendo o Use a Cabea! lava, voc vai voltara se divertir enquanto aprende ... Para aqueles que se interessam por aprender novas linguagens deprogramao e no vieram da rea de cincia da computao ou da programao, este livro umapreciosidade ... Ele torna divertido o aprendizado de uma linguagem dificil de computao. Espero queexistam mais autores interessados em quebrar o velho e corriqueiro modelo tradicional do estilo deescrever. Aprender linguagens de computao deveria ser prazeroso e no oneroso."- Judith Taylor, Comunidade de Usurios da Maeromedia,Southeast Ohio."H poucos dias, recebi minha cpia do Use a Cabea! lava, de Kathy Sierra e Bert Bates. Eu aindaestou no comeo do livro, mas o que me encantou foi que, mesmo estando com sono naquela primeiranoite, me peguei pensando: tudo bem, s mais uma pgina e vou dormir."- JoeLitton"FINALMENTE, um livro de lava escrito tal qual eu escreveria se tivesse sido eu.Falando srio, este livro simplesmente arrasa qualquer outro livro de software que euj li... muitodificil escrever um bom livro ... preciso muito tempo para explicar os assuntos, em uma seqncianatural e cujo foco o leitor. muito trabalho. Muitos autores, notoriamente, no esto prontos para odesafio. Parabns equipe do Use a Cabea! EJB por este trabalho primoroso!P.S. Quando vai sair o projeto Use a Cabea! l2EE? E o Use a Cabea! Desenvolvedor deComponentes para a Web? E como eu fao para que meu videocassete grave umjogo de futebolenquanto estou trabalhando?"- Wally Flint"Se voc relativamente um iniciante em programao e est interessado em lava, eis o seu livro ...Abordando tudo - desde objetos para a criao de interfaces grficas de usurio (GUl),tratamento deexcees (erros), redes (sockets) e multitarefas, at como agrupar suas pilhas de classes em um nicoarquivo de instalao -, este livro completssimo ... Se voc gostar do estilo, estou certo de que ir adorar olivro assim como eu. Espero que a srie Use a Cabea! possa ser estendida a vrios outros assuntos!"- LinuxQuestions.org"Quando eu li o Use a Cabea! lava, do mesmo autor, eu pensei que impossvel escrever outrolivro (aquele sobre EJB tambm) de uma forma to brilhante. Porm, agora eles nos surpreenderamcom este livro ainda mais legal. Os livros da srie Use a Cabeca! tornaram-se algo necessrio(QUASE UMA EXIGNCIA) em todos os assuntos. Eu queri~ ser uma criana para poder aprendertudo da maneira como ensina este livro."- Anshu MishraEu trabalhei com EJB h cerca de 4 anos e o achei uma baguna s avessas. Depois de ler asespecificaes 2.1 e 2.0, eu descobri que apenas uma t*** 3 fumegante que ficou maior. Seu livrorespondeu maioria das incontveis perguntas que martelavam meu crebro de amendoim e permitiu-me passar na prova com uma pontuao de 92% ...Vencendo facilmente aquele colega de 14 anos de idade por 1 ponto. :-) Muito obrigado.- Jim Steiner"Eu me VICIEI nos contos do livro, nos cdigos com anotaes, nas entrevistas preparatrias e nosexerccios para o crebro." - Miehael Yuan, autor, Enterprise J2ME 4. se a Cabeca Servlets...:>& JSPTMSegunda EdioNo seria fantstico se existisse um livro sobre Servlets que fosse mais interessante do queapagar spam da sua caixa demensagens? Talvez isso seja uma iluso ...Bryan BashamKathy SierraBert BatesRio de Janeiro.2008 5. Use a Cabea Servlets & JSpTM Alta Books Editora - Starlin Alta Con Com Ltda 2008Do original Head First Servlets and JSPTM.Authorized translation of the English edition of Head First Servlets and JSPTM 2st Edition 2008 OReil/y ,Media,lnc. ISBN: 978-0596102340 This translation is published and sold by permission ofOReil/yMedia, Inc., the owner of ali rights to publish and sell the some.Todos os direitos reservados e protegidos pela Lei 5988 de 14/12/73. Nenhuma parte deste livro, semautorizao prvia por escrito da editora, poder ser reproduzida ou transmitida sejam quais forem osmeios empregados: eletrnico, mecnico, fotogrfico, gravao ou quaisquer outros. Todo o esforofoi feito para fornecer a mais completa e adequada informao, contudo a editora e o(s) autor(es) noassumem responsabilidade pelos resultados e usos da informao fornecida. Recomendamos aosleitores testar a informao, bem como tomar todos os cuidados necessrios (como o backup), antes daefetiva utilizao. Este livro no contm CD-ROM, disquete ou qualquer outra midia.Erratas e atualizaes: Sempre nos esforamos para entregar a voc, leitor, um livro livre de errostcnicos ou de contedo; porm, nem sempre isso conseguido, seja por motivo de alterao desoftware, interpretao ou mesmo quando alguns deslizes constam na verso original de alguns livrosque traduzimos. Sendo assim, criamos em nosso site, www.altabooks.com.br. a seo Erratas, onderelataremos, com a devida correo, qualquer erro encontrado em nossos livros.Avisos e Renncia de Direitos: Este livro vendido como est, sem garantia de qualquer tipo, sejaexpressa ou implcita.Marcas Registradas: Todos os termos mencionados e reconhecidos como Marca Registrada e/ou comercialso de responsabilidade de seus proprietrios. A Editora informa no estar associada a nenhum produto e/ou fornecedor apresentado no livro. No decorrer da obra, imagens, nomes de produtos e fabricantes podemter sido utilizados, e desde j a Editora informa que o uso apenas ilustrativo e/ou educativo, no visando aolucro, favorecimento ou desmerecimento do produto/fabricante.Produo Editorial: Editora Alta Books Coordenao Editorial: Roberto Baptista BarrocoTraduo: Eveline Vieira Machado Reviso: Fernanda RigamondReviso Tcnica: Helder Borges Diagramao: Equipe Alta BooksImpresso no Brasilo cdigo de propriedade intelectual de 10 de Julho de 1992 proibe expressamente o uso coletivo semautorizao dos detentores do direito autoral da obra, bem como a cpia ilegal do original. Esta prticageneralizada nos estabelecimentos de ensino, provoca uma brutal baixa nas vendas dos livros a pontode impossibilitar os autores de criarem novas obras.Editora Alta BooksRua Viva Claudio, 291 - JacarRio de Janeiro - RJ CEP 20551-010 Tel: 21 3278-8069 Fax: 21 3277-1253 www.altabooks.com.br [email protected] 6. Esse livro dedicado a todos aqueles que decidiram que EL implicit object 7. os autoresOs "procurados" da srie Use a Cabea! (e deste livro) Bryan BashamBeart BatesBert um antigo desenvolvedor Kathy gosta de teoria daBryan tem mais de vintee arquiteto de software, mas aprendizagem e assuntos anos de experincia emum perodo de 10 anos em relacionados mente desde adesenvolvimento de software,inteligncia artificial o fezpoca em que era designer deincluindo um perodo comse interessar por teoria dajogos (ela escreveu jogos parasoftware de automaoaprendizagem e treinamento a Virgin, MGM e Amblin) eavanada usando tcnicasvia computador. Ele passou a desenvolvedora em I.A2 Grande de I.A na NASA Eleprimeira dcada de sua carreiraparte do formato da srie Use tambm atuou em umacomo desenvolvedor viajandoa Cabea! foi desenvolvidoconsultoria, desenvolvendopelo mundo e ajudando clientes enquanto lecionava Interatividade aplicaes comerciais em 00como a rdio Nova Zelndia,Usando Novas Midias, no personalizadas. Atualmente,o The Weather Channel e aprograma de extenso de Bryan Desenvolvedor derede de entretenimentos Arts Estudos em Entretenimento Cursos da Sun, com nfaseand Entertainment Networkda Universidade da Califmianos princpios de design em(A&E) em suas transmisses.(DCLA). Recentemente, seJava e em 00. Ele j trabalhouAtualmente, ele membro datomou instrutora-chefe da em diversos cursos de Javaequipe da Sun responsvel pelo Sun Microsystems e ensina osda Sun, incluindo JDBC,desenvolvimento de diversosinstrutores de Java a divulgaremJ2EE, Servlets e JSP, alm deexames de certificao em Java,as mais novas tecnologias Desenvolvimento de Softwareincluindo o recente SCWCD. desta linguagem. Alm disso,utilizando 00. Ele foi tambmBert um antigo e incorrigveldesenvolve diversos exameso primeiro designer dos examesaficionado pelo GOl e vempara certificaes Sun, incluindo SCWCD, nas verses originaltrabalhando h bastanteo SCWCD. Junto com Bert e atual.tempo em um programa. OBates, ela tem aplicado Bryan pratica o Zen Budismo,Java h de se tomar umaextensivamente os conceitos dajoga Ultimate Frisbee, adoralinguagem expressiva o srie Use a Cabea! no ensino som e pratica o ski telemark.suficiente para que ele finalize de milhares de desenvolvedores.seu projeto. Ele um bomEla fundou uma das maioresguitarrista e, atualmente, estcomunidades em Java noexperimentando o banjo.mundo virtual, a javaranch.Sua mais recente aventuracom, premiada em 2003 e 2004foi a compra de um cavalocom o Prmio Produtividade emislands, o que dever trazerDesenvolvimento de Software.novos desafios aos seusEla adora correr, esquiar, montarconhecimentos na rea de a cavalo, andar de skate etreinamento ...cincias esotricas.VIII 8. contedo(Sumt19) IntroduoXIX Por que usar Servlets & JSPs: uma introduo 1 Arquitetura da aplicao web: viso geral de alto nvel37 Minitutorial do MVC: praticando com o MVC67 Sendo um servlet: request e resposta 93 Sendo uma aplicao web: atributos e listeners 147 Estado de conversao: sincronizando o bean/entidade 223 Sendo um JSP: escrevendo cdigos em JSP281 Pginas sem scripts: escrevendo JSPs sem scripts 343 As tags customizadas so poderosas: usando a JSTL439 Quando nem a JSTL o bastante: desenvolvendo tags customizadas499 Distribuindo sua aplicao web: distribuio da aplicao web601 Mantenha em segredo, mantenha seguro: segurana da aplicao web 649 O poder dos filtros: wrappers efiltros 701 Padres de Design Enterprise: padres e Struts 737 Apndice A: TestePreparatrio Final791 ndice 865IntroduoSeu crebro pensando em Servlets. Aqui est voc tentando aprender algo, enquantoseu crebro lhe presta o favor de certificar-se de que tal aprendizado no serinterrompido. Ele pensa, " melhor reservar espao para coisas mais importantes, comoqual animal selvagem evitar e se esquiar sem roupa ruim mesmo". Ento, como vocvai induzi-lo a pensar que sua vida depende do conhecimento em Servlets? A quem se destina este livro?XX Ns sabemos o que seu crebro est pensando XXI Metacognio XXlll Domine seu crebrpxxv O que voc precisa para este livro XXVI Passando no exame de certificaoXXVlll Os revisores tcnicos XXX Agradecimentos XXXI IX 9. 1Por que usar servlets & JSPs? As aplicaes web esto na moda. Quantas aplicaes GUI voc conhece que so usadas por milhes de usurios em todo o mundo? Como desenvolvedor de aplicaes web, voc no precisar se prender aos problemas de distribuio presentes em toda aplicao standalone e ir distribuir sua aplicao a qualquer pessoa que possua um browser. Mas voc precisar dos servlets e dos JSPs, pois as velhas e estticas pginas HTML so to, digamos, "1999". Saiba como mudar do sUe na web, para a aplicao na web. Principais elementos do fluxo Objetivos do Exame 2 de solicitao: O mtodo HTTP (a ao de se~ executada) A~ 451Usando as tags e 455Com a , h trs maneiras de incluir contedo460Customizando o que voc inclui462Fazendo o mesmo com 463A para todas as suas necessidades de hyperlink465Crie suas prprias pginas de erro468A tag . Semelhante a try/catch ... mais ou menos 472E se voc precisar de uma tag que NO esteja na JSTL? 475Preste ateno ao 480O que pode existir no corpo de uma tag482O tag handler, o TLD e o JSP483A taglib apenas um nome, no um local 484Quando um JSP usa mais de uma biblioteca de tags487 () .H-ritr.rlc.te #fler+4.f;tJ ,lll.prN.ltLlsiJ 4!JJ"CwsadeshItvrc,IV;" 1"+(;5f~f~d",("4S +Prhwl-e &1/4",1-""$ "1I+r"s)-I/1-",1+ L"",dhede: J""5 ---.----/ A"drew1Lf.""k/,{Jtlse fl.ee,l-ish (~lA.adaftaXXX introduo 30. introduo J.tU ct~J.t.fdefine um formulrio(que geralmente oferecei.0)lIItas eS+Q.lllttJsuSQ./IlftJ-as elllt um campo para a entrada de dados)/IltJS StJS eXt!.l!fi(JS;o cabealho de primeiro nvelselelllt 1t141"$sil!flesft. StJ4Sdefine os limites do header do documento st.leltl llilfJ.Slespec+tv4Sdefine os limites do documento HTML /a.f p61ZUedefine um tipo de entrada em um formulrio es-ra asvl Il

um novo pargrafoIfrM~,) o ttulo do documento HTMLvoc est 7 39. escrevendo HTMLo que vocescreve ...(o HfMUImagine que voc est criando uma pgina de login. O HTMLsimples poderia se parecer com isto: 4::-- {J1f Ce.lf!ifl1+:1/4 /frMLALogin Page tt +~ es+: fJ.11/"I1t.adfJ.del1+lt:.de viria +~ de tfJ.I:51fJ.1t:.; 4 11t de c/e.C41 ti 1t~elf!i IrItus V If!ifl14S lJl1de 3velflrl.s.(Lelrlble-se; SkylersLogin Page +~ fJJvflrl JfSVS(J;

fJ. seI !Ma) tC Jeci/ihl.lJS vSQ-la tlJlser sl~/eslf!iitS Je@

Name: abel"-!-v"4; ele el7+l"a.elll lIId6 de de pI"4CeSSallle~4d6 I/rK.4.L e ex-!!e a / / p~lP;a ." t/SVfJ.I"it>. ~valJd bl"wsel" elJclJ-!-I"Qlllav -!-~de Iw..~e..., ele jel"a V+l"a sllct-!-a{iltrrppal"14,,. bvscal" 6 l"ecvl"sespecllteadlJ. / AJes-h ca.SIJ; 6 bl"wsel" !al"a. Vllla.SejVlJda sllcl+a.{i I/rrp pal"a b-h"a 1w..4jelll descl"i+. lJaf~flf!lmc" ti" sellIlt1tJ1 Ca""I"IItUQ.(J 4f1iclJ.g;fJ dle1ff) eXfA..f-a.htt1ff C"ht(J alie f"ddo. 1M elas f6f"alit c"/(JctAdas 1() selr/liA.rJf. S,!f"IIi"JtJf"servidor Mas e se eu quiser, digamos, que a hora atual aparea na minha pgina? E se eu quiser uma pgina com contedodinmico? Eu no poderia teralgo como uma varivel dentro do meu HTML? f. se 3l1lSelhtS,f!1cD.ixo.f" o.5l1hta CiHSo. V4f"1fJ.llel [ da f>~I"l1aHrKA.L?The current timei8 [insertTimeOnServer].c- MMMM,C~GqJ8lligr~cOllipGGr~qA,CGD- MMMM,C~GqJ8lligr~cOllipGGr~qA,CG8GJGC~8GJGC~BGGrp~llirlB- MMMMC~GqJ8lligr~cOlli8~"uVqACGJ24 56. introduo e arquiteturaMas algutHas vezes voc precisa de tHais doque s o servidor Mas como isso vai ajudar? Meusclientes so todos clientesweb. O browser s conhece oservidor ... ou seja, ele no vai sercapaz de chamar aquela outraaplicao. o servidoroutra aplicao do servidorIsto no problema. Eu cuidarei deentregar a solicitao aplicao helper correta. A, eu pego a resposta da aplicao e entrego de volta ao cliente. Na realidade, o cliente nunca precisa saber que outra pessoaparticipou do trabalho.outra aplicaodo servidorvoc est 25 57. quando um servidor no o bastanteVuas coisas que o servidor no faz sozinho As Ph1nclSInstantnelBSe voc precisa de pginas instantneas (pginas criadasdinamicamente e que no existiam antes da solicitao) e n9 eXIstem antes deda capacidade para escrever/salvar dados no servidor (que lsignifica escrever em um arquivo ou banco de dados), vocser telta a s91lclta-9.Eno pode contar apenas com o servidor. C9m9 tqz.er uma pblna1 Contedo dinmicoB11t[., de tepente.A aplicao que roda no servidor disponibiliza somentepginas estticas, porm uma outra aplicao "assistente", A s91lcltay9cbet;a. qcom a qual o servidor pode se comunicar, pode construirpginas dinmicas instantaneamente. Uma pgina dinmicaapllca-9 beIpet ~~escteve"poderia ser qualquer coisa, desde um catlogo at um 9 BINIL, e 9 setVld9tweblog, ou at mesmo uma pgina que escolha imagensaleatoriamente para exibi-Ias. tet9tna a9 clIente. Quando em vez disto: Voc quer isto: The curenttime isThe curenttime isalways 4:20 PM [insertTimeOnServer]on the serveron the serveralways4:20 PMon theserver 2 Salvando os dados no servidorQuando o usurio envia os dados em um formulrio, o servidoranalisa os dados e pensa: "E a? Eu devo me preocupar?".Para processar esses dados, salv-Ios em um arquivo oubanco de dados, ou at mesmo para us-Ios na criao dapgina de resposta, voc precisa de outra aplicao. Quando oservidor recebe uma solicitao para uma aplicao helper, eleconsidera que aqueles parmetros so destinados ao assistente.Assim, o servidor passa os parmetros, fornecendo aplicaouma forma de gerar uma resposta ao cliente. 26 captulo 1 58. introduo e arquiteturao fernto t1o-Java para uttta aplicao helperque roda tiO servidor o "C&I~~A maioria dos programas CGI escrita como scripts em Perl,mas vrias outras linguagens podem servir, incluindo o C, oPython e o PHP. (CGI significa Common Gateway Interface- Interface de Passagem Comum -, e no nos importamos porque ele chamado assim.)Usando o CGI, veja abaixo como funciona uma pginadinmica que possui a data atual do servidor.oservidor o usurio dica em um~-,link que tem uma URL,que chama um CGI emaplicao vez de uma pgina do servidoresttica.Cliente ..Cliente )aplicao do servidor servidorparmetrosaplicao helper A aplicao do servidor "v" que a solicitao para o programa assistente, ento o servidor abre e roda o programa. A aplicao do servidor envia junto os parmet- ros do GET ou POST. servidorA aplicao helper constri a novapgina (que tem a data atual inserido)e devolve o HTML ao servidor. ~)Clienteaplicao helperPara o servidor, o HTML da aplicaohelper uma pgina esttica. servidorA aplicao helper [Japlicao do servidorfechada e o clienterecebe de volta umapgina HTML contendoa data atual, agoraesttica, como parte voc est aqui ~ 27 59. dois lados, CGI e Ser,;ietsOs Servletse o CG-I aruaIM COlMOuIMa aplicaohelper no servidorPreste ateno na conversa dos nossos dois faixas-pretas sobre os prs e os contras do CGI e dos Servlets.CGIServletso CGI melhorque os Servlets. Ns criamos osCom todo o respeito, mestre, existem muitasscripts CGI em Perl na nossa empresa, pois todovantagens em se usar o Java, em vez do Perl, paramundo sabe PerI. essas coisas que voc quer fazer com o CGI.Eu acho que legal usar Java, se voc souber. Desempenho, por exemplo. Com o Perl, oMas certamente, no valer a pena para ns servidor tem que rodar um processo superpesadomudar para Java. No h nenhuma vantagem.para todas as solicitaes que sejam para este recurso!Voc est me desafiando? Em quais assuntos? Ah, sim, mas os Servlets ficam carregados e as solicitaes dos clientes para um recurso doIsto no diferente do Java ... O que voc chamaServlet so tratadas como threads de um nicode JVM? Cada ocorrncia da JVM no umServlet em execuo. No existe overhead aoprocesso superpesado?carregar a NM, as classes e tudo mais ...Eu vejo que voc esqueceu muita coisa. Eu no esqueci, mestre. Mas no so todos osAtualmente, os servidores web so capazesservidores que podem fazer isso. Voc est sede manter um nico programa Perl rodando referindo a um caso isolado que no se aplicaentre as solicitaes dos clientes. Por isso, seua todos os programas CGI em PerI. Porm, osargumento de que ele mais pesado no valeServlets sero sempre mais eficientes quando issode nada. ocorrer. E no vamos esquecer que um Servlet pode ser um cliente J2EE e um programa CGI em Perl no.Do que voc est falando? Qualquer coisacompatvel com o CORBA pode ser umcliente J2EE.Eu no quero dizer um cliente para umprograma J2EE, e sim um cliente que um J2EE.Um Servlet rodando em um container J2EE podeChega, estou atrasado para minha aula de Pilates.participar da segurana e das transaescomMas no pense que acabou. Vamos terminar issoenterprise beans e existem ...mais tarde. continua ...Eu duvido que todos saibam PerI. Eu gosto doPerl, mas todos somos programadores Java aquina empresa; ento, preferimos Java. 28 captulo 1 60. introduo e arquitetura o I/Sil~l. J.iji.f(J, t/W(J, u~l-.Solicitao~Resposta11 HTTP/UComplete as caixasGET /test1lBeer1.htm .WicKedysmart.comescrevendo o que acontece Host. www1 /5 o (Macintosh ...user-Agent: Mozl a .durante cada passo noprocesso. Esta uma cpiada pgina 18. Ou seja, ao terminar, volte l para BeerLogin Pagecomparar suas respostas. Seleet a beer type ar buy beermaking supplies?

Select a beer
Buy supplies

Sd~i ervl or 1 HTIP/1.1 2000K Set-Cookie: ... BeerLogin Page SeIeet a beer type or buy beer... A- c!ie#i-fe fJ.5t/tJ.1(fi. a#iSl(jSfA~e#i-fe ~tlf st/a .fffI.#isa{i(JBeer Login PageS~(J, ff4l-;lJ.tifl. c.o~ St/Cf!S SlJ.Select a beer type or buy beer making .supplies?O Selccr a beerC Buy $upplesvoc est 29 61. uma rpida olhada nos servletsServlets Desmistificados(criar, distribuir, executar)Pois , os novatos em servlets j podem parar de prender arespirao; aqui est um guia rpido para criar, distribuir e executarum servlet. Este guia pode gerar mais perguntas que respostas -no se assuste! Voc no precisajaz-Io neste exato momento. Oapenas uma rpida demonstrao para tutorial mais no conseguem /esperar. O prximo captulo inclui um aqueles que detalhado/ Construa esta rvore de diretrios (em qualquer lugar,exeeto sob o tomcat). Ch1Servletjava weh.xml8Crie um servlet chamado ChlServlet.java e o coloque no diretrio sre (para simplificar este exemplo, no colocaremos o servlet em um pacote; mas aps este, todos os outros exemplos com servlet neste livro estaro em pacotes).importjavax.servlet.*;importjavax.servlet.http.*;importjava.io.*; public void doGet(HttpServletRequestrequest,HttpServletResponse response)publicclass ChlServlet throwsextends HttpServlet IOException{{ ~ PrintWriter out ~ response.getWriter(); ou t .pr in tln (" " + rrrJl4.L IPJSf;l"it/.t) ""+vw, PI"t)51"fJ.""(J. Java. " J ";. e"",J l""HF s Chapterl Servlet" +;1"1J!t)+ "
" + today + "" + ""); IV! java.util.Datetoday ~ new java.util.Date(); "46 ti! w,es""(J?8Crie um deployment descriptor (DD) chamado web.xml e ponha-o no diretrio ete.c..- (J1tIJ. clfJ.Sse J4VIJ.. ChapterlServlet-11"", e IIsad"IIIJ efew,fl1+1Jli! 1Iw, "I"Sdtll$ selvle-f.s. p.n"r(~ 4(jC{;jl+4/~ellfi Internalnamel I~sele de ~{;jiJ{;jw,(! foo.Servletl flJ Internal name 2foo.Servlet2 .................Ii! Internalname lc~ss /Publicl tl ti e1ew,el+/ ~ lisa ItI, IS+tlftl I.IIP~~li!: ti Ijt:;w,f! t ftl,I4 Internal name2/Public2 ;I Z.I.ISI WtlJcllilJS 11048 2 79. arquitE1tW"a de alto nvelMas espere! retlt tltais coisa que voc pode fazer COtlt o UUAlm de mapear URLs aos servlets verdadeiros, voc podeusar o DD para personalizar outros aspectos da sua aplicao,incluindo atribuies de segurana, pginas de erro, bibliotecasde tags, informaes sobre a configurao inicial e, se for umservidor J2EE completo, voc pode inclusive declarar que o de,p19fmentde,SCtlpt9l"estar acessando enterprise javabeans especficos. (DD) 9te,l"e,ce,umNo se preocupe ainda com os detalhes. O ponto crucial,por enquanto, que o DD oferece uma manira de me,cUllsm9 ~doolfltad9"modificar declaradamente a sua aplicao, sem alterar ocdigo- fonte! pata a cust9m1zay9 dasPense nisso ... significa que mesmo aqueles que no sosuas apllcly9e,s, se,m t9Cmprogramadores Java podem personalizar sua aplicao Java,sem precisar arranc-Io das suas frias ao sol.n9 c9dlg9--t9nte,!N9 exSbiompethuntlS Idl9tlsr: Estou confuso. Olhando para o DO,voc ainda no tem nada que indique oOs Benefciosdo DO Reduz a necessidade de alteraoverdadeiro nome do caminho do servlet! do cdigo-fonte que j foi testado.Apenas diz o nome da classe. Isto aindano responde pergunta de como oPermite que voc ajuste os recursosContainer usa aquele nome de classe para da sua aplicao, mesmo que vocencontrar um arquivo de classe de um no possua o cdigo-fonte.servlet especfico. Existe ainda UM OUTRO Permite que voc adapte suamapeamento em algum lugar que diga que aplicao de acordo com diferentestal nome da classe, mapeia para tal arquivo recursos (como bancos de dados),em tal lugar? sem ter que recompilar e testar nenhum cdigo.1: Voc prestou ateno. Voc est certo, Facilita a manuteno daspois colocamos apenas o nome da classe informaes dinmicas sobre(totalmente qualificada para incluir o nome do segurana, tais como listas de controlepacote) no elemento . Isso de acessos e funes de segurana.porque o Container tem um lugar especfico Permite que aqueles que noem que procurar por todos os servlets para os sejam programadores modifiquemquais voc especificou um mapeamento no DO. e distribuam suas aplicaes,Alis, o Container usa um sofisticado esquema enquanto voc d mais atenode regras para encontrar um par entre a URLs tarefas mais interessantes. Porque chega da solicitao do cliente, e uma exemplo, se o seu guarda-roupasclasse Java real localizada em algum lugar doest apropriado para uma viagemservidor. Mas entraremos neste assunto emao Hava.um captulo mais adiante (em Distribuio). Porenquanto, o mais importante que voc develembrar que voc pode fazer isto mapeando. 49 80. Bob se corresponde no siteHistria: Job Cot1stri Uit Site de Et1cotrtrosMarcar um encontro est dificil hoje em dia. Quem temtempo, quando tem sempre um outro disco para serdesfragmentado? Bob, que quer uma fatia desse mercadovirtual (o que sobrou, pelo menos), acredita que criar umsite de encontros especfico para nerds o seu passaportepara deixar o emprego Dilbertiano1 que ele tem agora.O problema que Bob j um gerente de software htanto tempo, que ele est, digamos, por fora das prticasatuais de engenharia de software. Mas ele conhecealguns conceitos bsicos, um pouco de Java e j leu umpouco sobre servlets. Ele ento faz um projeto rpido ecomea a escrever o cdigo ... Input your state Handle ~I ~GeekDatesAge OS ~I ~! ~ _ Attributes ~! _ Exceptionsl~_ Refactor DQLQuery Modify your profile:[profile hereJI===~-===__50 caplitulo 2 81. arquitetura de alto nvelEle cotMea a construir utMa poro de servlets ... UtMpara cada pginaEle pensava em ter um nico servlet, cheio de testes if, masdecidiu que servlets separados seriam mais 00 - cada servletdeveria ter uma responsabilidade, como a pgina de questionrio,a pgina de cadastro, a pgina com os resultados da busca, etc.Cada servlet ter toda a lgica de negcio que precisa paramodificar ou ler o banco de dados e exibir o HTML de volta comos dados da resposta do cliente. IIdeclaraesde import public classDatingServletextends Http$ervlet{public voiddoGet(HttpServletRequestrequest, HttpServletResponse response) throws IOException { II a lgica de negcio entra aqui, dependendo II do que este servlet deve fazer II(escrever para o banco de dados, fazera query, etc.) PrintWriter out = response.getWriter(); II escreve a pgina HTML dinmicaout.println( ~something really uglygoes here") ; 101HI1 IonOI 1010100001.0 lQHllOO 010101101101lOllOl1010100001.0f) servle-l-fa~ 4 ?l.le10111100 lClOlOl lClOlOlO(110101.101C101ele precise par3.prtlCe:ssal" a 100101010110101010 InputDQLServlet1001010101S4IiClh{i4 (C4"M4/;,serir (J~SignupServlet101101 101101DoDQLQueryServlet Jat/4 4(J prtIC(Jrlu #tt![J WIOIOOOOIO 1010100 010101 101(1101 Je: t/aJ4s) e:,, 1.0101010 1001010101 web Accept 19nup ervlet1/1714 #tarespt!#tse,server/container10110l1Ja a 145,o.Je10110110101000010pa51;,a Je respal1se,10101000101011010101101010101001010201 AcceptProfiJeChangesServletJ~ clte#t+e MainPageServet InputProfileChangesServJetc~Jij~ t/avoc est aqui ~ 51 82. 80b adiciona JSPsMas fica horrvel e ele acrescetrta os JSPsAquelas declaraes printlnO irritantes para sadade resposta se tomam realmente terrveis muitorapidamente. Ele l sobre os JSPs e decide fazer o design desteJSP est muitocom que cada servlet faa qualquer que seja atranqilo. Agora. o cdigo doservlet est mais claro... cadalgica de negcios de que ele precise (query no servlet roda sua prpria lgica e chama um JSP especfico parabanco de dados, inserir ou atualizar um novotratar o HTML que ser usado naregistro, etc.) e encaminhe a solicitao para resposta, separando a lgica denegcio da apresentao.um JSP, que far o HTML para a resposta.Ele tambm separa a lgica de negcio daapresentao ... e j que ele andou lendo sobredesi~n, ele sabe que separar as preocupaes um Otimo Negcio.II declaraes de import public classDatingServlet extends HttpServlet{ public void doGet(HttpServletRequest request, HttpServletResponse response)throws IOException { II a lgica de negcio entra aqui, II dependendodo que este servlet deve fazer II(escrever para o banco de dados, fazer a query, etc.) II envia a solicitao a uma pgina JSP especfica II em vez de tentar exibir o HTML II junto com os dados de sada }._..-1.., AcceptPrOfileChanlj.~~.sSe~lel InpulSignupJSP AcceplSignupJSP InputProfileChangesJSPAcceplProfileChangesJSP MainPageJSP InpulDQLJSPDoDQLQueJYJSP DoDQLQueryJSP/ lJib ib "J)"O cllf!l;.f.efl"eel;ct.e lilI"IYoVI!J.I"I4J 4t1e~7 e c/tcl). 11t!J !I4L bI:J.f:a I~ s.f.eel;vi tlIYo4 slJlil+ali" Hrrp POSrfal"4 a D"J)$L$vel"].O sel"vtJ,,1" ",ell ct.alYofJ.f!I1CalYol;"t.aJ4 J-sP o.fNprltJ.JlJ, O ,)-sp CtIJl1s+rfJta N:sffJl1se Hrl..-tLliCt+fJ.ji fJ serv1e+; servle+ execv+a a y,tler 1;" btJ.l1ctIJ JfJ.Js e f!11+ifJ.a ~es e t.l Jev()/ve.52 capitulo 2 83. arquitetura de a/to nvelMas etrto o seu aiMigo diz: "Voc ESr usando MVC, certo?Kim quer saber se o servio de encontro pode ser acessadoa partir de uma aplicao GUI Swing. Bob diz: "No,eu no pensei nisso." Ento, Kim fala: "Bem, isso no problema porque eu estou certo de que voc usou MVC,ento ns podemos preparar num instante um cliente GUISwing, que possa acessar as classes lgicas de negcio."Bob: "Glup."Kim: "No me diga ... voc no usou MVC?"Bob: "Bem, eu separei a apresentao da lgica denegcio ..."Kim: "J um comeo ... ma~-ne adivinhar ... a lgicado seu negcio est toda dentro de servlets?!"Bob percebe, rapidamente, porque ele se tomou gerente.Porm, ele est determinado a fazer isto corretamente. Ento,ele pede a Kim uma explicao bem rpida sobre MVC.Com o MVC a lgica de negciono fica apenas separada daapresentao ... ela sequer sabe queEXISTE uma apresentao.A essncia do MVC que voc pode separar a lgica denegcio da apresentao, mas ponha algo entre elas para que algica de negcio possa agir sozinha como uma classe Javareutilizvel, sem precisar saber nada sobre a view.Bob estava quase l, separando a lgica de negcio daapresentao, mas sua lgica ainda tem uma forte ligaocom a view. Ou seja, ele misturou a lgica de negcio noservlet, o que significa que ele no poder reutilizar sualgica em outros tipos de view (como um GUI Swing ouat mesmo uma aplicao wireless). Sua lgica est presaem um servlet, quando deveria estar em uma classe Javastndalone que ele pudesse reutilizar!voc est53 84. o padro de design MVCo Padro de Projeto Model~View~ComrollerMVc) cot1serta isto (Se Bob tivesse entendido o padro de designMVC, ele saberia que a lgica de negcio nodeveria estar inserida em um servlet. Ele teriapercebido que com a lgica de negcio embutidao M9del*VleW*C9ntt91letno servlet, ele ficaria "em maus lenis" casoalgum dia tivesse que acessar o servio de encontro (MVC) tet1tl l 1991clde neg9c19de uma maneira diferente. Como na aplicao t9tl d9 set"let e l 09190lemGUI Swing. Ns falaremos mais sobre o MVC (eoutros padres) mais adiante, mas voc precisa de um ~~M9de19" - uml llrtlglum rpido entendimento agora, pois o tutorial queconstrumos no final deste captulo usa o MVC.dlSseJl"l, plqnl e teutJl1z"e1.Se voc j est familiarizado com ele, ento voc O lVl9de19 l 09mblnly9 d9S~sabe que o MVC no especfico para servletse JSPs - a clara separao da lgica de negcio dadld9S de neg9c19 (09m9 9 e5tld9apresentao igualmente vlida para qualqueroutro tipo de aplicao. Porm, com aplicaesde um 0ltt1nb9 de 09mptls) eweb realmente importante, porque voc nunca 95 mt9d95 (tegtl5) Lue 9tetlm deveria considerar que sua lgica ser acessada apenas da web! Estamos certos de que vocnesses dld9S. trabalha neste negcio h tempo suficiente para saber que a nica garantia em desenvolvimento de software : a especijicao sempre muda. o MVC no mundo Servlet & JSPCONTROLADORRetira da solicitao do usurio OSdados de entrada e interpreta o queeles significam para o modelo.Obriga o modelo a se atualizar edisponibiliza o estado do novo modelopara a view (o JSP). VIEWMODELO Responsvel pelae o estadoverdadeira lgica Abriga a do modelo. Em apresentao. Ela outras palavras, ele conhece recebe o estado do modelo doas regras para obteno e atualizao do estado. Controlador (embora O contedo de um Carrinho de no diretamente; oComl?ras (e as regras sobre o Controlador pe osque fazer com isso) seria parte dados do modelo em um Vlewqo Modelo no MVC. lugar onde a View possa E a nica parte do sistema encontr-Io). Tambmque se comunica com o a parte que recebebanco de dados (embora ele os dados de entrada provavelmente use outro do usurio que volta ao objeto para a verdadeira Controlador.comunicao com o DB, mas guardaremos este padro para mais tarde ...). 54 captulo 2 85. arquitetura de alto nvelAplicando o padro MVC na aplicao de encontrosPois bem, Bob sabe o que precisa fazer. Separar a lgica denegcio dos servlets e criar urna classe Java normal paracada um ... para representar o Modelo.Com isso, o servlet legtimo ser o Controlador, a novaclasse para a lgica de negcio ser o Modelo e o JSP sera View. 1111101lGllCllGUOJ. -0/ 10101MClllll 111101001l0>-0-I1G100 010>-0101010 1 1"101_.""""" ~ Ej~ J>ooo(},,,,,, DoDQLQueryJSP -.::."?" "li" ... ;.1voc est 55 86. sim, mas isso um bom ?Neste tMotMemo, seu atMigo KitM d utMa olhadaKim aparece e diz que embora esse SEJA um projetoMVC, ele ruim. Claro, a lgica de negcio foi colocadaem um Modelo, e os servlets atuam como Controladorestrabalhando entre os Modelos e as Views, para que oModelo possa be brain-dead about the Views2 Isso tudo muito bom. Mas olhe para todos aqueles pequenos servlets. Que projeto mais fraco! ObserveO que elesfazem mesmo? Agora que a lgica de negcio todos estes cdigos duplicados em cada servlet. Voc tem queest "guardada" com segurana no Modelo, o Controlador adicionar o mesmo cdigo geraldo servlet no est fazendo nada alm de alguns trabalhos de aplicao, como segurana, nacomuns para esta aplicao e, ah sim, ele atualiza o Modelomaioria dos servlets.e coloca a View para funcionar.Mas o pior que toda aquela simples lgica de aplicao o o repetida em cada um daqueles malditos servlets! Sealgo requerer alterao, ter que ser alterado em todos oslugares. A manuteno de um trem destroado est por vir."Sim, eu no gostei muito deste cdigo duplicado", dizBob. "Mas o que mais eu posso fazer? Naturalmente,voc no quer que eu ponha tudo em um simples servletnovamente? Como isso funcionaria?"56 87. de a/to nvelExiste utMa resposta?Ser que o Bob dev ria volta para apenas um Controladorde servlet para evitar cdigo duplicado? Isso seria um modelo 00 ruim, pois os servlets estorealmente fazendo coisas diferentes? O Keanu Reevesluta mesmo Kung Fu? D oEXERCITE SUA MENTEDeixe isto para voc meditar. o que ns vamos fazer.O que voc acha? Voc sabe a resposta? EXISTEuma resposta? Voc concordaria com Bob edeixaria os servlets como eles so, ou colocariao cdigo dentro de um nico Controlador deservlet? E se voc usar mesmo apenas umControlador para tudo, como ele saber qualModelo e View chamar?A resposta para esta pergunta no vir antesdo final deste livro, ento pense nisso poralguns momentos e depois coloque numathread em background na sua mente ... voc est aqui...57 88. captulo 2 - reflexo Usando o MVC no mundo servlet & JSP, cadaum destes trs componentes (JSP, classe Java eServlet) desempenha um papel MVC. Circule"M", "V" ou "C", dependendo de qual parte doMVC o componente executa. Circule apenas umaletra por componente. MO Container oferece sua aplicao web Vsuporte em comunicaes, gerenciamentodo ciclo de vida, suporte a multithread, Csegurana declarada e suporte para JSPs,para que voc possa se concentrar em suaJSPprpria lgica de negcio.O Container cria um objeto request Me response que os servlets (e outras Vpartes da aplicao) podem usar paraconseguir informaes sobre a request e Cenviar dados ao cliente. non-servletUm servlet tpico uma classe que Java c1assestende o HttpServlet e sobrepeum ou mais mtodos de servio quecorrespondem aos mtodos HTTP Mativados pelo browser (doGetO, VdoPostO, etc.). CO distribuidor pode mapear uma classe deservlet servlet para uma URL, que o cliente podeusar para solicitar tal servlet. O nomepode ser completamente diferente doverdadeiro nome do arquivo da classe.8O que as letras MVC representam design MVC? no padro deM significa_V significa_C significa_58 captulo 2 89. arquitetura de alto nvel Ap9nte seu lpisQuem o responsvel? Preencha a tabela abaixo, indicando se o servidor, o container ou um servlet o mais responsvel pela tarefa listada. Em alguns casos, mais de uma opo pode ser verdadeira para a tarefa especificada. Para justificar, acrescente um breve comentrio descrevendo o processo.TarefaServidorContainer Servletdinmicos HTTPresponse objetos request e no DDelemento responsesolicitaes Cria osConverte HTTP no de vidaGerencia umciclos DD contedos umaEncontra URLsobjeto response emConhece onova tbreadTem uma os preparo para o comIniciaum nome que coincide objeto oasCoordena referncia de para tratarumaAcrescenta objetos serviceOe responseApaga os mtodo requestobjeto responseChama o o HTML ao voc est aquili> 59 90. servlet e exerccio DDms de G-ela-deltLUm servlet funcionando e o seu DD so misturados emuma frigideira. Voc capaz de unir os pedaos de cdigorecortados direita com a listagem incompleta esquerda,a fim de criar um servlet e um DD que funcionem e cujaURL termine com /Dice? possvel que alguns cdigos direita no sejam usados!- Servlet public class extendsHttpServlet { public void doGet(throws IOException{String dIInteger.toString((int)((Math.random()*6)+I;String d2Integer.toString( (int) ((Math.random() *6) +1;out.println(" " + "HFs Chap 2 Dice Rol1er" + "

" + dI + " and " + d2 + " were rolled" + " ");-DDteS+-4 #/;6 4 +-~de det+-vtfI. ServletRequestrequeStPrintWriter out response.getWriter(); HttpServletResponse response) ServletResponseresponse, HttpServletRequest request, PrintWriter out request.getWriter() ; voc est aqui ~ 63 94. Dois objetos, dois blocosUl1 PeploYl1ettt Pescriptor(PP) "funcionandoNo se preocupe com o que isto realmente significa (voc veristo em outros captulos e far testes). Aqui, ns quisemos apenasdemonstrar um DD web.xml que funciona de verdade. Ficaramfaltando muitos pedaos a serem nseridos na tag de abertura nos outros exemplos deste captulo. (Voc pode perceberporque ns geralmente no nclumos isso em nossos exemplos.)A forma que geralmente mostramos no livro < Ch3Beer com.example.web.BeerSelect Ch3Beer /SelectBeer.do A forma que REALMENTE funcionaL Ch3Beer com.example.web.BeerSelect Ch3Beer /SelectBeer.do 642 95. arquitetura de a/to nvelCot10 o J!EE cabe "isso tudoUm set"Id9t de aplIcac;9O Java 2 Enterprise Edition meio um "superspec"- ele incorpora outras especificaes, incluindo aJ2EE IncluI tant9 9 C9ntmnet para o Web Container.2.4 e a especificao JSPJ2EE Istoespecificao Servlets Porm, a especificao 2.0. 1.4Web7 C9m9 9 C9ntain et EJB.1"tambm inclui a especificao Enterprise JavaBean 2.1para o Container EJB. Em outras palavras, o Container O ]9mcat um C9ntmnetweb para EJB para componentes de negcios.e oContainer componentes web (Servlets e JSPs) Web7 mas N11.0 um set"Id9t AUm servidor ter aplicao Contalller web, como umo J2EE deve de tanto um tota~ente compatvel comde apllcadi9 J2EE c9mplet9. TContai~er EJB (al~ de outras coisas, c?mo uma JNDIe uma lmplementaao JMS). O Tomcat e apenas umUm set"Id9t J2EE 1.4 IncluIespecIflcaao J2EE que se referem acordo s :pores daCont~iner -:eb! Embora esteja de ao Contamer web. a especltlcadi9 Set"let T2.4 7O Tomcat um Container web e no uma aplicao a especltlcac;9 JSf 2. o e aJ2EE completa, pois ele no possui um Container EJB.especltlcac;.9 ElB 2.1. iJ2EE ApplicationServerr:Ento o Tomcat um Containerweb standalone ... isso significa queo Resin. Geralmente, os Containeresweb standalone so configurados paratambm existem Containeres EJBtrabalharem com um servidor HTTP (como ostandalone? Apache), embora o Container Tomcat possaatuar como um servidor HTTP bsico. Mas,para a funo de servidor HTTP, o Tomcatnem se aproxima da robustez do Apache.1: Antigamente, digamos, no anoPor isso, as aplicaes web no-EJB2000, voc encontrava servidores J2EE mais comuns usam o Apache e o Tomcatcompletos, Containeres web standalone e configurados juntos - com o Apache comoContaineres EJB standalone. Hoje, porm,Servidor HTTP e o Tomcat como Container.quase que todos os Containeres EJBAlguns dos servidores J2EE mais comunsso parte de servidores J2EE completos, so o Weblogic da BEA, o JBoss AS deembora existam ainda poucos Containeres cdigo aberto e o WebSphere da IBM.web standalone, incluindo o Tomcat evoc est aqui ~65 96. Minitutorial do MVCCriando e distribuindo uma aplicao Web MVC. Chegou ahora de colocar a mo na massa e escrever um formulrio HTML,um controlador de servlet, um modelo (classe Java simples),um deployment descriptor XML e uma view em JSP. hora decriar, distribuir e testar. Antes, porm, voc dever configurar seuambiente de desenvolvimento - uma estrutura de diretrios para oprojeto que esteja separado da sua aplicao real distribuda. Emseguida, voc ter que configurar o seu ambiente de distribuio,de acordo com as especificaesdo servlet e do JSP, e asexigncias do Tomcat. A partir da, voc estar apto a comear aescrever, compilar, distribuir e executar. Concordo, construmosuma aplicao bem pequena. Porm, quase NO existe aplicaoque seja to pequena e use o MVC. Afinal, a aplicao pequenade hoje o sucesso da internet de amanh ... este um novo captulo. l 97. objetivos do exame oficial da SunoDistribuio Aplicao Web Notas sobre a Abrangncia:2.1 Construir a estrutura de arquivo e diretrios de Todos os objetivos nesta seo so abordadosuma aplicao que possa conter (a) contedocompletamente no captulo sobre Distribuio;esttico, (b) pginas JSP, (c) classes servlet,aqui daremos apenas uma primeira olhada. Este(d) o deployment descriptor, (e) bibliotecas de o nico captulo com um tutorial completo, do incio ao fim. Portanto, se voc pul-Io, podertags, (f) arquivos JAR e (g) arquivos de classe ter problemas mais tarde, quando for testarJava. Descrever como proteger os arquivos de alguns outros exemplos nos prximos captulosrecursos do acesso HTTP. (no repetiremos cada detalhe novamente).2.2 Descrever o propsito e a semntica de cadaAssim como nos anteriores, voc no precisarum dos seguintes elementos do deployment se preocupar em memorizar o contedo destedescriptor: error-page, init-param, mirne- captulo. Apenas v e faa.mapping, servlet, servlet-class, servlet-mapping, servlet-name e welcome-file.2.3 Construir a estrutura correta para cada umdos seguintes elementos do deploymentdescriptor: error-page, init-param, mime-mapping, servlet, servlet-class, servlet-namee welcome-file.68 captulo 3 98. praticando com o MVCVattos cot1struir utta (pequetW aplicao de verdadeNs vimos a funo de um container, falamos um pouco sobredeployment descriptors e demos uma primeira olhada na arquitetura doMVC Model 2. Mas voc no po.de ficar a sentado e lendo o dia todo -agora hora de realmente jazermos alguma coisa.Os quatro passos que seguiremos:O Revisar as views doe usurio (o quedeobrowser mostrar)a arquiteturaalto nvel. 8 Criar o ambiente de desenvolvimento que usaremos neste projeto (que voc poder usar para qualqueroutro exemplo no livro). Gl e Criar o ambiente de distribuio que usaremos neste projeto (que voc poder usar para qualquer outroexemplo no livro). i~~f~_~_~--...01_ ~o Desenvolver e testar repetidas vezes os vrios componentes de nossa aplicao. (Tudo bem, isto mais uma estratgia do que um passo.)Nota: Ns recomendamos desenvolvimentose testes repetitivos, embora nem sempremostraremos todos os passos aqui.voc est aqui ~ 69 99. A view do usurioA View do Usurio para a aplicao "&eer Advisor"(Especialista eltt Cervejas)Nossa aplicao ser uma esp~cialista em cervejas. Os usuriospodero navegar em nossa aplicao, responder perguntas ereceber conselhos valiosssimos sobre cervejas. ~ . ~t~ HrM.l_ eser:z.s.f-a p~tP1a ti": Beer Seleetion PageN!.sps.f-aeJ?vio,PldlJCIJ~"Select ooer characteristicsClJir ~lIe Color: {light .; j s.f-alI~a IJ clJPlselt. C(l~ base PIo.I~dI) lISlIfJ.li6.Beer Recommendations JSPtry: Jacks Pale Aletry: Gout Stoutf:Por que estamos criando uma aplicao que d conselhos sobre cervejas? 1:Depois de uma exaustiva pesquisa de mercado, conclumos que 90% dos nossos leitores apreciam cerveja. Para os outros 10%, basta simplesmente substituir a palavra "cerveja" por "caf".70 capitulo 3 100. praticando com o MVCAqui est a arquitetura ...Ainda que esta seja uma aplicao bem pequena, vamosconstru-la usando uma arquitetura MVC simples. Desta forma,quando ela se tomar O SITE mais badalado da web, estaremosprontos para aument-la.Container 1 - O cliente solicita a pginajorm.html. -~ servlet C(J;r/-lcladcl" 2 - O Container vai buscar a pginajorm.html. 3 - O Container retoma a pginaao browser, o usurioresponde s perguntas doformulrio e...A-pe"llJ.s tllJI componente D/J Java tJldec.f. BeerExpertJavlJ, sllty.>les). 4 - O browser envia osdados da solicitao aocontainer. Container 5 - O Container encontra oservlet correto baseadona URL e passa asolicitao para o servlet. 6 - O servlet pede ajuda aoBeerExpert. 7 - A classe responsvelretoma uma resposta, a componentequal o servlet adiciona aosolicitao BeerExpertobjeto solicitao. 8 - O servlet encaminha asolicitao ao JSP. 9 - O JSP recebe a resposta doobjeto solicitao. 10 - O JSP gera uma pginapara o Container. 11 - O Container retoma apgina para o usurio feliz.voc est 71 101. ambiente de desenvolvimentoCriatldo O seu attbietttede deset1volvittetttoExistem vrias formas de voc organizar a sua estrutura de diretriosde desenvolvimento, mas esta a que recomendamos para projetos depequeno e mdio portes. Na hora de distribuir a aplicao, copiaremosuma poro disso para onde quer que o nosso Container especficoqueira. (Neste tutorial, usaremos o Tomcat 5.) ru "" .- pl"eclstI. I,.v"ce 410.6 Jes-feJll"e-!-:1"16---7 Sevs CtrJlI1flJl1t:l1ffS Vrf!W es-!-:-I-rctrJs e pal"tI. 6 -!-V-!-61"I"o.I) ..... JinlA",i(;sfleal?! a~tlr.jli. .... rr~vi V6Ce c161:f1. 6S (U3V1vtrJSJA-Je Je -hI"Cfi"S (J" result.jsp form.html Sfl"vle-!-rJe-vs).J Tr a~vr Sve fica Sf!V f..XfIl1fItJS Je fI.;vnsJe C4I1fijvlo";.C6l11flJnel1-H::Svtew. BeerSelect.javaBeerExperLjavaBeerSeleel.elassBeerExperLelassFi. duave eS-!-lAl?!as tlSfl.I1J a ~jJeepfJ.I"e~ve Sf!PD.ID."lJSS CIJ"fIJI?f!I?+es d"eS-!-l"v-!-vI"o.-po.Jl"a pal"a Pfl.C6+e;clJl?-!-I""adal"ellJS c""fIJI1f!I?+es d "t>Jel.pal"tI. ~ve ps StI."S b+el" S Ibenef,cl6s 41l"hiIU"s elele:- I"5anl";4,;a el" pl"~e-l-6"7 5eN!l?crD."f!I1.f. ela 1?D.",espD.ce p61"-!-d"Maele e I"f!lI-hlt";aj72 capitulo 3 102. praticando com o MVCCriat1do O atMbiettte de distribui~o !s+e ti dl"d:l"itJt.(JIrf1el webl.Distribuindo o servletPara distribuir o servlet, faa uma cpia do arquivo .class e mova-o para o diretrio/Beer-vlIWEB-INF/dasses/comlexample/web/ na estrutura de distribuio.Testando o servletFI Ed" WidHlSI hdtM%cd tomcatI - Reinicie o tomcat!%bin/shutdown.sh% bin/startup.sh2 - Abra seu browser e digite: http://localhost: 8080/Beer -vI /form.htrnl http://localhost:80803 - Selecione uma cor de cerveja e diqueem "Submit"Beer Seleetion PageSckct bcen;l1arncterisocs4 - Se o seu servlet estiver funcionando, Color::ug~voc dever ver no browser a resposta doservlet parecida com: Conselhos sobre Escolha de Cerveja Voc escolheu a cerveja marrom voc est 81 111. classe modeloCot1struit1do e testat1doa classe tModeloNo MVC, o modelo tende a ser o "back-end" da aplicao. Em geral, o sistematradicional que est sendo exposto na web atualmente. Em muitos casos ele apenas umcdigo Java simples, sem saber que talvez possa ser chamado pelos servlets. O modelono deve ficar restrito a ser usado por somente uma nica aplicao, portanto ele deveficar dentro dos seus prprios pacotes de utilidades.As especificaes para o modeloSeu pacote deve ser com.example.modelSua estrutura de diretrios deve ser /WEB-INF/c1asses/com/example/modelEla disponibiliza um mtodo, getBrandsO, que obtm uma cor preferida (comoum String) e retoma uma ArrayList de marcas de cervejas recomendadas (tambmcomo Strings).Construa a classe de testes para o modeloCrie a classe de testes para o modelo (sim, antes de construir o modelo em si). Aqui,voc est por sua prpria conta, pois no temos uma neste tutorial. Lembre-se, o modeloainda estar no ambiente de desenvolvimento quando voc test-Io pela primeira vez - como outra classe Java qualquer, e voc pode test-Io sem o Tomcat.Construa e teste o modeloOs modelos podem ser extremamente complicados. Eles freqentemente envolvemconexes com bancos de dados tradicionais e chamadas a lgicas complexas. Aqui estnosso sofisticado e inteligente sistema baseado em regras que d conselhos sobre cerveja: package com.example.model; import java.util.*; public class BeerExpert { public List getBrands(String color)List brands = new ArrayList();if (color.equals ("amber")) { brands.add("JackAmber"); C4i11l Cap+VIIl."4S as ,;;ftU"tl.gDes brands.add("RedMoose");especiQ!"~flI.dtl.s e clJ"P1l!xas dlJ l!Xl!"P!1J da celv~4.J } else { vSIJ.IdlJ exples sDes ct:JIdiciIJIais allalsadfl.s.brands.add("JailPale Ale");brands.add("GoutStout") ; } return(brands);% cd beerVl% java -d classessrc/com/example/model/BeerExpert.java82 3 112. praticando com o fvlVCMelhorando o servlet para chatMar o tModelo,paraobtertMos conselhos VEVE~VAVE...Nesta segunda verso do servlet, iremos melhorar o mtododoPostO para chamar o modelo para oferecer o conselho (a versotrs far com que o conselho venha de um JSP). As alteraesde cdigo so triviais, mas a parte importante entender aredistribuio da aplicao melhorada. Voc pode tentar escrever ocdigo, recompilar e distribuir por sua prpria conta, ou ento virara pgina e seguir adiante ...AP9nte seu lpISMelhorando o servlet, verso doisEsquea os servlets por um minuto, vamos pensar apenas em Java.Quais so os passos que devemos tomar para realizar estas tarefas? 1. Melhorar o mtodo doPostO para chamar o modelo.2. Compilar o servlet.3. Distribuir e testar a aplicao atualizada.voc est 83 113. chamando o modelo para o controlador servleto cdigo do servlet verso doisLembre-se, o modelo apenas Java simples, ento o chamaremoscomo faramos para qualquer outro mtodo Java: instanciar aclasse modelo e chamar o seu mtodo! packagecom. example. web; AJ se eS3f1esa lJ i"Y>tJt; parti. tJ PQC..fe lJIlille " import import com. example .model. *; javax.servlet.*; V-8eerl.xper";"es";": lP7seri(Jl). importjavax.servlet.http.*; importjava.util.*;.J CtIfJ.I1"lJ ulI;a I1"V4 cltJ.sse. importjava .io. * ; / S.ffJ.IMS 1I;1IJ"iIict/,lUJlJ servle";" (Jrij/P7al e l1" publicclass BeerSelectextends HttpServlet (publicvoid doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletExceptionString c = request.getParameter("color");List result be be.getBrands(c);BeerExpert = = new BeerExpert();~~ II1S";"fJ.l1clfJ.1 4 classe 8eet1..J(fel;fi!response.setContentType("text/html");PrintWri ter out = response. getWri ter (); C tllI;I lJ,eli";"8,,,s ()ttll1out.println("BeerSelection Advice
");Iterator it = result.iterator();while(it.hasNext({out.print("
try: " + it.next(; 114. praticando com o MVCOs pritlcipais passos para o servlet verso doisTemos duas tarefas importantes a fazer: recompilar o servlet edistribuir a classe modelo.Compilando o servletNs usaremos o mesmo comando compilador que usamos quandoconstruimos a primeira verso do servlet.FI Edl 1" d Hei PI GoA-3v/~ esh."t6s"ece!JeI?J6V/IfIa..J.,..l!JlI.J.1J IJtje.J.6 S6/tcl.J.lJ.j6. dlJ !t5V"t J4V4 plJ.d,." dell.J."lJ das fJ"t PIJVClJ "tais adl411.fe;+;3s (clJl?t.eddlJCIJ"t1Jflep/i"cfJ."e"t6s.J.(/dlJ s66N!ClJd~lJ scrtp.J.te.J.).a..J.,..l6",.J.IJS e C"tlJ cl?se5""N.IJS,,6.fe,. IJ IJtje.J." SIJ/lci.J.lJ.jlJDistribuindo o JSPNs no compilamos o JSP (o Container faz isso naprimeira solicitao). Mas ns temos que:1- Cham-Io de "result.jsp".2- Salv-Io no ambiente de desenvolvimento, em: /webl.3- Criar uma cpia dele no ambiente de distribuio, em: /Beer-vII. result.jsp form.html voc est 87 117. despachando uma solicitao para o JSPMelhorat1do O servlet para "chatMa(~O JSP (verso trs)Neste passo, modificaremos o servlet para "chamar" o JSPpara gerar o resultado (view). O Container providencia ummecanismo chamado "request dispatching", que permiteque um componente gerenciado pelo Container chamepor outro. assim que usaremos: o servlet receber ainformao do modelo, ir salv-Ia no objeto solicitao eentregar a solicitao para o JSP.Mudanas importantes que devemos fazer noservlet: I - Adicionar a resposta do componente modelo ao objeto request, para que o JSP possa acess-Ia. 2 - Pedir ao Container que encaminhe a solicitao para "result.jsp" (passo 5).I - O browser envia os dados dasolicitao para o container. 2 - O Container encontra o servletContainer correto baseado na URL e passa a solicitao ao servlet. 3 - O servlet chama o BeerExpert para ajudar. 4 - A classe responsvel retoma uma resposta, que o servlet adiciona ao objeto solicitao. 5 - O servlet despacha para o JSP.6 - O JSP recebe a respostaoriginada do objeto solicitao. solicitao 7 - O JSP gera uma pgina para o Container.8 - O Container retoma a pginapara o usurio feliz.88 118. praticando com o fvJVCo cdigopara o servlet verso trsEis aqui o que modificamos no servlet para adicionar aresposta do componente modelo ao objeto solicitao(assim o JSP poder recuper-Ia) e como pedimos aoContainer para despachar ao JSP.paekageeom.example.web;import com.example.model.*;import javax.servlet.*;import javax.servlet.http.*;import java.io.*;import java.util.*;publie elass BeerSelect extendsHttpServlet (publie voiddoPost(HttpServletRequest request,HttpServletResponseresponse) throws IOExeeption,ServletException(String c ~ request.getParameter(~color");BeerExpert be ~ new BeerExpert();List result ~ be.getBrands(c); tt161"4 ~vetJ JSPVfJljf.I"til.1" til 1"esUI.f-{).(/c Jevehs I"e~vel" J(J;Iiresponse.setContentType(~text/html");)I I PrintWriter out = response. getWriter () ;~sel"vld61"e.sUI.f-4Jti JtiIIout. println (~Beer SeleetionAdviee
"); 1;fl.l1sll"WiG.~s t"" ...pfJJ"fl. Zue VCe fJ.t;;JtJ. P"SSt1, A-dicitJl1fJ. u"" l6e.f-6 s6Itct.f-tJ.jfICi request.setAttribute(~styles", result);.J / I 1_~VSfJ.I".NTe 3ve (j pI"CCUI"fJ.l1dCiPt:J1" RequestDispatcherviewrequest.getRequestDispatcher(~result.jsp");~ . 1I1s+fJ.J"JclQ.VI!?! view. forward(request,response);J. 1I~~t~4~~~fJ SfJ..,1"t!1JUt!S.f- dispa.f-ct.el" pal"ti. pf.Jll" til.Q C"I1.f-fJ.i;;f.1" ave li7i(;tfJ.lt-;t! "J.sfJ., f!I1VifJ.I1J6 paN. e/e til.scllcl-l-a{iJe fJ. l"t!sp"S.f-u.. voc est aqui...89 119. comple, distribuae testeCotMpile,distribua e teste a aplicao final!Neste captulo, construmos uma aplicao MVC completa(embora pequena), usando HTML, servlets e JSPs. Voc jpode incluir isso no seu currculo.Compilando o servlet Usaremos o mesmo comando compilador que usamos antes: d" WiR I % cd beerVl % javac -classpath /Users/bert/Applications2/tomcat/common/lib/ servlet-api.jar:classes:.-d classes src/com/example/web/BeerSelect.javaDistribuindo e testando a aplicaoAgora hora de redistribuir o servlet.1 - Mova uma cpia do arquivo .class do servlet para ../Beer-vlIWEB-INF/c1asses/comlexample/web/(novamente, isto ir substituir o arquivo .class da verso dois anterior).2 - Feche e reinicie o tomcat.3 - Teste a aplicao via form.html.Beer Recommendations JSP90 captulo 3 120. praticando com o MVCTudo bem, ento agora ele sabe fazer uma aplicao MVC, mas ele ainda no tem nenhuma idia de como usar a linguagem JSP ou JSTL. Eleno sabe nem usar uma tag customizada, nem umItro. E eu o f1agrei escutando um CD do Weezer ... e isso foi DEPOIS daquele lbum verde. Ele aindtem MUITO o que aprender ...Ait1da h tltuitoO que apret1der.A festa acabou. Voc teve trs captulos inteiros para curtir,escrever um pequeno cdigo e revisar tudo sobre solicitao/resposta HTTP.Mas ainda existem 200 perguntas preparatrias esperando por vocneste livro. E elas comeam no prximo captulo. A menos quevoc j esteja familiarizado com desenvolvimento e distribuio deservlets, voc no deveria virar a pgina antes de realmente jazer otutorial deste captulo.No que estejamos tentando pression-Io, ou faz-Io se sentirculpado, ou algo parecido ... voc est aqui ~ 91 121. Sendo um Servlet Ele usou uma solicitao GET para atualizar o banco de dados. A punio ser a mais severa ... sem aulas de "Iogacom Suzy" por 90 dias.Servlets vivem para servir clientes. A funo deum servlet receber uma solicitao do cliente e devolveruma resposta. A solicitao talvez seja simples: "traga-mea pgina de Boas-vindas". Ou pode ser complexa: "Finalizeo processo do meu carrinho de compras." A solicitao trazconsigo dados cruciais e o cdigo do seu servlet tem quesaber como encontr-Ias e utiliz-Ias. A resposta leva ainformao que o browser precisa para montar uma pgina(ou baixar alguns dados) e o cdigo do seu servlet tem quesaber como envi-Ias. Ou no ... em vez disso, seu servletpode decidir encaminhar a solicitao adiante (para outrapgina, servlet ou JSP).este um novo capitulo" 93 122. objetivos do exame oficial da Suno Modelo de Tecnologia Notas sobre a Abrangncia:do Servlet Todos os objetivos desta seo so cobertos1.1 Para cada um dos Mtodos HTTP (como GET, completamente neste captulo, com exceoPOST, HEAD e assim por diante), descreverda parte dos cookies, no objetivo 1.3. Grandeo propsito do mtodo e as caractersticas parte do contedo deste captulo foi comentada no captulo dois, mas l ns dissemos: "No setcnicas do protocolo do Mtodo HTTP, preocupe em decorar isto. "listar triggers que possam levar o cliente Neste captulo, voc TEM que ir devagar,(geralmente um browser) a usar o Mtodorealmente estudar e memorizar o contedo.e identificar o mtodo HttpServlet que Nenhum outro captulo cobrir estes objetivoscorresponda ao Mtodo HTTP.com detalhes; ento, esta a hora.Faa os exerccios, revise o material efaa seu primeiro teste preparatrio nofinal deste captulo. Se1.2 Usando a interface HttpServletRequest,voc no conseguir pelo menos 80% das respostasescrever o cdigo que retira da solicitao corretas, volte para descobrir o que voc deixouos parmetros do formulrio HTML, a escapar, ANTES de passar para o captulo cinco.informao do header da solicitao HTTP Algumas das perguntas do teste preparatrio queou os cookies. fazem parte destes objetivos foram colocadas noscaptulos 5 e 6, por requererem um conhecimentoadicional de alguns assuntos que no explicamos1.3 Usando a interface HttpServletResponse, at aqui. Isto significa que teremos um nmeroescrever o cdigo que cria um headermenor de questes preparatrias neste captulo epara a resposta HTTP, configura o tipo de maior nos prximos, evitando test-lo naquilo quevoc ainda no viu.contedo da resposta, recebe um streamde texto para a resposta, recebe um streambinrio para a resposta, redireciona umasolicitao HTTP para outra URL, ouNota importante: enquanto os trs primeirosadiciona cookies na resposta. *captulos abordaram assuntos que servem de base, desta pgina em diante quase tudo o que voc ver est diretamente relacionado ou explicitamente parte do exame.1.4 Descrever o propsito e a seqncia deeventos do ciclo de vida de um servlet: (1) carregar a classe servlet, (2) instanciar o servlet, (3) chamar o mtodo initO, (4) chamar o mtodo serviceO, e (5) chamar o mtodo destroyO.*No falaremos muito a respeito dos objetivos relacionados aoscookies at o captulo que trata das Sesses.94 captulo 4 123. solicitao e respostaOs Servlets so cot1trolados pelo CotttaitterNo captulo dois ns vimos as funes completas do Container na vidado servlet: ele cria os objetos request e response, cria ou aloca uma novathread para o servlet e chama o mtodo serviceO do servlet, passando asreferncias de request e response como argumentos. Aqui vai uma rpidareviso ... o usurioclica em um link que tem uma URL para um servlet. -,Cliente request o Container objetos: "v" que a solicitao para um servlet e cria dois 1) HttpServletResponse 2) HttpServletRequeste --Cliente L o Container encontra o servlet correto baseado na URL da solicitao, cria ou aloca uma thread para a solicitao e chama o mtodo serviceO do servlet, passando como argumentos os objetos request e response. voc est95 124. Servlet no containerA histria cotttitlua...o o mtodoserviceO ..) Cliente descobre qual mtododo servlet chamar,baseado no MtodoHTTP (GET, POST,etc.) enviado pelocliente. doGet(request, response)o clienteenvia umasolicitao HTTP GET,para que o mtodoserviceO chame omtodo doGetO doservlet, passando comoargumentos os objetosrequest e response.e o ..) servlet usa o objetoresposta para escrever aresposta para o cliente .A resposta volta atravs Clientedo Container . requestQuando o mtodoserviceO termina,a thread morre ou Containerretoma para um poolde threads gerenciadaspelo Container. Asreferncias dos objetossolicitao e respostasaem do escopo e elesse do mal (prontospara virarem lixo).O cliente obtm aresposta.96 capitulo 4 125. solicitao e respostaMas a vida do servlet t1o s issoNs fomos at o meio da vida do servlet, mas ainda existem perguntas:Quando a classe servlet foi carregada? Quando o construtor do servlet foiexecutado? Quanto tempo vive o objeto servlet? Quando o seu servletdeve iniciar os recursos? E quando ele deve limp-Ias?o ciclo de vida do servlet simples: existe apenas um estado principal- inicializado. Se o servlet no est inicializado, ou ele est sendoinicializado (rodando seu construtor ou o mtodo initO), sendo destruido(rodando seu mtodo destroyO), ou simplesmente no existe. construtor initO IdestroyOContain~r webClasse~ervlet Objeto 1"ervlet Ihd o CtJl1s-l-rV-ftJI7,Ri/I;tl",J4 sfla elas seserlIle-l- ri/o. (lIcIJt}O i/el/e escrever :Carreoar classe I:::~::Jfi"" CI1S-flfI-I-IJ vse ., po.i/I; Ill1eclJ AServl~t.classC1ll() sev C"flIfJ.i/ffJl).Instanciar o servlet (o c~nstrutor roda)r Ct.41WJ.J apel1fJ.SUM Vi2,i/Vt4nfe tiinitOv"i/s.daselvdj deve c~,eff41rlpe ti ~atl1f!l ct.a~ () setlIiceO.A-3(1t ~ 41Je {; ~etlIle+ p/J,ssa aI>/J,I ar-l-e p J..e: s(la IItJa. serviceO: destrovO o CffJl1-1-at"llf!tct.a1llfl.palR daIadoGetO ocorre cadaanula o mtodo initO na mtodo HTTP (GET, vez que existe umasua classe servlet. DoPOST, etc.) est na solicitao do cliente.contrrio, o mtodo initO solicitao e chama Em um determinadodo GenericServlet roda. o respectivo mtodo momento, voc ter aodoGetO ou doPostO.menos, tantas threadsO doGetO e o doPostOsendo executadas,dentro do HttpServlet quantas solicitaesno fazem nada, ento de clientes houver,voc ter que anularlimitadas pelosum ou ambos. Esta recursos ou polticas/thread morre (ou configurao do colocada de volta em Container. (Voc pode,um pool gerenciado pelo por exemplo, ter um Container) quando oContainer que permita serviceO finalizado. especificar a quantidademxima de threadssimultneas, e quando onmero das solicitaesdo cliente ultrapass-Ia,alguns clientes teroapenas que esperar). 100 captulo 4 129. solicitaoe respostaCada solicitao roda etlt utMathread separada!Voc talvez j tenha ouvido algum dizer coisas como: "Cada instncia doservlet...", mas isto est errado. No existem mltiplas instncias de nenhumaclasse servlet, exceto para um caso especial (chamado SingleThreadModel, denatureza perversa). Porm, ainda no estamos falando desse caso especial.o Container roda vrias threads para processar as vrias solicitaes paraum nico servlet.E cada solicitao do cliente gera um novo par de objetos request e response .. Container sotiCif.cro Hn-pCat1a dte~-h fcebe1I1tlQ +I.feaJSf!p4fat1o.pQ.fa caJI! SlJlict/-afi4 e4 C4/J+fJ1Pitf IJlifjCIJ. /J4V4$tjfftA .eCiJ tAresfcs+tA iJHHf.serv!e+/t.esf~PSe+IJJt:>s3ve serIJ lflftlr+fl.PffS tlcresceP+a . se viJc es-hvel" VSfl.1JtlH.,-.,-? eI"N;s) c(u;J.les e ~e4Jers.102 4 131. solicitao e respostaA lt1icializao do Servlet: quat1do UtM objetotoma-se UtM servleto momento mais orgulhoso da minha vida quando o Grande Mestre Container me transforma em um servlet,criando um ServletConfig para mime chamando meu initO. At ento, eu sou apenas um mero objeto. Mascomo um servlet, eu tenho privilgios especiais (almdo handshake secreto), como a capacidade de logareventos, entregar referncias para outros recursos e armazenar atributos para outros servlets ...Um servlet vai do no existe para inicializado (que na verdade significa pronto paraservir s solicitaes dos clientes), comeando com um construtor. Mas o construtorcria apenas um objeto, no um servlet. Para ser um servlet, o objeto precisa adquirirpadro de servlet.Quando um objeto toma-se um servlet, ele recebe todos os privilgios que se tmquando se um servlet, como a capacidade para usar sua referncia ServletContext paraobter informaes do Container.Porque em algum lugar entre o construtor e o mtodo initO, o servlet est no estado servletSchroedinger*. Voc pode possuir um cdigo para inicializao do servlet, como receberinformao de configurao da aplicao web, ou procurar por uma referncia em outrotrecho da aplicao, que ir dar erro se voc execut-Ia muito cedo na vida do servlet.Contudo, muito simples se voc se lembrar de no colocar nada no construtor do servlet!No h nada que no possa esperar at o initO.* Se sua parte mecnica est um pouco enferrujada,talvez voc queira fazer uma pesquisano 800glepor "Schroedingers Cat" (cuidado: se voc ama animais, no a faa). Quando nosreferimos ao estado Schroedinger, nos referimos a algo que no est nem totalmente morto, nemtotalmente vivo, mas em algum lugar estranho entre ambos.voc est 103 132. ServletConfig e ServletContextQuanto vale para voc "ser um servlet"?o que acontece quandopara c?um servlet vai daqui:o Um objeto ServletConfil:Um objeto ServletConfig por servlet.Use-o para passar informaes de tempode distribuio para o servlet (um bancode dados ou a pesquisa do nome de um No confunda osenterprise bean, por exemplo) que voc no parroetros do queira fazer hardcode no servlet (parmetros , ServletConfig coro init do servlet). veja lst.os parroetros doServletContextl Use-o para acessar o ServletContext.Os parmetros so configurados noNs realmen~e .no fal~~~o~~:f:queisso at o proxlmo capl, sDeployment Descriptor.fundem, vamotantas pessoas se con ra preste plantar uma semente ago . ateno nas diferenas.lh d Pelos nomes:e Um ServletContextComece o . an o " nfi"Um ServletContext por aplicao. (Eles Palavra co gO ServletConfig tem aN" deveriam t-Io chamado de AppContext.)me que lembra "configuraao .no no ,d t po deUse-o para acessar parmetros da aplicaoEle lida com valores ~ eO~~gurou para o (tambm configurado no Deployment . b o que voce c dlStrl til I t) Aquilo que seu Descriptor) . servlet (um por serv e . voc rvlet pode querer acessar e queUse-o como se fosse um quadro de avisos sed mo o nomeno quer fazer hardco e, coIda aplicao, onde voc pode escreverdum banco de dados, por exemp NO. mensagens (conhecidas como atributos) queeI tC nfig nao armetros do Serv e o. as outras partes da aplicao possam acessar Os P N desde que este servlet esteja (mais sobre isto no prximo captulo). mudarao, d ndo Para alter-Ios,distribudo e ro aIUse-o para obter informaes do servidor,voc ter que redistribuir o s~rv et. incluindo o nome e a verso do Container e a O ServletContext dever-se-la cdhamarI NOnos eramverso da API que suportada. AppContext (mas e es na N ) pois h somente um por ate~aoN NO um por servlet. De aphcaao .e .traremos nestequalquer jeito: n.os en tulo _ isto sassunto no proxlmo caplum alerta.104 captulo 4 133. solicitao e respostaMas a VERUAUEIRA fut1~o deUiM Servlet tratar solicitaes. a que a vida do servlet faz diferena.No captulo seguinte estudaremos o ServletConfig e o ServletContext, mas por hora,estamos vendo em detalhes a solicitao e a resposta. Porque o ServletConfig e oServletContext existem apenas para darem suporte nica e Verdadeira Tarefa doservlet: tratar as solicitaes do cliente! Portanto, antes de vermos como os seus objetoscontexto e configurao podem ajud-Io em seus trabalhos, teremos que voltar umpouco e rever os fundamentos da solicitao e resposta.Voc j sabe que a solicitao e a resposta so passadas como argumentos para o mtododoGetO ou doPostO, mas que poderes estes objetos request e response oferecem? O quevoc pode fazer com eles e por que voc se importa com isso?Coloque o nome nos Container Web Classe ServletObjeto Servlettrechos em branco (ascaixas vazias) da linhado tempo do ciclo devida. (Verifique suas101201respostas com a linha IonelHil.llU0001011)101(; odo tempo mostrada 1.1(11) 1101.1)101anteriormente neste H,lOto!O1001010101captulo.)Acrescente tambm suasprprias anotaes parafacilitar a memorizaodos detalhes.est105 134. solicitao e respostaSolicitaeo e Resposta: a chave para tudo, e osargutMetttos para o service(}*Interface ServletRequest Interface ServletResponseG avax.servlet.ServletRequest)G avax. servlet. ServletResponse)interfaceinterfaceServletRe uest ServletReslJonse getAttribute(String) : Objeet getBujJerSizeO : intgetContentLengthO : intsetContentType(String) : voidgetlnputStreamO : ServletlnputStreamgetOulputLenght(int) : voidgetLoealPortO : int getOutputStreamO : ServletOutputStreamgetWriterO : PrintWriterigetParameter(String) : StringgetParameterNamesO : EnumerationgetContentTypeOIi MUITOS outros mtodos ...Ii MUITOS outros mtodos ...Interface HttpServletResponseInterface HttpServletRequestG avax. servlet.http .HttpServletResponse)G avax.serv let.http.HttpServletRequest) inteace"mtertaceHtt S~rvletRes onse .flttpS~rvletB.~qlJ~st addCookie(Coolde) : void getContextPathO : String addHeader(String name, String value) : void getCookiesO : Coolde {]encodeRedireetURL(String url) : String getHeader(String) : String sendError(int) : void getQueryStringO : String setStatus(int) : void getSessionO : HttpSessionIi MUITOS outros mtodos ... getMethodO : String Ii MUITOS outros mtodos ...*Os objetos solicitao e resposta tambm so argumentos para os outrosmtodos HttpServlet que voc escreve: doGetO, doPostO, etc.106capitulo 4 135. solicitaoe resposta o.. .N9 eXIstemf ethUntas d19tlS. que voc saiba ~:,~"lU$ exame no usandoOdesenvolver espera servlets no-HTTP.f: Quem implementa as interfaces para oHttpServletRequest e o HttpServletResponse?Voc no precisa saber como usar servletsSo aquelas classes na API?com um protocolo que no seja HTTP No : entanto, espera-se que voc saiba como aP . N~o. O Contalner.L . _. __ : As c1a~ses na? esta o na. : hierarquia saber classes HttpServletRequestvoc TEM que das que o funciona. Logo,API, pOISfica a cargo dos fabncantes Implementa-:e o HttpServletResponsesoextenses doIas. A boa notcia que voc no precisa se :ServletRequest e do ServletResponse, e quepreocupar com isso. Apenas creia que quando: a maior parte da implementao de umO mtodo serviceO chamado em seu servlet,:HttpServlet vem, de fato, do GenericServlet.ele receber referncias para dois excelentes: Mas isso. O exame entende que voc umobjetos que implementam o HttpServletRequest e : desenvolvedor HttpServlet.o HttpServletResponse. Voc jamais se preocupa :com o nome e o tipo verdadeiros da classeenvolvidos nesta implementao. Tudo que interessa que voc ter alguma coisa comtodas as funcionalidades do HttpServletRequest e do HttpServletResponse.Ou seja, tudo o que voc precisa conhecer so os mtodos que voc pode chamar nosobjetos que o Container oferece como parte da solicitao! A verdadeira classe na qualsero implementados no faz diferena - voc se refere aos objetos request e responseapenas pelo tipo da interface.f: Eu estou lendo esta UML corretamente? Essas interfaces esto estendendo interfaces?1: Sim. Lembre-se,as interfaces podem ter sua prpria rvore de herana. Quando umainterface estende uma outra interface (e tudo o que elas podem fazer - pois interfaces noimplementam interfaces), significa que quem implementar uma interface deve implementar todosos mtodos definidos na interface e em suas superinterfaces. Isto quer dizer, por exemplo, queaquele que implementar o HttpServletRequest deve prover mtodos de implementao para osmtodos declarados nas interfaces HttpServletRequest e ServletRequest.r: Eu ainda estou confuso com o porqu de existir um GenericServlet, umServletRequest e um ServletResponse. Se ningum est fazendo nada, exceto osservlets HTTP ... qual a inteno?1: Ns no dissemos ningum. Algum, em algum lugar, no sei, est usando o modelode tecnologia servlet sem o protocolo HTTP. Mas nunca encontramos ou soubemos daexistncia desse algum.Alm disso, o modelo servlet possui flexibilidade para atender queles que queiram us-Iocom, por exemplo, o SMTP, ou talvez um protocolo proprietrio customizado. Porm, a APIs oferece suporte nativo ao HTTP, que o que quase todo mundo usa. voc est aqui ~ 107 136. mtodos HTTPo ~todo de solicitao HffF defitle se o dokt()ou doFost() que rodar HTTP/1.J Mac os X Mach-Host: WWW.WckedJysmartcomlpeg,lmage/gif;q~O.2//*;q=o.1 Mach-O; en-US; rv:L4) GeckofPPC . . lvIac OS X 9 MoZIJa/5.0 (Macintosh; u;User-Agent:png,rmageJxhtml+xmi,text ptain;q=:O.8,vid Accept: textlxm Host:www.wicked~mart.(om 20030624 Netscape!7.1 NetsGUs~r-Agent: Mozil20030624Iselect/selectBeerTaste. . GET text/xrnl,apPlicatfon/xml,apPJicationlAccept-I..anguage: en-us,en;q==o.5 xhtml+xml.textlhtml;q~.9,text!Plain;q=O,B,Video/x_mn9 POST Iseleet!selectBeerTaste2.dodo? color~dark&taste~malty HTTP/1.1 Accept:im eILembre-se, a solicitao do cliente sempre inclui umMtodo HTTP especfico. Se o Mtodo HTTP for umGET, o mtodo serviceO chama o doGetO, Se for umPOST, o mtodo serviceO chama o doPostO. Voc continua mostrando o doGetO e o doPostOcomo se eles fossem os nicos... mas EU SEI que existem oito mtodos noHTTP 1.1.Q o bem capaz de voc no se importar com os outros mtodos HTTP, exceto o GET e o POST Sim, existem outros Mtodos HTTP 1.1 alm do GET e POSTo Temos tambm o HEAD, TRACE, OPTIONS, PUT, DELETE e CONNECT. Todos, exceto um, tm um mtodo doXXXO na classe HttpServlet. Ou seja, alm do doGetO e doPostO, temos o doOptionsO, doHeadO, doTraceO, doPutO e doDeleteO. No existe nenhum mecanismo na servlet da API para tratar o doConnectO, ento ele no faz parte do HttpServlet. Mas, enquanto os outros Mtodos HTTP talvez sejam importantes para, digamos, um desenvolvedor web, um desenvolvedor servlet raramente usar outro alm do GET ou do POSTo Na maior parte do desenvolvimento servlet (provavelmente todo), voc usar o doGetO (para solicitaes simples) ou o doPostO (para aceitar e processar dados de formulrios), e no ter que se preocupar com os outros.108 captulo 4 137. sol/citaoe re:::postaNa verdade~ possvel que algum outro Mtodo HffPfaa uma (rpida) apario no exame ...Se voc est se preparando para o exame, deve ser capaz dereconhecer todos eles e ter pelo menos uma idia de suas funes. Masno perca muito tempo aqui!No mundo servlet de verdade, s interessam o GET e o POSToPara o exame, vai interessar tambm um pouquinho dosoutros Mtodos HTTP. GETPede para obter a coisa (recurso/arquivo) na URLrequisitada. POST Pede para o servidor aceitar a informao do corpoanexada na solicitao, e a entrega para aquilo queconsta na URL solicitada. como um GET com maiscalorias ... um GET com informao extra enviada coma solicitao. HEAD Pede apenas a parte do header daquilo que o GETvai retomar. como um GET sem corpo na resposta.Informa a URL requisitada sem, de fato, retomar acoisa. TRACESolicita um loopback da mensagem de solicitao, paraque o cliente veja o que est sendo recebido do outrolado, para teste ou troubleshooting. PUTDiz para colocar a informao anexada (o corpo) naURL requisitada. DELETE Diz para apagar a coisa (recurso/arquivo)na URLrequisitada. OPTIONSSolicita uma lista dos mtodos HTTP para os quais acoisa na URL requisitada pode responder.CONNECT Diz para conectar no caso de tunneling. voc est 109 138. GETe POSTA diferet1a etttre tEr e posro POSTtem um corpo. Essa a dica. Ambos podem enviar parmetros, mas com o GET, o parmetro limitado ao que voc pode colocar na linha de Solicitao.fJr VEI"S4I:J d6O bl1-cdO CQbli;t." fQI"tJ. /servlet .;::,.. com uma pagma gerada em HTML O servlet usa os dadosNO Idempotentedo POST para atualizar o banco de dados. voc est 115 144. o posr no idetltpotenteo HTTP GET usado apenas para conseguir coisase no deve mudar nada no servidor. Ento um GET ,por definio (e de acordo com a especificao HTTP),idempotente. Ele pode ser executado mais de uma vez, semcausar qualquer efeito colateral danoso.O POST no idempotente. Os dados submetidos nocorpo de um POST podem ser destinados a uma transaoque no pode ser desfeita. Portanto, tenha cuidado com afuncionalidade do seu doPostO!oGET idem potente. O POST, no. Cabe a vocter certeza de que a lgica da sua aplicao podelidar com casos como o de Diane, em que oPOST aparece mais de uma vez o GET sempre considerado idempotente no HTTP1.l ... voc encontre cdigos...mesmo quem parmetroS GETno exa me que uselaterals , O u..Feitos co. que causem eJ:idem atente de acordo seja, o GET ~ : HTTP. Mascom a especijicassa impedi-Iano existe nada que p~ todo doGet() de- implementartumno~:u servlet. A d mpoten e nao-l e _ GET dos clientes deve solicitaao . da ue a SUAser idempo~ente, a:Fadosqause um efeitocmanipulaao dosre em mente a negativo. Tenha sem? d HTTP GET e O di.(. ren a entre o meto o metodo do Ge t)do seu servlet.IJ; J 1! I. N~""4: ",." /"4 V4ri"aS (U:fpUM!.S 141"4 ti p41IJ.Vr4 "" ,J liifll!lpfrh"ff AJs t.sh."tJS tlslJ."JtJ-aparo. I) Hr.,-p! serllle-l- ptJ.ra #;6S IItJl-I-o.J4 Jel,~tr&tlt. IJ. "es""a s6Ilcl-l-tl{" p6Je ser lel-l-a titlas vejes) se", "e"l.tI",a C6"S~;;~d4 "eSelect beer characteristics

size="l">eXf1icl-/-4it1el1-1-e t!11.f.16;"C()IM D.1I6erll Solicitao HTTP POST POST/advisor/SelectBeer.do HTTP/l.l Host: www.wickedlysmart.com User-Agent: Mozilla/5.0(Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:l.4) Gecko/20030624Netscape/7.1 Accept: text/xml,application/xml,application/xhtml+xml,text/htm1;q=O.9,text/ plain;q=O.8,video/x-mng,image/png, image/jpeg, image/gif ;q=O.2,*/*;q=O.1 Accept-Language:en-us,en;q=O.5 Accept-Encoding:gzip,deilate Accept-Charset:ISO-8859-1,utf-8;q~O.7,*;q~O.7 Keep-Alive: 300 Connection: keep-aliveL.eIill6re-se; "" () 6r()wser311e5eNJ. es.f.fJ. s6Ite,..f.fJ.{;()~ I , V6Ce 1146frects4 se fN!lJclIffJ.rt1I crit;.-IfJ..JIiIIfJ.Se Eor=~O,ss"iJ SlIe elfJ.se fD.rece 311fMUi6lIelill"4 serlti:((Jr Classe servlet public void doPost(HttpServletRequest request,HttpServletResponseresponse)throws IOException,ServletException StringcolorParam= request.getParameter(~color"); // mais cdigosesclarecedoresaqui...~Is.f.6 c6,-"cti:(e C61i11() III()lIe /I() flJrlllIlfJ.rii~ voc est aqui"119 148. formulrios parmetrosEt1Viat1do e usat1do dois parltetros Formulrio HTML Select beer characteristics

COLOR:lightamberbrowndarkBODY:medium V :n"owst.r e1VU~la "",a es-rfJ.S -r1!f!S tJP5tiff.S " U/IlightheavyJ ! Ir. Sf:;lict..fajfJ.iJ) fJ.SSf:;cta(J, J f:; ii1@"t . 14 i.CO" J.... Nb@~; Solicitao HTTP POSTPOST ladvisorlSelectBeerTaste.do HTTP/l.lHost: www.wickedlysmart.comUser-Agent: Mozilla/5.0(Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:l.4)Gecko/20030624Netscape/7.1Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,textlplain;q=0.8,video/x-mng,image/png, image/jpeg,image/gif;q=0.2,*I*;q~0.1Accept-Language:eD~us,en;q=0.5Accept-Encoding:gzip,defiate Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.7Keep-Alive: 300Connection: keep-alive Classe servlet public voiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throws IOException,ServletException String colorParam~ request.getParameter{~color"); String bodyParam ~ request.getParameter(~body"); IImais cdigo aquif}J.u~:IfJ.lt;vei 1S..ft~t15fJ.IJ:: ea h", f) 110./01120 149. solicitao e resposta Voc pode ter vrios valores para um nico parmetro! Isto significa que voc precisar que o getParameterValues() retorne um array, e no um getParameter() que retorne uma String.Veja lst9!Alguns tipos de entrada de dados, como um grupo de checkboxes, podem ter mais de um valor. Isso quer dizer que um nico parmetro ("tamanhos", por exemplo) ter diversos valores, dependendo de quantos boxes o usurio assinalou. Umfonnulrio em que o usurio possa selecionar diversos tamanhos de cerveja (indicando que ele est interessado em TODOS aqueles tamanhos) ser algo como: Seleet beer characteristics

Can Sizes:

12 oZ.
16 oZ.
22 oZ.


No seu cdigo, voc usar o mtodo getParameterValuesOque retoma um array:String one = request.getParameterValues(~sizes")[O];String [] sizes = request.getParameterValues(~sizes");Se voc quiser ver tudo no array, s por diverso ou teste, pode usar:String [] sizes = request.getParameterValues(~sizes");for(int x=O; x < sizes.length ; x++) { out.println(~
sizes:~ + sizes[x);(Considere que "out" um PrintWriter que voc obteve da resposta) Voc est aqui" 121 150. o objeto l-fttpSe!VletRequestAlltt dos parlttetros, O que Ittais eu pOSSOobter de Ultt objeto Reques11As interfaces ServletRequest e HttpServletRequest possuemuma tonelada de mtodos que voc pode chamar, mas vocno precisa memorizar todos eles. Sozinho, voc realmentedeveria ver todas a API para javax.servlet.ServletRequeste javax.servlet.http.HttpServletRequest, mas aqui ns sInterface ServletRequestveremos os mtodos que voc mais usar no seu trabalho (eGavax.servlet. ServletRequest)que podem tambm aparecer no exame).No mundo real, voc estar com sorte (ou sem sorte,getAttribute(String)dependendo de sua perspectiva), se usar mais de 15%getContentLengthQda API de solicitao. No se preocupe se no ficougetInputStreamQclaro para voc como ou por que voc usaria cada getLocalPortQuma delas; ns veremos mais detalhes de algumas delasgetRemotePortQ(principalmente os cookies) mais adiante.getServerPortQ getP arameter(String) getP arameter Values(String) A plataforma do cliente e a informao do browser getParameterNamesQ Ii MUITOS outros mtodos ... String clientrequest.getHeader(~User-Agent"); Os cookies associados a esta solicitaoInterface HttpServletRequest Cookie[] cookiesrequest.getCookies(); Gavax. servlet.http.HttpServ letRequest) ..HTTPServletReauest A sesso associada a este clientegetContextPathQgetCookiesQ HttpSession sessionrequest.getSession();getH eader(String)getlntHeader(String)getMethodQ O Mtodo HTTP da solicitao getQueryStringQgetSessionQ StringtheMethod request.getMethod(); Ii MUITOS outros mtodos ... Um stream de dados da solicitaoInputStream input request.getlnputStream();122 captuo 4 151. solicitao e res:posta N9 exlst~mYetbuntas Idl9tasr:Por que algum dia eu iria querer obter uma InputStream da solicitao?I: Com uma solicitao GET, no h nada alm da informao header da solicitao. Em outraspalavras, no h corpo com que se preocupar. MAS ... com um HTIP POST, h informao de corpo.Na maioria das vezes, tudo o que interessa em relao ao corpo retirar os valores dos parmetros (porexemplo, "color=dark") usando o request.getParameterO, mas esses valores podem ser enormes. Se vocquer analisar a fundo tudo o que chega com a solicitao, voc pode usar o mtodo getlnputStreamO. Comele voc pode, por exemplo, destrinchar todas as informaes do header e processar byte a byte o payload(o corpo) da solicitao, copiando imediatamente para um arquivo no servidor, talvez.r:Qual a diferena entre getHeaderO e get/ntHeaderO? Pelo que eu posso dizer, headersso sempre Strings! At mesmo o mtodo getlntHeaderO leva uma String representando onome do header; ento, para que serve o int?I:Os headers tm um nome (como "User-Agent" ou "Host") e um valor (como "Mozilla/5.0 (Macintosh;U; PPC Mac OS X Mach-O; en-US; rv:1.4) Gecko/20030624 Netscapel7.1" ou .. ww.wickedlysmart.com ..). wOs valores retomados dos headers esto sempre no formato String, mas para alguns casos, a Stringrepresenta um nmero. O header "Content-Length" retoma o nmero de bytes que compe o corpo damensagem. O header HTIP "Max-Forwards", por exemplo, retoma um valor inteiro, indicando quantoshops (saltos de roteadores) a solicitao pode fazer. (Voc pode querer usar este header se estivertentando fazer um trace da solicitao, que voc suspeite estar presa em um loop em algum lugar.)Voc pode obter o valor do header "Max-Forwards" usando o getReaderO: string forwards request.getHeader(~Max-Forwards"); int forwardsNum = Integer.parselnt(forwards);E isso funciona perfeitamente. Mas se voc soubera valor que o header deve assumir como int, vocpode usar o getlntHeaderO como um mtodo de convenincia para poup-Io da etapa de conversoda String para int: int forwardsNum = request.getIntHeader(~Max-Forwards"); getServerPortO,getLocalPortOe getRemotePortOso confusos! A diferena entre getLocalP~rtQo getServerPortQdeveria ser auto-e getServerPortQ mais sutzl: o explicativo ... at que voc se perguntasse getServerPortQ diz "para qual porta a " para que serve ento