Você está na página 1de 29

Mdulo 6

Programao WEB

Lio 2
Classes Servlets

Verso 1.0 - Nov/2007

JEDITM

Autor Daniel Villafuerte Equipe Rommel Feria Jo n Paul Petines

Necessidades para os Exerccios

Sistemas Operacionais Suportados NetBeans !E "#" !ara os seguintes sistemas o!era"ionais# Mi"rosoft Win$o%s &P Profissional SP' ou su!erior Ma" (S & )*+,+- ou su!erior Re$ .at Fe$ora Core / Solaris0 )* (!erating S1stem 2SP3RC4 e 567857, Platform E$ition9 NetBeans Enterprise $ac%: !o$er; ser e5e"uta$o nas seguintes !lataformas# Mi"rosoft Win$o%s '*** Profissional SP, Solaris0 6 (S 2SP3RC e 567857, Platform E$ition9 e Solaris < (S 2SP3RC e 567857, Platform E$ition9 V;rias outras $istri=ui>es ?inu5 &on'i(urao Mnima de )ard*are Nota+ IDE @etBeans "om resoluo $e tela em )*',5A76 !i5el Sistema Operacional Mi"rosoft Win$o%s ?inu5 Solaris (S 2SP3RC9 Solaris (S 2567857, Platform E$ition9 Ma" (S & $rocessador -** M.B Intel Pentium III %orCstation ou eDuivalente -** M.B Intel Pentium III %orCstation ou eDuivalente EltraSP3RC II ,-* M.B 3MD (!teron )** SFrie )+6 G.B Po%erPC G, Memria -)' MB -)' MB -)' MB -)' MB -)' MB )! Li,re 6-* MB ,-* MB ,-* MB ,-* MB ,-* MB

&on'i(urao -ecomendada de )ard*are Sistema Operacional Mi"rosoft Win$o%s ?inu5 Solaris (S 2SP3RC9 Solaris (S 2567857, Platform E$ition9 Ma" (S & $rocessador )+, G.B Intel Pentium III %orCstation ou eDuivalente )+, G.B Intel Pentium III %orCstation ou eDuivalente EltraSP3RC IIIi ) G.B 3MD (!teron )** Series )+6 G.B Po%erPC GMemria ) GB ) GB ) GB ) GB ) GB )! Li,re ) GB 6-* MB 6-* MB 6-* MB 6-* MB

-equerimentos de So't*are @etBeans Enter!rise Pa"C -+- e5e"utan$o so=re Java ' Platform Stan$ar$ E$ition Develo!ment Hit -+* ou su!erior 2JDH -+*: verso )+-+*I*) ou su!erior9: "ontem!lan$o a Java Runtime Environment: ferramentas $e $esenvolvimento !ara "om!ilar: $e!urar: e e5e"utar a!li"a>es es"ritas em linguagem Java+ Sun Java S1stem 3!!li"ation Server Platform E$ition <+ Para Solaris: .indo*s: e Linux: os arDuivos $a JDH !o$em ser o=ti$os !ara sua !lataforma em tt!#88Java+sun+"om8J'se8)+-+*8$o%nloa$+ tml Para Mac OS /: Java ' Plataform Stan$ar$ E$ition 2J'SE9 -+* Release ,: !o$e ser o=ti$a $iretamente $a 3!!leKs Develo!er Conne"tion: no en$ereo# tt!#88 $evelo!er+a!!le+"om8Java 2F ne"ess;rio registrar o $o%nloa$ $a JDH9+ Para mais informa>es# tt!#88%%%+net=eans+org8"ommunit18releases8--8relnotes+ tml

Programao WEB

'

JEDITM

Colaboradores que auxiliaram no processo de traduo e reviso


3F"io JLnior 3le5an$re Mori 3le5is $a Ro" a Silva 3llan SouBa @unes 3llan WoJ"iC $a Silva 3ngelo $e (liveira 3urFlio Soares @eto Bruno $a Silva Bonfim Carlos Fernan$o Gonalves Denis Mitsuo @aCasaCi Emanoel Ta$eu $a Silva Freitas Feli!e GaL" o Ja"Dueline Susann Bar=osa Joo Vianne1 BarroBo Costa ?u"iana Ro" a $e (liveira ?uiB Fernan$es $e (liveira Junior Mar"o 3urFlio Martins Bessa Maria Carolina Ferreira $a Silva Massimiliano Girol$i Mauro Car$oso Mortoni Paulo (liveira Sam!aio Reis Pe$ro .enriDue Pereira $e 3n$ra$e Ronie DotBla% Sergio TerBella T iago Magela Ro$rigues Dias Vanessa $os Santos 3lmei$a Wagner ElieBer Ron"oletta

Auxiliadores especiais
Reviso Geral $o te5to !ara os seguintes PaMses#
Brasil N Tiago Fla" 0uin1 Bissau N 3lfre$o C;: Bunene Sisse e Buon (lossato Oue=i N (@G 3sas $e So"orro

Coordenao do DFJUG

!aniel deOli,eira N JEG?ea$er res!ons;vel !elos a"or$os $e !ar"erias Luci &ampos 2 I$ealiBa$ora $o DFJEG res!ons;vel !elo a!oio so"ial 3ernando Anselmo 2 Coor$ena$or res!ons;vel !elo !ro"esso $e tra$uo e reviso: $is!oni=iliBao $os materiais e insero $e novos mP$ulos -odri(o Nunes 2 Coor$ena$or res!ons;vel !ela !arte multimM$ia S1r(io 0omes 4eloso 2 Coor$ena$or res!ons;vel !elo am=iente JEDITM 2Moo$le9

A(radecimento Especial
5o6n $aul $etines 7 Cria$or $a Ini"iativa JEDITM -ommel 3eria N Cria$or $a Ini"iativa JEDITM

Programao WEB

JEDITM

8# O9:eti,os
Ema Servlet F uma "lasse Java usa$a !ara esten$er a "a!a"i$a$e $os servi$ores Due os!e$am a!li"a>es a"essa$as via mo$elo $e !rogramao ReDuisio8Res!osta+ Q uma "lasse Java Due im!lementa a interfa"e Servlet e a"eita reDuisi>es Due vRm $e outras "lasses Java: "lientes We= ou outros Servlets: geran$o: ento: res!ostas+ 3s Servlets tam=Fm so "on e"i$as "omo HTTP Servlet+ Isto !orDue os Servlets so "omumente usa$os "om o .TTP atualmente: no ; um !roto"olo "lienteSservi$or es!e"Mfi"o+ Para ini"iar o uso $as Servlets ser; ne"ess;rio ter "on e"imentos so=re !rogramao Java: "on"eitos so=re "lienteSservi$or: .TM? =;si"o e .TTP 2 HyperText Transfer Protocol9+ Para "riar uma Servlet ser; ne"ess;rio im!ortar !ara a nossa "lasse Java as "lasses $e e5tenso !a$r>es Due esto $entro $os !a"otes :a,ax#Ser,let e :a,ax#Ser,let#6ttp+ ( !a"ote javax.servlet "ontFm a estrutura =;si"a $e Servlet: enDuanto Due o !a"ote :a,ax#Ser,let#6ttp F utiliBa$o "omo uma e5tenso $a te"nologia !ara as Servlets Due realiBam reDuisi>es .TTP+ 3o final $esta lio: o estu$ante ser; "a!aB $e#

(=ter uma viso geral $a arDuitetura Servlet Con e"er o "i"lo $e vi$a $e uma Servlet Mani!ular reDuisi>es e res!ostas Configurar: em!a"otar e $istri=uir uma a!li"ao WEB Con e"er os !arTmetros $e a!li"a>es WEB

Programao WEB

JEDITM

2# &onceitos niciais
2.1. Viso Geral da Arquitetura ervlet
3ntes $a te"nologia Servlet: o meio mais "omum $e a$i"ionar fun"ionali$a$es a um servi$or WEB era atravFs $o uso $e &0 2Common Gateway Interface ou Interfa"e $e Entra$a Comum9+ CGI forne"e uma interfa"e $o servi$or !ara uma "lasse e5terna !ermitin$o Due esta invoDue o servi$or a tratar as reDuisi>es $o "liente+ PorFm: o CGI foi $esen a$o $e forma Due "a$a " ama$a !ara um re"urso CGI fosse "ria$o um novo !ro"esso no servi$orU informao signifi"ante !ara a "lasse F !assa$a !ara este !ro"esso utiliBan$o entra$as !a$r>es e vari;veis $e am=iente+ Ema veB "om!leta$a a reDuisio: o !ro"esso F termina$o: $evolven$o o re"urso ao sistema+ ( !ro=lema Due in"orre neste ti!o $e a=or$agem F Due isto im!>e !esa$as reDuisi>es aos re"ursos $o sistema limitan$o o nLmero $e usu;rios Due a a!li"ao !o$e aten$er ao mesmo tem!o+ 3 Te"nologia Servlet foi !roJeta$a !ara "ontornar este !ro=lema inerente ao CGI e !rover aos $esenvolve$ores uma soluo ro=usta em Java !ara "riar a!li"a>es WEB+ 3o invFs $e "riar um !ro"esso !esoS!esa$o no servi$or a "a$a reDuisio $o "liente: "om Servlets ; somente um !ro"esso !ara to$as as reDuisi>es# o !ro"esso soli"ita$o !elo "ontRiner $a Servlet !ara e5e"utar+ Ouan$o uma nova reDuisio " ega: o "ontRiner "ria somente uma !eDuena t rea$ !ara e5e"utar a Servlet+ Servlets tam=Fm so "arrega$os em memPria somente uma veB: ou seJa: o "ontRiner "arregaSos em memPria na ini"ialiBao $o servi$or ou na !rimeira veB Due o Servlet for reDuisita$o !ara aten$er a um "liente: $iferente $o CGI: Due !ara "a$a reDuisio $o "liente "arrega e $es"arrega os $a$os $a "lasse em memPria+ Ema veB "arrega$o em memPria: est; !ronto !ara tratar as reDuisi>es $os "lientes+

2.2. !ri"eira vista so#re

ervlet

( "P$igo a seguir mostra a estrutura $e uma Servlet =;si"a Due trata as reDuisi>es GET: assim "omo e5i=e o tra$i"ional e5em!lo K.ello Worl$K+ import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response thro!s Servlet"xception, #$"xception { %%&request& ' utili(ado para ler os dados do )ormul*rio H+,- dos cabe.alhos %% H++/ (um exemplo s0o os dados di1itados e submetidos %% e outros dados que podem ser obtidos a partir da requisi.0o do cliente. %% &response& ' para especi)icar a linha e o cabe.alho de resposta do H++/ %% (exemplo2 especi)icar o tipo do conte3do, de)inir coo4ies . %% +amb'm cont'm m'todos que permitem ao Servlet 1erar respostas para %% o cliente. /rint5riter out 6 response.1et5riter( ; out.println(&7H+,-8 7+#+-"8Hello /a1e7%+#+-"879$:;87br8& ; out.println(&7h<8Hello 5orld=7%h<8& ; out.println(&7%9$:;87%H+,-8& ; > %%&out& para enviar o conte3do para o bro!ser.

>

3 !rimeira !arte $o "P$igo trata $a im!ortao $as "lasses em Java+io 2!ara PrintWriter: et"+9: Java5+Servlet e Java5+Servlet+ tt!+ (s !a"otes :a,ax#ser,let e :a,ax#ser,let#6ttp forne"em
Programao WEB -

JEDITM

interfa"es e "lasses !ara es"rever as Servlets 2"ontRm as "lasses .tt!Servlet: .tt!ServletReDuest e .tt!ServletRes!onse9+ Por e5tenso $a HttpServlet: er$a os mFto$os Due so automati"amente " ama$os !elo servi$or $e!en$en$o $e "ertas "on$i>es Due sero e5!li"a$as mais V frente+ Por !olimorfismo !or overriding $estes mFto$os !o$emos faBer "om Due nossa Servlet e5e"ute a fun"ionali$a$e Due Duisermos+ @este "aso: o mFto$o er$a$o $o .tt!Servlet Due so=re!omos F o mFto$o doGet+ Sim!lifi"an$o: ele F o mFto$o Due F invo"a$o !elo "ontRiner sem!re Due uma reDuisio GET F feita $e uma Servlet em !arti"ular+ Relem=ran$o $o mP$ulo anterior: navegao $e site: re"u!erao $e $o"umento: visualiBao $e !;ginas so e5em!los $e reDuisi>es GET+ ?ogo: sem!re Due um usu;rio Duiser ver a res!osta $a nossa Servlet $eve invo"ar uma reDuisio GET+ 3o visualiBarmos o "P$igo veremos Due o mFto$o doGet utiliBa $ois !arTmetros# um o=Jeto HttpServletRequest e um o=Jeto HttpServletResponse+ @o o=stante: estes o=Jetos vRm $e en"ontro "om as ne"essi$a$es $o $esenvolve$or+ So "ria$os e manti$os !or um continer e so sim!lesmente !assa$os no momento Due este continer " ama o mFto$o doGet+ 3 res!eito $isso: o mFto$o doGet e outros mFto$os: Due sero $is"uti$os $e!ois: so similares ao mFto$o pu lic statis void main!Strings"# args$ Due utiliBamos em "lasses Java =asea$as em lin as $e "oman$o+ @o ser; "ria$o um arra1 $e String !ara !assarmos "om o mFto$oU !ois J; foi realiBa$o !elo am=iente $e e5e"uo+ (s o=Jetos HttpServletRequest e HttpServletResponse aten$em aos $esenvolve$ores atravFs $as seguintes fun"ionali$a$es#

( o=Jeto .tt!ServletReDuest forne"e a"esso a to$as as informa>es a res!eito $as reDuisi>es $o "liente in"luin$o to$os os !arTmetros Due so "olo"a$os nos "a=eal os $e reDuisi>es .TTP: mFto$os $e reDuisi>es .TTP: entre outros+ ( o=Jeto .tt!ServletRes!onse "ontFm to$os mFto$os ne"ess;rios utiliBa$os !elos $esenvolve$ores !ara !ro$uBir res!ostas Due sero envia$as $e volta ao "liente+ Isto in"lui mFto$os !ara $efinir o "a=eal o $e res!osta .TTP: $e"larar res!ostas $o ti!o MIME: =em "omo mFto$os $e re"u!erao $e instTn"ias $e "lasses Java I8( as Duais !o$emos utiliBar $iretamente !ara !ro$uBir a saM$a+

Voltan$o ao "P$igo: vemos Due: "om a e5"eo $os "oment;rios: e5istem muitas lin as Due usamos !ara e5e"utar a fun"ionali$a$e $e e5i=ir W.ello Worl$XW ao usu;rio+ Ema $essas lin as F# /rint5riter out 6 response.1et5riter( ; e mLlti!las " ama$as !ara o mFto$o out%println!$% Por enDuanto: !ensemos no o=Jeto out "omo Duem leva nosso te5to $e saM$a !ara o rowser $o "liente+ Com isto em mente: F f;"il ver "omo mLlti!las " ama$as ao mFto$o out%println!$ !ro$uB o seguinte "onteL$o#

Figura )# SaM$a $o .elloServlet

Programao WEB

JEDITM

2.$. %estando o exe"plo

ervlet

3tF agora vimos a e5i=io $e uma saM$a em uma Servlet e5em!lo+ Para ini"iarmos a a=strao $a im!lantao e "onfigurao $e Servlets faremos faBer uso $e uma ferramenta automatiBa$a $is!oni=iliBa$a !or uma IDE+ 3 IDE Due utiliBaremos utiliBar em nosso e5em!lo F o Sun Stu$io Enter!rise 6: Due F livre !ara os mem=ros $o Sun &eveloper 'etwor(+ Possui su!orte "om!leto !ara a te"nologia Servlets e es!e"ifi"a>es )SP: =em "omo outras "ara"terMsti"as a$i"ionais+ DaDui !ara frente assumiremos Due o *nterprise + foi instala$o "om su"esso em seu "om!uta$or+ 3ntes $e tu$o: !ara o nosso Servlet e5em!lo: !re"isaremos "riar um novo !roJeto $e a!li"ao WEB+ Para faBer isto: na =arra $e menu: sele"ione Ne* 2; $ro:ect+ @a tela Due a!are"e em segui$a: sele"ione a "ategoria .e9+ @a $ireita: es"ol a Ne* .e9 Application+ 3 tela seguinte ir; soli"itar $etal es $e nosso !roJeto+ Para nosso !rimeiro teste "om Servlets usaremos "omo nome WFirstServletProJe"tW 2Pro,ect 'ame9: e utiliBaremos os valores !a$r>es !ara os outros "am!os+

-igura ./ Criando um 'ovo Pro,eto de 0plica12o 3e

3!Ps "riar um novo !roJeto WEB: a tela ser; semel ante a figura a seguir#

Programao WEB

JEDITM

-igura 4/ 'ovo Pro,eto de 0plica12o 3e

Para a$i"ionar a nossa Servlet V a!li"ao: !ressione o =oto $ireito $o mouse na o!o Source $ac%a(es: sele"ione Ne* 2; Ser,let+ Se a Servlet no a!are"er no menu: ento sele"ione Ne* 2; 3ile<3older+ @a tela seguinte: sele"ione a "ategoria .e9 e $e!ois Ser,let+

-igura 5/ 0dicionando Servlet para a aplica12o

Programao WEB

JEDITM

3 IDE ir; mostrar uma sFrie $e telas Due Duestionaro so=re os $etal es $a Servlet a ser "ria$a+ @a !rimeira tela: em &lass Name $igite First ervlet+ Em $ac%a(e $igite :edi#Ser,let%

-igura 6/ 7odificando o nome da classe e o nome do pacote

@a tela Due segue: manten a os valores !a$r>es e ento !ressione o =oto 3inis6 e isto ir; resultar "onforme a figura a seguir+

-igura 8/ Servlet criada

Programao WEB

<

JEDITM

Po$emos !er"e=er Due a IDE "riou e !ar"ialmente im!lementou o mFto$o process&equest+ Se "li"armos na "ai5a "om um sinal $e soma na !arte esDuer$a inferior veremos Due o processRequest F sim!lesmente um mFto$o Due F " ama$o !elos mFto$os doGet e do!ost+ Isto signifi"a Due o "onteL$o $o mFto$o !ro"essReDuest forma a =ase $a fun"ionali$a$e $e nosso Servlet+ Primeiro: removeremos to$o o "onteL$o $o mFto$o processRequest+ Ento: "o!iaremos a nossa Servlet e5em!lo !ara $entro $o mFto$o doGet+

-igura 9/ 'ovo m:todo processRequest

Para e5e"utar: !ressione S6i't = 36+ 3 IDE ir; ento em!a"otar: instalar e invo"ar a Servlet e automati"amente " amar o navega$or WEB+

Programao WEB

)*

JEDITM

># &iclo de 4ida da &lasse Ser,let


Ema Servlet F geren"ia$a atravFs $e um "i"lo $e vi$a =em $efini$o $es"rito nas es!e"ifi"a>es Servlet+ ( "i"lo $e vi$a $o Servlet $es"reve "omo ele F "arrega$o: instan"ia$o: ini"ialiBa$o: reDuisita$o: $estruM$o e finalmente "oleta$o 2retira$o $e memPria N gar age collection9+ ( "i"lo $e vi$a $e um Servlet F "ontrola$o !elo "ontRiner em Due ele F instala$o+ ( "i"lo $e vi$a $a Servlet !ermite ao "ontRiner resolver os !ro=lemas $e en$ereamento e !erforman"e $o CGI e as !reo"u!a>es "om segurana $a 3PI $e !rogramao $e um servi$or =ai5oSnMvel+ Em "ontRiner $eve !o$er e5e"utar to$as as Servlets em uma Lni"a JVM 2Java Virtual Ma" ine N M;Duina Virtual Java9+ Por esta raBo: as Servlets !o$em efi"ientemente "om!artil ar $a$os entre si e evitar Due uma a"esse os $a$os !arti"ulares $e outra+ 3s Servlets !o$em tam=Fm !ermitir !ersistRn"ia entre reDuisi>es "omo o=Jetos instan"ia$os: utiliBan$o assim menos memPria $o Due !ro"essos "om!letamente em!a"ota$os+

-igura +/ Ciclo de vida da Servlet

3 figura mostra os !rin"i!ais eventos na vi$a $e uma Servlet+ Q im!ortante notar Due !ara "a$a um $estes eventos ; um mFto$o Due ser; invo"a$o !elo "ontRiner%

$.1. 'nstanciao
@este est;gio: a "lasse Servlet F "arrega$a !ara a memPria e uma instTn"ia F "ria$a !elo "ontRiner+ Por !a$ro: um continer !rati"a o Due " amamos $e la() loadin* 2"arregamento tar$io9+ EtiliBan$o este mFto$o: uma "lasse Servlet F "arrega$a !ara a memPria: instan"ia$a e ini"ialiBa$a somente $e!ois Due uma reDuisio for feita+ Isto $iminui o tem!o $e ini"ialiBao $a a!li"ao: entretanto signifi"a tam=Fm Due aver; um !ou"o $e atraso asso"ia$o V !rimeira reDuisio $e "a$a Servlet+ Se este "om!ortamento for in$eseJ;vel: "a$a Servlet $eve ser "onfigura$a !ara ser "arrega$a Juntamente "om a a!li"ao+ Isto ser; $is"uti$o !osteriormente Duan$o a=or$armos o $es"ritor $e "arregamento+ Como !o$emos ver na figura: uma Servlet !assa !ela fase $e instan"iao somente uma veB $urante seu "i"lo $e vi$a+ Isto signifi"a Due o atraso asso"ia$o ao seu "arregamento em memPria a"onte"e somente uma veB+ Isto mostra a vantagem $esta so=re outras te"nologias+ ( mFto$o relevante Due o continer ir; " amar neste est;gio ser; o "onstrutor+ @o F re"omen$a$o Due se "oloDue DualDuer "P$igo no "onstrutor+ 3 maioria $as fun"ionali$a$es Due os $esenvolve$ores Duerem a$i"ionar aos "onstrutores envolvem $efinio $e o=Jetos ou ini"ialiBao

Programao WEB

))

JEDITM

$e vari;veis+ Servlets !ossui uma fase se!ara$a !ara este ti!o $e ativi$a$e+

$.2. 'niciali(ao
@esta fase: Servlet F !rimor$ial !ara o uso na a!li"ao+ 3ssim "omo a fase $e instan"iao: uma Servlet !assa !or este est;gio somente uma veB+ Isto sP o"orre a!Ps a fase em Due nosso o=Jeto F ini"ialiBa$o ao ser " ama$o !ela Servlet+ ( mFto$o Due F " ama$o !elo "ontRiner neste !onto F o mFto$o init?@+ 3 assinatura "om!leta $o mFto$o F a!resenta$a a=ai5o+ public void init(Servlet?on)i1 con)i1 Como !o$emos ver: este mFto$o tem um !arTmetro# uma instTn"ia $o o=Jeto ServletConfig+ Este o=Jeto "ontFm informa>es so=re a "onfigurao $a Servlet =em "omo forne"e meios !ara Due a Servlet a"esse informa>es $a a!li"ao e seus re"ursos+ Como men"iona$o anteriormente: DualDuer "P$igo $e "onfigurao ou ini"ialiBao no $eve ser "olo"a$o na ;rea $o "onstrutor: em veB $isso: $eve ser "olo"a$o $entro $o mFto$o init+ Se um $esenvolve$or im!lementar este mFto$o: F im!ortante Due realiBe uma " ama$a ao super#init?con'i(@+ Isto garante Due a ao $e ini"ialiBao !a$ro $a Servlet seJa e5e"uta$a e Due sua "onfigurao seJa a!ro!ria$amente $efini$a+ 3!Ps a ini"ialiBao: a Servlet estar; a!ta a re"e=er as reDuisi>es $os "lientes+ Este mFto$o somente ser; " ama$o novamente Duan$o o servi$or re"arregar a Servlet+ ( servi$or no !o$e re"arregar uma Servlet atF Due esta seJa $estruM$a atravFs $o mFto$o destroy+

$.$. !ronta
Esta F a fase Duan$o uma Servlet est; no auge $o seu "i"lo $e vi$a+ @esta: a Servlet !o$e ser " ama$a re!eti$amente !elo "ontRiner !ara !rover sua fun"ionali$a$e+ ( mFto$o " ama$o !elo "ontRiner nesta fase F ser,ice?@ e !ossui a seguinte assinatura# public void service(ServletRequest req, ServletResponse res (s o=Jetos ServletReDuest e ServletRes!onse !assa$os !ara este mFto$o !rovRem mFto$os !ara e5trair informao $as reDuisi>es $os usu;rios e mFto$os !ara gerar as res!ostas+ Em $etal e im!ortante a ser o=serva$o: o "ontRiner realiBa re!eti$as " ama$as ao mFto$o ser,ice usan$o t;reads se!ara$as+ Geralmente: ; somente uma instTn"ia ativa $a Servlet "onsumin$o es!ao em memPria e aten$en$o Vs $iversas reDuisi>es+ Esta F outra vantagem Due o Servlet Java !ossui F tam=Fm uma $as !rin"i!aisraB>es !orDue uma Servlet 2e o seu mFto$o service9 F !roJeta$o !ara "onter um t;read<safe+ Para Servlets es!e"Mfi"os .TTP 2Servlets esten$en$o .tt!Servlet9: os $esenvolve$ores no $evem im!lementar o mFto$o servi"e $iretamente+ 3o invFs $isto: $evem im!lementar DualDuer um $os seguintes mFto$os# public public public public void void void void doGet(HttpServletRequest req, HttpServletResponse res do/ost(HttpServletRequest req, HttpServletResponse res do/ut(HttpServletRequest req, HttpServletResponse res do+race(HttpServletRequest req, HttpServletResponse res

Ca$a um $estes mFto$os "orres!on$e a um mFto$o .TTP es!e"Mfi"o 2GET: P(ST: +++9+ ( mFto$o a!ro!ria$o F ento " ama$o Duan$o o Servlet re"e=e a reDuisio .TTP+ J; Due a maioria $as " ama$as .TTP: Due os $esenvolve$ores $evem se !reo"u!ar: so $os mFto$os GET ou P(ST: Servlets !o$em im!lementar $oGet: $oPost ou am=os+

$.+. Destruio
Em algumas o"asi>es: Duan$o o "ontRiner fi"ar sem memPria ou $ete"tar Due a Duanti$a$e $e

Programao WEB

)'

JEDITM

memPria livre !ossui !o$e gerar algum !ro=lema: o "ontRiner tentar; li=erar memPria $estruin$o uma ou mais instTn"ias $a Servlet+ Oual ser; removi$a F $etermina$o !elo "ontRiner e o $esenvolve$or no tem "ontrole $ireto+ Em "ontRiner !o$er; li=erar uma instTn"ia $a Servlet "omo !arte $e seu !ro"esso $e $esligamento+ Ouan$o a Servlet est; !ara ser removi$a $e um geren"iamento $o "ontRiner: ela est; na fase $e $estruio+ ( mFto$o " ama$o !elo "ontRiner: antes $e realiBar isto: F o destroA?@# 3Dui: na nossa Servlet $everia ser "o$ifi"a$o !ara e5!li"itamente li=erar os re"ursos utiliBa$os 2e5+ Cone5>es "om o Ban"o $e Da$os9+

$.,. Gar#a*e Collection


Esta fase $o "i"lo $e vi$a $e uma Servlet F eDuivalente a $e DualDuer outro o=Jeto Java+ Relem=ran$o Due esta fase o"orre antes Due um o=Jeto seJa retira$o $a memPria+ (s $esenvolve$ores no tRm "ontrole $ireto Duan$o isso ir; o"orrer+ ( mFto$o $o o=Jeto " ama$o nesta fase F o 'inaliBe?@+

Programao WEB

)/

JEDITM

C# Manipulando -equisiDes e -espostas


( !rin"i!al o=Jetivo $e uma Servlet F !rover "onteL$o $inTmi"o !ara o usu;rio+ Por $efinio: o "onteL$o $inTmi"o mu$a em res!osta a $iversas "on$i>es+ E5em!los $os Duais so as reDuisi>es es!e"Mfi"as $e usu;rio: a ora: tem!eratura+ Para $ar a Servlet a"esso aos $a$os $e uma reDuisio: esta F !rovi$a em uma instTn"ia $o o=Jeto ServletRequest Due es"on$e estes $etal es+ Servlets =asea$os em .TTP !ossuem uma su="lasse: HTTPServletRequest: Due !rovR mFto$os a$i"ionais !ara o=ter informao es!e"Mfi"a $o HTTP: "omo informao so=re coo(ies: $etal es $e "a=eal os: entre outros+

+.1. Dados e !ar-"etros de For"ul.rio


C#8#8# M1todo request#(et$arameter Em $os "en;rios Due freDYentemente reDuer mais freDuentemente "onteL$o $inTmi"o F Duan$o Dueremos Due nossa a!li"ao res!on$a aos $a$os $o usu;rios a!resenta$os em um formul;rio+ VeJa o e5em!lo seguinte#

-igura =/ *ntrada do 'ome do >su?rio

Da$o o seguinte formul;rio: mostra$o na figura anterior: Due o=tFm o nome $o usu;rio: Dueremos !ro$uBir uma res!osta "ustomiBa$a !ara DualDuer nome su=meti$o+ Para este e outros "en;rios similares: Java !rovR o mFto$o HttpServletRequest+ Este mFto$o !ossui a seguinte assinatura# public Strin1 1et/arameter(Strin1 parameter@ame Este mFto$o o=tFm o nome $o !arTmetro Due $eseJamos o=ter e retorna o valor $a String Due re!resenta este !arTmetro+ 3=ai5o segue um "P$igo e5em!lo Due o=tFm o nome $o usu;rio e $; saM$a em um sim!les "um!rimento: segui$o !elo .TM? usa$o !ara mostrar o formul;rio+ public class Get/arameterServlet extends HttpServlet { protected void do/ost(HttpServletRequest request, HttpServletResponse response thro!s Servlet"xception, #$"xception { %% retorna o valor solicitado pelo usu*rio Strin1 user@ame 6 request.1et/arameter(&user@ame& ; %% retorna um objeto /rint5riter e utili(aAo para a mensa1em de saBda /rint5riter out 6 response.1et5riter( ; out.println(&7H+,-879$:;87H<8& ; out.println(&H"--$ C@: 5"-?$,", & D user@ame D &=& ; out.println(&7%H<87%9$:;87%H+,-8& ; out.close( ; > > Temos a seguir: o "P$igo !ara .TM? e5em!lo utiliBa$o !ara mostrar o formul;rio# 7H+,-8
Programao WEB ),

getParameter no o=Jeto

JEDITM

7+#+-"8Halloa=7%+#+-"8 79$:;8 7)orm action6&Get/arameterServlet& method6&post&8 "nter user name2 7input tEpe6&text& name6&user@ame&%8 7br%8 7input tEpe6&submit& value6&Greet me=&%8 7%)orm8 7%9$:;8 7%H+,-8 3o entrar "om o valor WJEDIW no formul;rio: o=temos o seguinte resulta$o#

-igure @A/ SaBda do GetParameterServlet

C#8#2# M1todo request#(et$arameter4alues E5istem momento Due ne"essitamos re"u!erar $a$os $e um formul;rio "om mLlti!los elementos "om o mesmo nome+ @este "aso: usan$o a!enas o mFto$o getParameter $es"rito anteriormente: ser; retorna$o a!enas o valor $o !rimeiro elemento "om aDuele nome+ Para re"u!erar to$os os valores: usamos o mFto$o getParameterCalues# public Strin1FG 1et/arameterHalues(Strin1 parameter@ame Este mFto$o F similar ao Due a"a=amos $e $is"utir+ Tam=Fm re"e=e o nome $o !arTmetro Due Dueremos re"u!erar o valor+ Desta veB: ao invFs $e uma Lni"a String: retorna um array $e Strings+ Este F um e5em!lo# public class Get/arameterHaluesServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response thro!s Servlet"xceptionm #$"xception{ Strin1 paramHaluesFG 6 request.1et/arameterHalues(&sports& ; Strin19u))er mEResponse 6 ne! Strin19u))er( ; /rint5riter out 6 response.1et5riter( ; out.println(&7H+,-87+#+-"8;our choices7%+#+-"8& ; out.println(&79$:;87H<8;our choices !ere 2 7%H<8& ; )or (int i 6 I; i 7 paramHalues.len1th; iDD out.println(&7br%87li8& ; out.println(paramHaluesFiG ; > out.println(&7%9$:;87%H+,-8& ; {

>

>

3 seguir: temos o "P$igo !ara o .TM? usa$o !ara mostrar o formul;rio# 7html8 7title8?hoice selection7%title8 7bodE8 7H<85hat sports activities do Eou per)ormJ7%h<8 7)orm action6&Get/arameterHaluesServlet& method6&1et&8 7input tEpe6&chec4box& name6&sports& value6&9i4in1&8 9i4in1
Programao WEB )-

JEDITM

7br%8 7input 7br%8 7input 7br%8 7input 7br%8 7input 7br%8 7input 7%)orm8 7%bodE8 7%html8

tEpe6&chec4box& name6&sports& value6&+able +ennis&8 +able +ennis tEpe6&chec4box& name6&sports& value6&S!immin1&8 S!immin1 tEpe6&chec4box& name6&sports& value6&9as4etball&8 9as4etball tEpe6&chec4box& name6&sports& value6&$thers&8 $thers tEpe6&submit&8

-igure @@/ Recuperando dados de um formul?rio com mDltiplos elementos

Se as o!>es ZBiCingW: WTa=le TennisW: e WS%immingW fossem es"ol i$as: a saM$a seria#

-igure @./ SaBda do GetParameterCaluesServlet

C#8#># request#(et$arameterNames 3lgumas veBes ne"essitamos Due a Servlet "on ea o nome $e um ou mais !arTmetros $o formul;rio sem ter Due "o$ifi";Slos $entro $o Servlet+ @este "aso: !o$emos usar o mFto$o

Programao WEB

)7

JEDITM

getParameter'ames+ public "numeration 1et/arameter@ames( ( o=Jeto *numeration Due este mFto$o retorna "ontFm to$os os nomes $e !arTmetros "onti$os nesta reDuisio $o usu;rio+

+.2. &ecuperando a in/or"ao da U&0 de &equisio


Relem=ran$o: uma reDuisio .TTP F "om!osta !ela seguintes !artes# http2%%FhostG2FportaG%Fcaminho:aRequisi.0oGJFquerEStrin1G Po$emos re"u!erar os valores atuais $e "a$a uma $estas !artes $a reDuisio $o usu;rio " aman$o alguns mFto$os $o o=Jeto HttpServletRequest+

)ost N reDuest+getServer@ame29 $orta N reDuest+getServerPort29 &amin6o da -equisio 7 em Java: o "amin o $a reDuisio F $ivi$i$a em ' "om!onentes lPgi"os # &ontexto 7 o "onte5to $e uma a!li"ao WEB+ Po$e ser re"u!era$o " aman$o reDuest+getConte5tPat 29 n'ormao do camin6o 7 o resto $e uma reDuisio $e!ois $o nome $o "onte5to+ Po$e ser re"u!era$o " aman$o reDuest+getPat Info29 EuerA Strin( 7 reDuest+getOuer1String29

Ento: !or e5em!lo: "om uma ER? $e reDuisio# http2%%!!!.mEjedi.net2KIKI%HelloCpp%1reetLserJname6Medi Se " amarmos os mFto$os men"iona$os: os seguintes resulta$os sero e5i=i$os# request.1etServer@ame( request.1etServer/ort( request.1et?ontext/ath( request.1et/ath#n)o( request.1etNuerEStrin1( !!!.mEjedi.net KIKI HelloCpp 1reetLser name6Medi

+.$. 'n/or"ao de Ca#eal1o


Informao $o "a=eal o !o$e ser re"u!era$a !ela Servlet " aman$o os seguintes mFto$os em HttpServletRequest#

(et)eader?Strin( nome@ N retorna o valor $o "a=eal o es!e"ifi"a$o "omo um String+ Se o "a=eal o es!e"ifi"a$o no e5istir: este mFto$o retorna null+ (et)eaders?Strin( nome@ 7 similar ao getHeader29+ Entretanto: ele re"u!era to$os os valores $o "a=eal o es!e"ifi"a$o "omo um o=Jeto *numeration+ (et)eaderNames?@ 2 este mFto$o retorna os nomes $e to$os os "a=eal os in"luM$os na reDuisio .TTP "omo um o=Jeto *numeration+ (et nt)eader?Strin( nome@ 7 retorna o valor $e um "a=eal o es!e"ifi"a$o "omo um int+ Se o "a=eal o es!e"ifi"a$o no e5istir na reDuisio: o mFto$o retorna S)+ (et!ate)eader?Strin( nome@ 7 retorna o valor $e um "a=eal o es!e"ifi"a$o "omo um valor long Due re!resenta um o=Jeto Date+ Se o "a=eal o es!e"ifi"a$o no e5istir: este mFto$o retorna S)+ Se o "a=eal o no !u$er ser "onverti$o em um o=Jeto $o ti!o Date: este mFto$o lana uma Illegal0rgument*xception+

Programao WEB

)A

JEDITM

+.+. Gerao da

a2da

Em to$os os e5em!los anteriores: "onseguimos gerar saM$as $inTmi"as !ara o usu;rio+ FiBemos isto usan$o mFto$os $o o=Jeto HttpServletResponse+ 3tF agora: usamos o mFto$o get3riter+ Este mFto$o retorna um o=Jeto PrintWriter asso"ia$o "om nossa res!osta !ara o usu;rio+ Para aJu$ar a "olo"ar as "oisas na !ers!e"tiva "orreta: $evemos lem=rar Due o o=Jeto S1stem+out Due usamos regularmente !ara $ar saM$a no "onteL$o !ara o "onsole tam91m F uma instTn"ia $o o=Jeto PrintWriter+ (u seJa: eles se "om!ortam Duase $a mesma maneira# se vo"R tiver uma instTn"ia $o o=Jeto PrintWriter: sim!lesmente " ame os mFto$os print ou println !ara gerar a saM$a+ ( "P$igo $a nossa !rimeira "lasse Servlet ser; visto a seguir "om o "P$igo $e saM$a em negrito+ import java.io.*; import javax.Servlet.*; import javax.Servlet.http.*; public class HelloServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response thro!s Servlet"xception, #$"xception { %% objeto &out& ' utili(ado para enviar o conte3do para o bro!ser PrintWriter out = response.getWriter(); out.println("<HTML> <TITLE>Hello Page</TITLE><B !"><#r>"); out.println("<$%>Hello Worl&'</$%>"); out.println("</B !"></HTML>");

>

>

(utros mFto$os im!ortantes no o=Jeto HttpServletResponse so#

set&ontentFApe N informa ao navega$or $o "liente o ti!o MIME $a saM$a Due ele ir; re"e=er+ To$o o "onteL$o Due geramos atF agora foi .MT?+ Po$erMamos fa"ilmente enviar outros ti!o $e "onteL$o "omo JPEG: PDF: D(C: &?S: et"+ Para "onteL$o Due no F te5to: os mFto$os !rint $o o=Jeto PrintWriter Due estamos usan$o atF agora so insufi"ientes+ Para gerar saM$a no te5tual: faBemos uso $e outro mFto$o+ (etOutputStream N este mFto$o re"u!era uma instTn"ia $o o=Jeto (ut!utStream asso"ia$o "om nossa res!osta !ara o usu;rio+ Com o (ut!utStream: !o$emos usar os o=Jetos e mFto$os !a$ro $e E8S Java !ara !ro$uBir to$os os ti!os $e saM$a+

3=ai5o segue um "P$igo e5em!lo Due ir; gerar um arDuivo JPG "onti$o em uma a!li"ao %e= !ara o usu;rio+ public class M/"G$utputServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response %% de)inir um arraE de bEte para arma(enamento dos dados bEte bu))erCrraEFG 6 ne! bEteF<IOPG; %% retornar o Servlet?ontext que ser* utili(ado para o retorno Servlet?ontext ctxt 6 1etServlet?ontext( ; %% in)ormar ao bro!ser que est* enviando uma ima1em response.set?ontent+Epe(&ima1e%1i)& ; %% criar o objeto de saBda em stream que ser* produ(ida Servlet$utputStream os 6 response.1et$utputStream( ; %% criar o objeto de recurso para o input stream #nputStream is 6 ctxt.1etResource(&%5"9A#@Q%ima1es%lo1o.1i)& .openStream( ; %% ler o conte3do do recurso de escrita e 1erar a saBda int read 6 is.read(bu))erCrraE ; !hile (read =6 A< { os.!rite(bu))erCrraE ;
Programao WEB )6

JEDITM

>

>

read 6 is.read(bu))erCrraE ; > %% )echar os objetos utili(ados is.close( ; os.close( ;

Programao WEB

)<

JEDITM

"# &on'i(uraoG Empacotamento e !istri9uio


Em to$os os e5em!los realiBa$os: usamos as ferramentas $a IDE Sun Enter!rise Stu$io 6 !ara fa"ilitar os $etal es $a "onfigurao: $o em!a"otamento e $a instalao $a a!li"ao WEB+ Iremos agora: a!rofun$ar estes $etal es+

,.1. Con/i*urao da Aplicao 345


3 es!e"ifi"ao Servlet: $efine um arDuivo &M? " ama$o *e9#xml Due atua "omo um arDuivo $e "onfigurao !ara as a!li"a>es WEB+ Este arDuivo F " ama$o $e $es"ritor $e $istri=uio+ 7!ebAapp version6&O.P& xmlns6&http2%%java.sun.com%xml%ns%jOee& xmlns2xsi6&http2%%!!!.!R.or1%OII<%S,-SchemaAinstance& xsi2schema-ocation6&http2%%java.sun.com%xml%ns%jOee http2%%java.sun.com%xml%ns%jOee%!ebAappTOTP.xsd&8 7servlet8 7servletAname8QirstServlet7%servletAname8 7servletAclass8jedi.Servlet.QirstServlet7%servletAclass8 7%servlet8 7servletAmappin18 7servletAname8QirstServlet7%servletAname8 7urlApattern8%QirstServlet7%urlApattern8 7%servletAmappin18 7sessionAcon)i18 7sessionAtimeout8 RI 7%sessionAtimeout8 7%sessionAcon)i18 7!elcomeA)ileAlist8 7!elcomeA)ile8 index.jsp 7%!elcomeA)ile8 7%!elcomeA)ileAlist8 7%!ebAapp8 Temos a"ima um e5em!lo $o arDuivo *e9#xml utiliBa$o no !roJeto -irstServlet+ Esaremos "omo !onto $e !arti$a na e5!lorao $este arDuivo+ NOFA# ( arDuivo %e=+5ml $a a!li"ao WEB "onstruM$a !ela IDE: !o$e ser en"ontra$o e5!an$in$o a a=a $e 3rDuivos $e Configurao na 4ie* 2; $ro:ect+ H*e92app; Esta lin a F utiliBa$a "omo elemento raiB $o arDuivo $e "onfigurao e "omo uma $e"larao $as informa>es ne"ess;rias 2atF seus atri=utos9: !ara o "ontRiner !o$er re"on e"er o arDuivo "omo um arDuivo $es"ritor v;li$o+ Hser,let; Ca$a instTn"ia $este elemento $efine uma Servlet !ara ser usa$a !ela a!li"ao+ Possui os seguintes nodes fil os#

Hser,let2name; S Em nome lPgi"o forne"i$o !elo $esenvolve$or Due ser; usa$o !ara to$as as referRn"ias futuras !ara a Servlet+ Hser,let2class; S ( nome $a "lasse Servlet "om!letamente Dualifi"a$o+ Hload2on2startup; N (!"ional+ Ten$o uma entra$a e valor !ara este elemento: informa ao "ontRiner Due a Servlet $eve ser "onstruM$a e ini"ialiBa$a $urante o inM"io $o "ontRiner ou a!li"ao: ultra!assan$o o lento "arregamento $o "P$igo+ ( valor !ara este elemento F um nLmero Due $ita o or$em $e "arregamento "om!aran$o ao [loa$SonSstartu!\ $e outras Servlets+

Hser,let2mappin(;

Programao WEB

'*

JEDITM

Ca$a instTn"ia $este elemento $efine um ma!eamento !ara uma Servlet+ Possui os seguintes nodes fil os#

Hser,let2name; S ( nome lPgi"o $a Servlet !ara ser ma!ea$o+ Deve ser $efini$o !reviamente no arDuivo $es"ritor+ Hurl2pattern; S 3 ER? utiliBa$a !ara Due esta Servlet seJa ma!ea$a+ ( valor <I: far; "om Due to$as as soli"ita>es $a a!li"ao seJa re$ire"iona$a !ara seu Servlet+ @o e5em!lo $a$o: a ER? F <3irstSer,let+ Isto signifi"a Due to$as as soli"ita>es $e ER? !ara tt!#88] ost^#]!ort^8FirstServletProJe"t8FirstServlet ser; mani!ula$o !or FirstServlet+

?em=reSse Due to$as as $efini>es $e Servlet $evem ser forne"i$as antes $e a$i"ionar DuaisDuer ServletSma!!ings+ Hsession2con'i(; Este elemento $efine os $etal es $o geren"iamento $a "onfigurao $a seo+ H*elcome2'ile2list; Este elemento $efine um "om!onente WEB Due ser; automati"amente "arrega$o se o usu;rio entrar "om uma soli"itao !ara o servi$or sem es!e"ifi"ar um re"urso em !arti"ular+ Por e5em!lo: uma soli"itao !ara ;ttp/EE";ost#/"port#E-irstServletPro,ect originar; o arDuivo aDui $efini$o !ara ser "arrega$o+ Mais $e um arDuivo !o$e ser es!e"ifi"a$o nesta lista+ Somente o !rimeiro arDuivo visMvel !ara o "ontRiner WEB ser; "arrega$o+

,.2. 4"pacotando a Aplicao da 345


(=servaremos novamente a estrutura $e uma a!li"ao WEB "omo in$i"a$a !ela es!e"ifi"ao Servlet#
Contm HTML, imagens, outros contedos estticos, e JSP Contm informaes sobre a ap ica!o "opciona # Contm pastas $ue n!o ser!o %istas no na%egador Contm c asses Servlets criadas para a ap ica!o Contm ar$ui%os de bib iotecas "J&'# $ue podem ser uti i(adas pe a ap ica!o &r$ui%o )ML $ue arma(ena as configuraes da ap ica!o
-igura @4/ *strutura do &iretFrio de uma aplica12o )ava 3*G

3 a!li"ao !o$e ser instala$a em um servi$or faBen$o uso $e um arDuivo $e W3R 2.EB A-" ive9+ 3rDuivos W3R so o mesmo Due J3R 25ava A-" ive9U "ontRm o "P$igo $e a!li"ao "om!rimi$o utiliBan$o o formato _IP+ "#2#8# 0erando arqui,os .A- a partir de pro:etos existentes no un tudio 4nterprise

Q muito sim!les !ro$uBir o arDuivo W3R "onten$o nossa a!li"ao %e= a !artir $e um !roJeto e5istente no Sun Studio Enterprise J+ Basta !ressionar o =oto $ireito $o mouse no nome $o !roJeto em !roject vie6: e sele"ionar 5uild !roject+ 3 IDE ento !ro"e$er; o em!a"otamento $a a!li"ao+

Programao WEB

')

JEDITM

-igura @5/ *mpacotando o pro,eto

3 IDE informar; se a o!erao $e construo foi =em su"e$i$a: e o lo"al on$e o arDuivo W3R foi "ria$o+

-igura @6/ Constru12o com sucesso

Programao WEB

''

JEDITM

"#2#2# Ksando um arqui,o de construo Ant para empacotar a aplicao 3lFm $e usar uma IDE !ara em!a"otar a a!li"ao $a WEB: !o$emos tam=Fm faBer uso $e uma ferramenta $e "onstruo !ara automatiBar a "om!ilao e o !ro"esso $e em!a"otamento+ Ema ferramenta $e "onstruo Due !ossui uma am!la utiliBao F " ama$a Apac6e Ant+ Q um !roJeto $e "P$igo a=erto $a 0pac;e Software -oundation: e seu $o%nloa$ !o$e ser realiBa$o no en$ereo ;ttp/EEant%apac;e%org+ Basi"amente: Ant lR em um arDuivo $e "onstruo 2" ama$o 9uild#xml9+ Este arDuivo $e "onstruo F "om!osto $e targets 2alvos9: as Duais essen"ialmente $efinem ativi$a$es lPgi"as Due !o$em ser e5e"uta$as !elo arDuivo $e "onstruo+ Estes targets so !or sua veB: "om!ostos $e uma ou mais tarefas Due $efinem os $etal es $e "omo os targets realiBam suas ativi$a$es+ ReDuisitos $o arDuivo $e "onstruo#

Deve ser lo"a$o na -aiB do $ro:eto $e a"or$o "om a estrutura $o $iretPrio re"omen$a$o !ela 0pac;e Software -oundation !ara $esenvolvimento $e a!li"ao WEB+ 3$i"ionalmente: $eve e5istir tam=Fm um $iretPrio li9 na -aiB do $ro:eto Due "onter; to$as $e!en$Rn"ias J3R $a a!li"ao+ Deve e5istir um arDuivo " ama$o 9uild#properties no mesmo $iretPrio Due o roteiro $e "onstruo e $eve "onter valores !ara as seguintes !ro!rie$a$es#

app#name N nome $a a!li"ao 8 !roJeto appser,er#6ome N o $iretPrio $e instalao $a instTn"ia Sun 3!!li"ation Server 6+)

Segue a estrutura $e $iretPrio re"omen$a$o !ara $esenvolvimento $e a!li"ao %e=#


ContFm a a!li"ao em uma estrutura $e $iretPrio "on e"i$a !elo "ontRiner+ ?o"aliBao $o arDuivo W3R Do"umentao Due F usa$a !elo time $e $esenvolve$ores 3rDuivos fonte Java ConteL$o $a a!li"ao 2.TM?: JSP9: =ase $a raiB $o $o"umento $o !roJeto ContFm arDuivos $e "onfigurao "omo o $es"ritor $e $esenvolvimento 2%e=+5ml9: $es"ritores $e =i=liote"a $e tags: et"+ -igura @8/ *strutura de diretFrio recomendada para o desenvolvimento de aplica12o 3*G

Esta estrutura $e $iretPrio foi !roJeta$a !ara ser $istinta $a estrutura $e $iretPrio e5igi$o !ela es!e"ifi"ao Servlet+ 3 3!a" e re"omen$a !or !ossuir as seguintes vantagens#

( "onteL$o $e $iretPrio $e fonte so mais fa"ilmente a$ministra$os: $eslo"a$o: ou a!rova$o se a verso $e $esenvolvimento no mistura$a+ ( "ontrole $e "P$igo $e fonte F mais f;"il $e a$ministrar em $iretPrios Due "onten am sP arDuivos $e fonte 2nen uma "lasse "om!ila$a: et"+9+ (s arDuivos Due "om!>em a $istri=uio $a a!li"ao F mais f;"il sele"ionar Duan$o a ierarDuia $e $esenvolvimento for se!ara$a+

Po$e ser $ifM"il "om!reen$er V !rimeira vista+ Para aJu$ar a "om!reenso: to$o os reDuisitos !ara "om!ilar e em!a"otar nosso e5em!lo -irstServlet F forne"i$o na !asta samplesE-irstServlet+ Para realiBar o em!a"otamento $e uma a!li"ao usan$o esta estrutura: e5e"ute a seguinte instruo 2no mesmo $iretPrio "onten$o o arDuivo $e "onstruo9+ ant dist Esta instruo " amar; o target dist no arDuivo $e "onstruo: o Dual gerar; o arDuivo W3R e o "olo"ar; no $iretPrio dist+ Este arDuivo W3R !o$e: ento: ser "arrega$o no "ontRiner usan$o as ferramentas a$ministrativas ofere"i$as !elo "ontRiner+
Programao WEB '/

JEDITM

,.$. Desenvolvi"ento e"

ervidor

(s "ontRiners Servlet geralmente "ontRm ferramentas a$ministrativas Due !o$em ser usa$as !ara $esenvolver a!li"a>es WEB+ @este momento: veremos os !assos e5igi$os !ara $esenvolver o arDuivo W3R gera$o no a!li"ativo Sun 3!!li"ation Server 6+)+

Primeiro !asso: e5e"ute o log<in no "onsole a$ministrativo+ Isto !o$e ser a"essa$o atravFs $a seguinte ER? em seu navega$or# ;ttp/EElocal;ost/"0&7I'HPIRT# on$e 3DMI@IP(RT F a !orta "onfigura$a $urante a instalao !ara mani!ular os assuntos a$ministrativos+

-igure @9/ Instalando um arquivo 30R

Segun$o: sele"ione a a=a .e9 Aplications: no !ainel V esDuer$a Pressione o =oto !eploA en"ontra$o no !ainel V $ireita @a tela seguinte: !ressione o =oto Bro*se !ara sele"ionar o arDuivo W3R !ara instalar Pressione o =oto Next en"ontra$o na !arte su!erior V $ireita Pressione o =oto $e 3inis6 na !rP5ima tela Para=Fns: sua a!li"ao foi instala$a

Programao WEB

',

JEDITM

6# Ser,let e $arLmetros de Aplicao


7.1. ervletCon/i* e !ar-"etros de 'niciali(ao da ervlet
( o=Jeto $a "lasse ServletConfig F !assa$o !ara uma Servlet es!e"Mfi"a $urante sua fase $e ini"ialiBao+ Esan$o isto: uma Servlet !o$e re"u!erar informa>es es!e"Mfi"as !ara si mesmo 2!arTmetros $e ini"ialiBao9+ 3 Servlet tam=Fm !o$e gan ar a"esso a uma instTn"ia $o o=Jeto $e ServletContext usan$o o o=Jeto $a "lasse ServletConfig+ (s !arTmetros $e ini"ialiBao so $e gran$e uso: es!e"ialmente Duan$o li$amos "om informa>es Due !o$em variar "om "a$a $esenvolvimento $a a!li"ao+ 3lFm $isso: forne"en$o $a$os !ara a Servlet "omo !arTmetros: evitamos a "o$ifi"ao $esses !arTmetros $iretamente na Servlet: !ermite aos $esenvolve$ores a a=ili$a$e $e mu$ar o "om!ortamento $a Servlet sem ter Due re"om!ilar o "P$igo+ Po$emos a$i"ionar !arTmetros $e ini"ialiBao !ara a Servlet es!e"ifi"an$oSos na $efinio $o deployment descriptor $o Servlet+ 3 seguir: temos uma amostra# ... 7Servlet8 7ServletAname8QirstServlet7%ServletAname8 7ServletAclass8jedi.Servlet.QirstServlet7%ServletAclass8 7initAparam8 7paramAname8debu1"nabled7%paramAname8 7paramAvalue8true7%paramAvalue8 7%initAparam8 7%Servlet8 ... 3s tags Hinit2param; e H<init2param; informam ao "ontRiner Due estamos "omean$o e terminan$o a $efinio $e !arTmetro: res!e"tivamente+ [!aramSnome\ $efine o nome $o !arTmetro: e Hparam2,alue; $efine seu valor+ Para ter a"esso aos !arTmetros $a Servlet: $evemos !rimeiro o=ter o a"esso ao seu o=Jeto ServletConfig: Due !o$e ser feito re"u!era$o soli"itan$o ao mFto$o getServletConfig29+ 3!Ps isso: o valor $e !arTmetro !o$er; ser re"u!era$o atravFs $e uma String " aman$o o mFto$o getInitParameter29 e forne"en$o o valor $e Hparam2nome; "omo o !arTmetro+ public void doGet(HttpServletRequest request, HttpServletResponse response thro!s Servlet"xception, #$"xception { Servlet?on)i1 con)i1 6 1etServlet?on)i1( ; Strin1 is:ebu1"nabled 6 con)i1.1et#nit/arameter(&debu1"nabled& ; i) (is:ebu1"nabled.equals(&true& { ... > 3 amostra $e "P$igo a"ima ilustra o !ro"e$imento+

7.2.

ervletContext e !ar-"etros de Aplicao

( o=Jeto $e ServletContext informa a Servlet o a"esso ao "onte5to $e a!li"ao+ Pense so=re o "onte5to $e a!li"ao "omo a ;rea na Dual as a!li"a>es se movem+ Esta ;rea F forne"i$a !elo "ontRiner !ara "a$a a!li"ao WEB+ Com "a$a "onte5to $a a!li"ao sen$o $iferente uma $o outra: uma a!li"ao no !o$e a"essar o "onte5to $e outra a!li"ao+ Ter a"esso a este "onte5to F im!ortante: !orDue atravFs $este: a Servlet !o$e re"u!erar !arTmetros $a a!li"ao+ Q !ossMvel tam=Fm armaBenar $a$os Due !o$em ser re"u!era$os !or DuaisDuer "om!onentes na a!li"ao+ Do mesmo mo$o Due !arTmetros $e ini"ialiBao !o$em ser forne"i$os !ara Servlets in$ivi$uais: eles tam=Fm !o$em ser forne"i$os !ara uso !ela a!li"ao inteira+ 7contextAparam8
Programao WEB '-

JEDITM

7paramAname8databaseLR-7%paramAname8 7paramAvalue8jdbc2post1resql2%%localhost2UPRO%jedidb7%paramAvalue8 7%contextAparam8 ( "P$igo a"ima e5em!lifi"a "omo a$i"ionar $iferentes !arTmetros $e a!li"ao+ ( elemento &M? usa$o aDui F Hcontext2param;+ Ca$a instTn"ia $e tal elemento $efine um !arTmetro !ara uso !ela a!li"ao inteira+ Hparam2name; e Hparam2,alue; tra=al am $a mesma maneira Due a tag Hinit2param;+ NOFA# @ovamente: lem=reSse Due a es!e"ifi"ao F restrita Duanto a or$enao $e seus elementos $entro $o $es"ritor $e $esenvolvimento+ Para manter o arDuivo *e9#xml v;li$o: to$as as entra$as Hcontext2param; $evem ser lo"aliBa$as 3@TES $e DuaisDuer entra$as [Servlet\+ ( !ro"e$imento !ara re"u!erar os valores $os !arTmetros F =em !are"i$o "om o utiliBa$o !ara re"u!erar os !arTmetros $e Servlets es!e"Mfi"as+ Q uma instTn"ia $e ServletContext Due a Servlet $eve mani!ular+ Isto !o$e ser re"u!era$o " aman$o o mFto$o getServletContext29 $e uma instTn"ia $o o=Jeto ServletConfig $a Servlet+ public void doGet(HttpServletRequest request, HttpServletResponse response thro!s Servlet"xception, #$"xception { Servlet?ontext ctxt 6 1etServlet?on)i1( .1etServlet?ontext( ; Strin1 jdbcLR- 6 ctxt.1et#nit/arameter(&databaseLR-& ; %% cVdi1o customi(ado setLR-(jdbcLR- ; ... >

7.$. &esu"o

3 te"nologia Servlets so a soluo Java !ara a !ro$uo $e "onteL$o $inTmi"o !ara a WEB em res!osta a te"nologia CGI+ Servlets !ossui v;rias vantagens so=re CGI: in"luin$o uma re$uBi$a na ;rea $e o"u!ao $e memPria e menos $es!esa !ara "a$a soli"itao+ Ema Servlet est; "om!letamente a$ministra$a !elo seu "ontRiner+ ( Lni"o "P$igo ne"ess;rio !ara os $esenvolve$ores F a fun"ionali$a$e $a im!lementao+ Para "riar Servlets: os $esenvolve$ores $evem "riar su=$ivis>es $e "lasse $e HttpServlet e seus lugares $e im!lementa>es fun"ionais em DuaisDuer $os mFto$os: do0et ou do$ost+ Detal es $e !e$i$o !o$em ser re"u!era$os !or HttpServletRequest: e mFto$os gera$ores $e res!osta !o$em ser a"essa$os !or HttpServletResponse+ Estes so !assa$os "omo !arTmetros !ara do0et e do$ost+ Para instalar Servlets no "ontRiner WEB: F ne"ess;rio "riar arDuivos W3R+ Este !ro"esso $e em!a"otamento !o$e ser automatiBa$o !or DualDuer IDE ou !elo uso $e uma ferramenta $e "onstruo+ Des"ritores $o $esenvolvimento so !artes essen"iais $a a!li"ao+ Eles $evem ser lo"aliBa$os no $iretPrio $e a!li"ao .EB2 N3 e seguir $etermina$as regras+ ParTmetros !o$em ser forne"i$os !ela a!li"ao usan$o o $es"ritor $e $esenvolvimento e re"u!era$o usan$o os mFto$os em instTn"ias ServletConfig ou ServletContext+

Programao WEB

'7

JEDITM

M# Exerccios
8.1. !er*untas so#re o Ciclo de Vida da ervlet
Res!on$a Vs seguintes !erguntas so=re as fases $a Servlet# )+ Ouais so as - fases $o "i"lo $e vi$a $e uma Servlet` '+ Ouais so os mFto$os asso"ia$os a "a$a fase $o "i"lo $e vi$a $e uma Servlet` /+ Por Due o "P$igo "olo"a$o no mFto$o service $e uma Servlet !re"isa ser t rea$Ssafe` ,+ Ouan$o uma Servlet F $estruM$a` -+ Ouantas veBes o "P$igo "olo"a$o $entro $o mFto$o init29 $o Servlet !o$e ser " ama$o` E o "P$igo $entro $o mFto$o service29` 7+ Caso a Servlet esten$a a "lasse HttpServlet: Duais im!lementar !ara !ro$uBir a fun"ionali$a$e ne"ess;ria` mFto$os a$i"ionais !o$eremos

8.2. 4xerc2cios de 9anipulao de &equisio:Gerao de &esposta


)+ Da$o o seguinte formul;rio# 7H+,-8 79$:;8 7)orm action6&CddServlet& method6&post&8 "nter number < 2 7input tEpe6&text& name6&operand<&%8 7%br8 "nter number O 2 7input tEpe6&text& name6&operandO&%8 7%br8 7input tEpe6&submit& value6&/er)orm addition&%8 7%)orm8 7%9$:;8 7%H+,-8 Crie uma Servlet " ama$o 0ddServlet Due ir; re"u!erar ' nLmeros $a$os !elo usu;rio: a$i"ioneS os: e gere o resulta$o+ '+ Da$o o seguinte formul;rio# 7html8 7title8,enu7%title8 7bodE8 7H<85hich )ood items do Eou !ant to orderJ7%h<8 7)orm action6&,enuSelectionServlet& method6&post&8 7table8 7tr8 7td87input tEpe6&chec4box& name6&order& value6&OI&8 7td8 / OI 7%td8 7%tr87tr8 7td87input tEpe6&chec4box& name6&order& value6&OU&8 7td8 / OU 7%td8 7%tr87tr8 7td87input tEpe6&chec4box& name6&order& value6&<U&8 7td8 / <U 7%td8 7%tr87tr8 7td87input tEpe6&chec4box& name6&order& value6&WI&8 7td8 / WI 7%td8 7%tr87tr8 7td87input tEpe6&submit&87%td8 7%tr8 7%table8 7%)orm8 7%bodE8 7%html8
Programao WEB

Sundae 7%td8 Re1. 9ur1er 7%td8 :essert /ie 7%td8 Rice ,eal 7%td8

'A

JEDITM

Crie uma Servlet " ama$o 7enuSelectionServlet Due ir; re"u!erar as sele>es feitas !elo usu;rio: a$i"ionar os seus valores: e retornar o resulta$o "om!uta$o !ara o usu;rio+

8.$. !er*untas so#re i"ple"entao


)+ I$entifiDue o elemento no arDuivo *e9#xml Due ser; res!ons;vel !or# a9 Conter o nome lPgi"o usa$o !ara se referir a uma Servlet+ =9 Ser o elemento root $o arDuivo $e "onfigurao+ "9 Definir um ma!eamento entre uma Servlet e uma soli"itao $o usur;rio+ '+ ReorganiBe as seguintes informa>es no or$em "orreta $e seu a!are"imento $entro $e um arDuivo &M?# sessionS"onfig servlet servletSma!!ing %el"omeSfileSlist /+ Su!on a termos uma Servlet "uJo nome F TrialServlet: "rie um ma!eamento $e mo$o Due TrialServlet ser; " ama$a !ara "a$a !e$i$o# tt!#88] ost^8]"onte5t^8m1E5er"iseServlet+ ,+ ( Due so arDuivos W3R` -+ Da$o um !roJeto WEB e5istente em nossa IDE: "omo um arDuivo W3R !o$e ser gera$o`

Programao WEB

'6

JEDITM

$arceiros que tornaram 5E!

FM

poss,el

'nstituto C% Patro"ina$or $o DFJEG+ un 9icros)ste"s Forne"imento $e servi$or $e $a$os !ara o armaBenamento $os vM$eoSaulas+ Java &esearc1 and Develop"ent Center da Universidade das Filipinas Cria$or $a Ini"iativa JEDITM+ DFJUG Detentor $os $ireitos $o JEDITM nos !aMses $e lMngua !ortuguesa+ 5anco do 5rasil Dis!oni=iliBao $e seus telecentros !ara a=rigar e $ifun$ir a Ini"iativa JEDITM+ !olitec Su!orte e a!oio finan"eiro e logMsti"o a to$o o !ro"esso+ 5orland 3!oio interna"ional !ara Due !ossamos al"anar os outros !aMses $e lMngua !ortuguesa+ 'nstituto Gaudiu":C;55 Forne"imento $a sua infraSestrutura $e ar$%are $e seus servi$ores !ara Due os mil ares $e alunos !ossam a"essar o material $o "urso simultaneamente+

Programao WEB

'<

Você também pode gostar