You are on page 1of 40
Capitoto 13 segue servlet con il server Apache Tomcat Rispondere alle richieste HTTP da un WttpServiet ‘Saper sdiigere tichiest a rrorse Web statiche edinamiche 13.1 Introduzione Internet e il World Wide Web stanno diventando sempre pit popolari. Internet tiene unito Vintera mondo delle informazioni, mente il World Wile Web rende Interne facile da uiliz- ‘ate, grazie anche allefunzionalta multimediali. Le aziende le organizazioni vedono ormai Internet e il Web come strumenti di importanea erucae allincerno delle proprie suategie informative. Java offt varie capacith di rete che permetono disviluppare con facia applica- ion basate su Internet e aul Web, Java pub non soltano specifica il paralllsme artraverso il mulighreading, ma pud anche permettere ai prograrmi di cercare informazioni in giro pet il mondo, collaborendo con programmi in eseeurione ali computer sparsi ovunque. Java £ persino in grado di permet alle applet e alle appliczioni in esecurione su di uno stesso ‘computer di comunicare le une con le altrs, sempre nel rspetco della scare, Lagestione delle rei (nerworking) rappresenta un argomento complesso € molto vasto. Ja offre molte capacits a livello di nerworking, le quali sono raggruppate allinterno di diversi package. Le funionalies di rete fondamentali sono definite da lassi einteracce del package java.net, artaverso il quale Java offre delle comunicazioni basa su socket che permevzono alle applicazoni di vedere le reti come dei flussi di dati (un programma pud leggere da un socket 0 scrivere su un socket proprio come avviene con i file). Le clas ele interface del package java.net offrono inolie comtnicazoni base su pacche, che pet- rmettono di trasmeteresingoli pacchert di informazioni (comunemente utlizzati per ta- smerrere audio ¢ video in Internet). Nel capitolo 7, avete visto come sia posible creare ‘manipolare i socket, e come sia possibile comunicare per mezzo di pacchett di dati Fanzionalie direte pi complese sono forme dalle dase ncerfacce dei package Java.rmi (Gingue package) per Remote Method Invocation (RMI): dai package org ong (setce package) pet Common Object Request Broker Architeeure (CORBA), che fanno parte di Java 2 API. I package RMI permerzono agli ogee Java che sono escguit su macchine viral Java diverse (normalmente in ecuzione su computer diversi) di somunicare per mezzo di chiamate a ‘metodi remoti. Queste chiamate sembrano invocare mevodi su un oggerto dell stesso pro- igramma, ma in alts hanno capacith di ere incorporate: (basate sulle funzionalita del package Java.net) che comunicano le chiamate di metodo id un alto opgeeto su un computer 638 CapstoLo 13 diverso, I package CORBA offrono funsionalie simili a quelle dei package RML. Una dif. renza fondamencale ua RMI e CORBA. pero, che RMI pu essere uiizato solo ta oggeti Java, mentre CORBA pud essere ulizato ea due appliczioni qualia in grado di com- prendere CORBA (incuse le applicazioni sritte con alt inguagei di programmazione) La non dscusone ul rei oz Fatencione su enrambi fase una c- sion ip ow ere Icke escusone di detetminae won mente er aan ee ion riponde al cen. Queso tno di comunicaione, bs sila SES eapoes conic labs dl wert va Jen Sve Pages GSP). Un ar sacad le nsonala dun server come pet eempio um server We. I package Snow serdetejavorsorslet np fonizonl castle nerfs rdf IESE package Jovenssorvlot.jap fever servt. jsp tagert fron I tind lines ee eendon le nat srt pe fa Seer Pgs Undo sae case JSP pect coated pgine Web d eaiare pine che inept sre eth ova epenino di srvere code srplen dale Java detente el pagina Web, ‘Una tipicaimplementazione di questo modellobasato sulla richiestae sulla risposta av- ‘viene tai browser ei server World Wide Web. Quando un utente seleziona un sito Web per Jnezzo dl proprio browser (Capplicazione client, viene inviaca una rchiesta al server Web Corrispondente (Capplicazione server il sever risponde al cline inviando la pagina Web XHTML (la versione di HTML piit recente) desiderata servet sono efficaci per svluppare soluzioni baste sul Web che Forniscona acceso sicuro a un sito Web, interazione con un atabase per conto del client, generazone dinamica di documenti XHTML da visualizeare hel browser, e mantenimento di na sesione unica per ogni client. Questo capitolo presenta dei servlet che estendono le Funzionalia dei server World Wide “Webs, ovveto la foxma pitt comune di servler artualmenteesstente. I capitol 14 discute JSP, cero pagine che vengono compilatein servlet. JSP & una modalia potene efile da usare per implementaeil meccanismo di riches isposta del Web senza dover conoscerel livello 1H deweaglio det servlet. Inseme, serve e JSP formano il livello Web di Java 2 Enterprise Edition )2EE). “Moti svluppatori pensano che i servlet siano la sluzione giusta per le applicazioni che sano pesmterene database che comanicano con cose clin sh, cit appli toni che tichiedono un supporto minima per quanto riguarda il lato client. Il server si ocupa del'acceso al database. 1 ent siconneteal server usin protocol standard dsponi- Bilis quasi ute le piaeaforme cent. Quindi il eodice per la generazone dinamica dei con- tenutt pud essere scrito una volta sola ersiedere sul server, dove viene acceduto dai client, Tn questo capitolo, i nostri esempi con i servlet mostrano il meccanismmo di ichiestal risporta del Web (principalmente, con rihieste get ¢ post) la ridierione delle rchieste ad ltr risorsee intetazione con i database attraverso JDBC. San MicosytemsatavenoJant Commi Poe, occupa di stupa spi= cheater Linon ein et eanbaandere ‘rity dal jue Sure Funin apache. come re de pret bart Gavarta, apace: ora a parte pine rata a seve JSP del prog fata = Sener mar ces timplememrone ual di iflriento deh anda ela SRP Gf Urccmo Tomen pe mos set n questo capitl. Poe sar a ‘Sake pl tcen di Tomar dal sto Web del pogo lar Ter pie {see Tsever 639 questo capitol, doveteinstallare Tomcat o urfimplementazione di servlet ¢ JSP equivalent. Discureremo Finsalazione ela configurazione di Tom-at nee sezioni 13.3.1 ¢ 13.3.2, dopo aver introdorto il nostro primo esempio. Tati file diesempio del captolo sono disponibili ‘al sito Web wu. apogeontine.con/1ibri/@2007 /elegati/. 13.2 Panoramica e architettura dei serviet In questa sezione, verti presenata una panoramica dell tecnologia dei servlet Java, Verranno resi in esame var aspetti tc cui Te clas, i meradielesccezion legate i servlet. Le prossime “ion presenterannoexempi di codice pe la creazione disitem client-server di tipo mlivella, {grazie all'uso della teenologia servlet edi JDBC. Incernetoffe molt prvacoll. I protocole HTTP (HoperText Tums Protocol) che cost- tuisce la base del World Wide Web, utiliza gli URL (Chiform Resource Locator) per localizza- re le risrse all interno di Internet. Gli URL possono rappresentare file 0 directory, oppure fanzioni complese, come interrogazioni a database e ricerche su Internet. Pee maggior in- formazioni sui formati degli URL, vistare waw.w3.org/Addressing. Per maggioriinfor- ‘mazioni sul prorocollo HTT? veces consiglia di visiurewww.18.org/Protocols /nttp. Per informazioni di tipo generale riguardo a vari aspect del World Wide Web, si consiglia di visizare il sto ww. ¥W2.0rg. La tecnologia Java Server Pages® urestensione dla tecnologia dei servet. Di solito, si uusa JSP quando la maggior parte del contenuto che viene spedito al client ® resto statico € ‘markup, esolo una piesola parte del concenuico viene gnerata dinamicamente con del codice Java [servee vengono invece usati quando una piccolaparce del contenuto che viene spedito al cient & testo statico € markup. In reali aleuni servlet non producono contenuto, ma eseguone dei compiti per conto del client, poi invocano alti serleco JSP per fornire una risposta. Notate che, nella maggor parte dei csi i serve ele ecnologie JSP sono intercambiabili server che esegue un servlet viene chiamato contenitare di serolet © motore per serve. Servlet e JSP sono diventati cosi popolar, che sox ora supportatidirettamente 0 con plugin di erze parti dai princpali server Web e server di application, 2 cui Sun ONE Application Server, Microsoft Internec Information Services (IIS), Apache HTTP Serves, BEA WebLogic, IBM WebSphere, il Jigsaw’ Web Server del World Wide Web Consorcium, ¢ molt alt 1 server di quesco capicolo mostrano le comunicaioni tra cliente server per mezzo del prorocollo HTTP del World Wide Web, Un client invia una richiesta HTTP al server i Server ticeve la tichiesta e la diige ai servlet appropriati perché venga elaboraa. I servlet ‘seguono le elaborazioni necessrie (che spesso impleano T'interazione con un database), ddopodiché ritornano i rsultai ortenuti al client (notmalmente sore forma di documenti HTML, XHTML o XML da visualizare in un browser, anche se possono essere ricoenati alti formati di dati, come le immagini ei dati binar) 13.2.1 Linterfaccia Serviet e il ciclo di vita dei servlet ‘Dal punto di vista delfarchiterura, tutti servlet devono implementareintefaccia Servlet. Come nel caso dei metodi degli applet, anche i metndidellnteraccia Servlet vengono invocati automaticamente (dal contenitore di server). Questa interfucia definisce i cingue smetodi desritt nella figura 13.1 640 Caprroto 13 Isewet 641 Metodo Dercrizione void init( Servietcoatig contig ) ‘Questo metodo viene automaricamente chiamato una volta durante il ciclo cdi cxcewione di unservet pe iniilizarlo. Vargomento ServletContig viene fornitoautomaticamente concenitore di servlet che esegue il serve. Servietcontig getServietcontig() Questo metodo storna un sferimento a un oggetto che implementa Finest Srvietconig- Quo og foi aco ll ior: rmazioni di configuazione del servlet, come per esempio i parametti di iniilizavione ei Servletcontext del servlet, che forisce al servlet un ((owvero i contenitore di servlet su cu Bin esecutio~ scceso al suo at nei vl. String getserviettnto() Questo metodo & definite da un programmarore di servlet per srornare tuna sttinga contenant informazioni sl servlet, come per esempio autore cl versione void servico( ServietRequest reqlest, Servietfesponse response ) Quest il mecoda chiamato er Hspondere alla richiesta di uncle voia destroy() ‘Questo metodo di“pulii” viene chiamaro quando un servlet viene rermi- rato dal contenitov di servlet sl quale era in esecuione. E un buon meto- do per iberare ur risorsa usta dal selec (per esempio un file apereo © tuna connessone di database apert) Figura 13.1 Imetodi delVinerfacca Servet (package javax servet) i nt nla Pr es rd ilo iv on eden quand il comer sexe serve in ne lt tps la pia teeta ie eve coe, ema che anit ae ee sateen isclt mews neo nit sede, Dopo caer eatin frp rapond la pina eter Tule aan er rca sensed ane ce eel ecb ecabr espe wee tar Dune cia diunsenes Inco sec ene chamao se ereetcen Opnt nme ihissapcmene pode un nar ted & sees i care ds nl ute fee cpu mewdo service SRORRTG Gener seinen vee cima fic estoy de eine nani sma ea Far partie un nuovo thread pr ogni riche pit efciente che fr partir un nuovo pro= cso, come nel caso di alr tecnolegieerver come CGI {Nota come i serves, FasCG1 climina il problema di for partiv ue nuovo pricezo per ogni richie) | package dei servlet definiscono due classi abstract che implementano [interfaccia Serviet (la dasse GenericServiet del package javax.serviet ela chsse HttpServiet del package javax. gerviet..nttp). Queste cls forniscono le implementazioni di defaule i tui i merodi della classe Servlet. La maggior pare dei servlecestende GenericServiet oHetpserviet, sovrascrivendo alcuni o cut i metoci con i comportamenti personalizzti del caso. Gli csempi di queso capitlo exendono rut la dane HttpServiet, che defnisce le capacits di elaborzioneavanzate di servlet che extendono le Fuszonalits di un server Web metodo principale di ogni servlet il metodo service, che riceve sia un oggetto Servietnequest che un oggewo ServietResponse. Quest ogget foriscone Paccesso ai fluid input c output che permertono al serve di lege i dat cel cen ediinvare dat al client. Quest us di dati possono essere basa su byte osu crater. Se si veificano dei problemi duraneTescurione ci unserer, engono anit le excezini ServleeE ception 0 roException teria dl software 13.2 [RD rere erecta eae FS eer ere ea eae neers ee ge aege areata ape ee ae a eee ieee ce 13.2.2 La classe HTTPServiet I servlet basa su Web estendono tpicamente la clase httpServiet, La classe HttpServiet sovrascrive il metodo service per disinguere tral richiestetipiche ricevure da un browser Web, I due tipi pit: comuni di richiete HTTP (conorciuti anche come metodi di riciesta) sono get e post. Una richista got atione (o reper) informazioni dal server. Le richieste get vengono comunemente ulizzate per recuperate un documento HTML o uaimmagine. Una richiesta post, invece, invia dai al server. Le rcheste post vengono comunemente uulzeate per inviare al server informizioni proveniexti da un modulo HTML, nel quale utente ha inserito dei dati da inviare al server affinché questo possa eseguire una ricerca in Internet interrogare un database, oppure da invate al server per fornirgl informaioni circa autentcszione. LaclasseHttpServiet definisce i metodi deGet e doPost per rispondere rspectivamen- teallerichiese get epost di un client. Questi metodi vengono chiamati dal metodo service della classe Httpserviet, che viene chiamato quando a server giunge una richiesta. Il meto- do service deecemina per prima cos il tipo di richiesta, dopodiché chiama il metodo ap- propriate. Sono disponibile tpi dicchiese, di cui per’ non si parle in questo libro. I rmerodi della classe HttpServiet che rispondono agi alr tipi di richieste sono mosteati nella figua 13.2 (tut icevono parametsdi ipo HttpServietRequest eHttpServietResponse, ritorando void). I metodi della figura 13.2 non sono uilizat fequentemente. 6a Canrroto 13 i Ingegneria del software 13.3 [Non surascrivete il metodo servo in una sortoclase dint tpservet. Farle impedice al sereles di ditinguere rt diversi ip di richiena. | metodi doGet e doPost ricevono come argomenti un oggetto HttpSeryietRequest © ‘un oggetto HttpServietResponse, cxe consentono Fincerazione tr il client e il serve. T imetodi di HetpBervietRequest ficilino Pacceso ai dati forniti quale parte dell ichista: i metodi HttpServletResponse, inves, ficilitano il ritorno de isultati del server al client ‘Web. Le interiece HttpServietRequast e HttpServietResponse vengono discusse nelle prossime due sezioni 13.2.3 Linterfaccia HttpServietRequest Ogni chiamats a dodet o doPost perun HetpServlet rice un oggett che implementa averfuecia HtepServietRequest. Il server Web che esgue il servlet crea un oggetto ttetpServietRoquost, pasandolo al merodo service del servlet (che,a sua vols, lo pasa a doGet 0 doPost). Questo oggetto cantene la richest del client. Sono disponbilt mol snetodi per permettre al served cborue la ichiesta del dient. Alcuni di questi merod provengono dalimefucia ServdetReqiest, over iterfaciaexesa da tpServletRequest. Arcam fel mexod uz in quest cpitolo vengono presenta nell figura 13.3. Porte ttovare na lita completa del merodi di HetpServietRequest preso {ava.sun.con/2ee/2sthee/echdocs /api/savex/serviet/http/ intepservietRequest.nenl oppure potete scaricare einstalare Tomcat (come vedremeo nella sxione 13.3.1) «vedere la dlocumentazione sl vostro compute ——————————————————eee ‘Chiamato in spon a un rchiesa HITTP delete. Questo cipo di rchiesta & rormalimenteutlizata per cancellae wn ile dal server. Pouebbe non essere dispo- bile su alcuni server a cuss dei sischi di sicurezza che comport dotiead —_Chiamato in sgposta a una riciesta HTTP nese. Questo tipo di rchiesta& no ‘malment ulizeata quando i dient vuole sapere solo Fintestazione della risposts, come il tipo di contents e a luaghezza del contenuto dell isposta, dooptions Chiamato in rsposta a una rchiest HITTP options. Ritorn informazioni al dient indicando le opzieni HTTP supporac dl server, come la versione di ep (100 11) ei metodi di ichiesta che il server supports. dorut Chinato in risposes a na tchiesta HTTP put. Questa ichiesta normalmente utlizata per memorizzare un file sul server. Potrebbe non ese disponibile ss aleuni server a causa de ischi di sicurezza che compotta otrace — Chiamavo in risposa a una rchieta HTTP trace. Questa richiestaénormalmen- te utlizata peril debugging, Limplemeneazione di questo metodo rtorna auto- smaticamente un documento HTML al client, contenenteVintestazione della ric ciesta (dat inva dal browser quale parte della schist), Figura 132 Atri metodi della classe HttpServiet I server 643, yraneter( String ne} Ritorna il valoreastociato con un paramo inva al servee quale parce di una richista get o post, argomento nane 2il nome del parameto, Enumeration getParaneterwanes () Ritorna i nomi di tutti i parametr inva al servlet quale parte di una richiesta post, Stringl] getParanetervalves( string nane ) Ritomna un array di stringhe contenent i valor di uno specifieo parametro del servlet (il parameero ha valori mutiphi) Cookiet} getcookies() Ritornasin aray ci oggeti Cooke memosizati sul client dal server. Cookie sono tual anche dal serves per identifica in modo unico i client. betpSession getGession( boolean create } Ritorna un oggettoHetpsesesion associat con la sexsione di navigazione del client, Un oggerco HttpSession pub essere cexo da questo metodo (argomento true) se non erste git po il client jgura 13.3 Alcuni metodi delinterfaccia HitpSerdetRequast 13.2.4 Linterfaccia HttpServletResponse Ogni chiamata a doGet o doPast per un HttpServietriceve un oggsto che implementa Tincenficia HttpServietesponse. I server Web che esegue il servler crea un oggetto HetpservietResponse elo passa l metodo service del servlet che, asua vot, lo passa a dover o dost). Questo oggettofomisce molt medi per permertere al servlet di claborare la vsposta perillient. Aleut di quest metodprovengono dallstericria ServietResponse, omeroFincerfacca essa da HttpservietRespanse. Alcuni dei tod chiave tlzati in aqusto capitolo vengono presen nella figura 13.4 Pte wovare una lisa completa dei smetod di HetpServietResponse preso java, sun.con/j240) j2sdkee/techdoce/api/ javax/serviet /hetp/ ittpServietResponse. hem ‘oppure potete scaricare ¢ installare Tomcat (come vedremo nella sezione 13.3.1) ¢ vedere la ddocumentazione sul vosto computer. Metodo _Descrio void adddookie( Cookie cookie ) Usiliezato per aggiungere un Cookie alncetaione della visposta per il lent. [Hera mats del Cookie ei fato che Cookie sano abla aul client determins- nose Cookie verranno 0 meno memoria sul lent Figura 13.4 Alcuni metodi dellinterfaccla HupServletResponse (continaa) 644 Carrrovo 13. a ee Metodo _Deserizione ServietoutputStrean getoutputstrean() Cuiene un fuso di byte di ourput che permete di inviare al client dati bina Printiriter gottriter() ‘Otsiene un fluso i carazeri di ouxpor che permette di inviare al cliene dat in formato est, vosa setcontentType( String type } Specitie il tipo MIME dalla rsposta al browse. I tipo MIME aiuail browser a " ; 22 23 out.printin( *<100CTYPE ntl PUBLIG \*-//k9C//OTD * + 24 XHTML 1.0 Strict /EN\* Y"hEtp:/ Jw. ¥a.0cg" + 25 TR/xntaL/OTD/xnemLt -strset.ded\">" ); 26 ar out.printIn( "sitm) xnlns » \*rttp//we.4@.org/1998/:ttml\">* ey 2 11 sezione heed del docunento 30 fut.printin( ** ); 3 out.printin( “A Sinple Servlet Exanplec/title>" ); 2 out.println{ "</head>" ); 2 3 11 sezione body det docunento 26 out.printin( "<body>" ); 6 out.printin{ "<ht>Welcone te Servietsi</hi>" ); a7 out.printin( "</body>" }; 3 et 11 fine documento xATa. 0 out.printin( "e/mtal>* 5 a fut.close(); // close stream to complete the pa oe 4a Figura 13.5 WelcomeServet, che elabora una richesta HTTP get La muperclase HTTPServiet fornisce il metodo Get per rispondere alle rchieste get: ‘La sua funsionalica di defaue & quell di indica un estore “Metodo non permesso" ipica- ‘mente, questo errore viene indicato in Internet Explerer con una pagina Web che dichiara “Questa pagina non pud essere visualizata’, mentre in Netscape con una pagina Web che dichiara "Error: 405". Nellesempio, il metodo doGe: viene sovrascritto (righe 11-42) per {omni un'elaborazione personalizzata dela richiesca get. Il metodo doGet riceve due argo- ment: un oggeto che implementa HttpServietRequest © un oggetto che implementa Httpservietaesponse (entrambe dal package javax.serviet..nttp). L'oggetto HttpservietRequest rsppresentlarichiesta del lien, mentreoggerto HttpServietResponse rappresenta la risposta del serve. Se doget non é in grado di gestce la rchiesta del client, lancia una javax. serviet. ServletException, Se doGet incontra un errore durante Vela~ 646 Carrrovo 13 orazione del flusso di dati (Ieggerdo dal client o scrivendo al client), lancia una java. 40. 10Except ion. Per mosteare una rsposea a una rcsista get, questo servlet crea un piccolo documento XHTML contenente il testo "Weleone to Serviets!". Il testo del documento XHTML Tappresenca la rsposta al client. Questa risposta viene invita al client areaverso Voggesto Printlrster acu il servlet ha avuto accesso per mezzo del oggetto HTTPServLetResponse. La tiga 15 usa il metodo setContent Type dell'oggetto response della classe rTPGervietResponse per indicate i tipo di contenuto della risposta peril cient. Cid per- ‘merte al browser di comprendere e gestre i contenuto. Il ipo di contenuto & note come tipo [MIME (Multipurpose Internet Mil Exension). Ta questo esempio, viene spcifcato un tipo “iconcenuto text htm, per indicare che al bowser che l sposta un documento XHTML, I browser sa che deve eggereitag XHTML nel documento, formattalo in base a quest tag «poi viswlizarlo nella finesra del brewser. La riga 16 usa il metodo getitrdter deloggetto response per oxtenere un riferimento allloggetto Printwrster che permeste al server di inviare al client il documento XHTML. [Nott Se la rsposta ® composta da dat binat, come nel caso di untimmagine, viene wilzza- ‘wil metodo getOutputStreanper oenere un siferimento.aun oggeto Serv LetOutputst ream] Le tighe 21-40 creano il documente XHTML agglungendo delle sringhe a StringBuffer out con il metodo printin. Questo metodo stampa un caatcere di nuova riga dopo il so Srgomento stringa. Quando la pagina Web viene vsualzzata, il browser non usa i carateri di ‘nuova riga, ma questi compaiono nel sorgence del ile XHTML che potete vedere seezionan- do HTML dl menu Visualiza di Internet Explorer 0 Sorgente Pagina dal menu Visuaiza di Netscape Navigator. La tiga 41 chiudeil lusso di output, svuota il buffer espeisce le infor- smacioni al client, 1 documento XHTML della figuss 13.6 fornisce un modulo (form) che invoca il servlet della figura 13.5. La proptiet action dell'clemento form (1 ntp6/welconet) specifica i percorso dell URL. che invocail serve, la proprets netnod indica che il browser spedisce tina richiesa get al serve, che provocherh una chiamata al metodo doGet del servlet, CURL specifica come action in queso esempio viene dicuso in detaglio nella seione 133.2, dopo he sapemo come impostare e configure Tomcat peresepuire i servlet della igura 13.5. <n vorsion = "1.0" ‘in0CTYPE html PUBLIC "=//¥9C//OTD XHTML 1.0 Strict) EN" "netp/ wn. ong/TR/xhtel1/OTO xhtml -strict "> <<i-= Fig. 18.6: WelooneServiet.ntal ——> <ntm xming = “http:/ /oev.x3.0r9/1869/xhtal > nea ‘ctitleHandling en HTTP Get Request “vod ‘form action = *)jhrtpS/welconet* method = ‘get”> oe eee Figura 13.6 Documento XHTML in cull proprieth action delfelemento form invoca WelcomneSerdetattraverso alias welcome! specticato in web.xml (continua) T sear 647 “ 6

Click the button to invoke the serviet 6 ‘input type = ‘submit value = "Get HTIL Oocunent* /> 7 6 48 20 21 Perec entiation sue = Be ES ew So Eotnts Jot na te |! Sarah Pontos (hee atone rks ert SME rento form invoca ‘WelcomeSeret atrraverso [alas weleeme| specifica in web.xml (continua) Nou chee xbaman di perpio moran wo URL come nome re: aocalnor, an nome wot la maggie pede computer he apponano | proecol di tee buat su TOPAP come HTTP. Chereno spo loeanoyt pe dmostare ropa Che uno fret ul computer local n mode ce iene ema una connesone de posta comungu impure conceti dela programnatione con lee In queso emp Tcaltoet nda che erver ua! iseet®ialo@ in oe ral commute ce It nome dl seer eguito da 6000, che specie numero di pora TCP sci server “Toren sponds lle echt dei cen brower Wo aun pr defi che por 0 Sale poral sever ac fel chee, na Tomcat aspera le iets pores S08D Questo peer a Tome dese segue nella steso compres inte a server Web scar sme mpeg ger leche, Se non speiichimo in modo pico i treo di por nelPURL i evict on cecal nour chs ¢ werd vin tm rchagge eros dl on i Ingegneria del oftware 13.4 La documencsione di Tea specif come iar coma server We, come Apache HITP Server e Micro 1. a 648 Caprro.o 13 porta quest cso, non sono ported spo hardware ale quai vngono call de cave del name ine ce ern cent di chide seri ves su duno ‘Mo sever Il numer por spec a poszone in cul un server atendee eve le nncan! dei cene Quando un ciew step un sre er cher un servo Fee deve spctare i eorewo numero di porta, alimend la rhiesta non pot este host umes pra son epost on vat fio 96535, so ise ‘put di pore pet i prowcl TCP « UDB. Moe sister open siservano i numet di frien 1024 po’ evi di sige (come la po eltronica ei server World Wide ia). Generaimene, quest porte non dovebbero ener speieate come pore di conne- Sonealfinero dt prom deg wen alc sine opera nit chiedono spe SE prvi! acevo pera sumer i porta inferior al 1028 Con un numero cosi elevate di pore dalle quali scegliere, come pub un cient sapere quale porta uilizzare quando richiede un servizio? I numeri di porta bem conosciuti sono Atlizzati per deserivere servizi molto pepolari su Internet, come nel caso dei server Web e dei server di posta electronica, Per esempi, un server Web attende per default che i lien effet- tuino delle richest alla porta 80. Tut i browser Web conoscono questo numero come la port ben conosciuta di un server Web, sulla quale vengono effettuate le richieste di doeu- enti HTML. Quando digizate un URL. in un browser Web, quindi il browser si colleza rhormalmente alla porta 80 del sever 1a modo simile il server Tomcat utiliza la porca 8080 {quale proprio numero di porta ben conosciut. Tene pu acer al servlet solos que nallato aan server che ud ponder a tne nse pores eto Sete ne {Web enon ®necoaralcuna confgrctone parole pr ges chs a serve. In ici neces tgat un coneniore di srvelfineo dun seer Wome ib rccon Tomeate Apache o i sent We IS), server Wb che supporto i sev di we hanno uns procedure insalron pr tac. Se volte cui sere come re dun sewer We, consulate I docunenaone del ose server We. Ter nest ep uremo Apache Tomeat Lassion 1.31 diate mpostron ea confine Sed Tomes pe nos ul. Lasedione 13.3.2 dieu Finale del sere dla ipa 35. 13.3.1 Impostare il server Apache Tomcat “Tomeat& unvimplementacone completa e funsionante degli standard relaivi a servlet ¢ JSP Esso comprende un server Web, quindi pub exer usato da solo per rsa servlet © 58D; omungue, pd anche impostate come gestore di ichiestea sere JSP rcerue da server Web popolai come Apache HTTP server o Microsoft Internet Information Services AUS). Tomcat incgratonellimplementarione di sferimento di Java Enterprise Edicion di Sun Microrysers La versione pitt recente di Tomcat (al momento della srictara di questo libro, la versione 4.1.12) pub essere scaricata dat jakarta apache org/builds/jakarta-toncat-4.1,12/release/vé.1.12/Din in cai porete wovare una setie di fle di archivi, Limplementazione completa di Tomeat & ‘comtenuta nei fle che iniziano con il nome jakarta-toncat-4.1.12, Sono forse i format Zip, ex, ta € ear compress, Isemner 649 strate il contenuco dl file di archivo in una directory del vostro disco fisso. Per gli ‘sempi in queso libro, useremo la diecrory jakarta-toncat-4.1.12, Perché Tomcat fun- ioni corrttamente, dovete definire le variabili di ambiente JAVA HOUE e CATALINA HOWE, ‘YAVA_HOME deve puntare alla ditectory che contienelavosta installazione di Java (la nostra & :\6ak1 4.1), mentre CATALINA HOWE deve puntae alla directory che contiene Tomcat (anostra c:\Jakarta-toncat-4. 1.12). ® Colleudoe mesa a punto 13. Su lene piatiaforme,& posite ce debit far rpatre i compaue perch le nuove sarah di ambiente abbiana cet, Dopo ave impostato le varabil di ambient, poe fir pate il server Toma, Arie una fiesta de comandi(o una shel) espostatevi nel: ditecory bin allintermo di jakarta toncat-4.1.12 Inquesa directory, rover startup. bat, shutdown. at, startup-sh «shutdown. sh, per far parte e fermare i server Tomcat rspetivamente su Windows ¢ su UNIRILinuw/Mae O8 X. Pe far partie server, digite startup ‘Questo Lancia il server Tomcat, che viene eseguto sulla porta TCP 8080 per evitare confit ‘on i seever Web standard che di solito sano la pora 80. Per veifcare che Tomeat sia in ‘secuzione erisponda alle ichieste,aprite il vostro browser Web e inserite 'URL. hnttp://localhost:6080/ Questo dovrebbe visalizzare la home page della documencazione di Tomeat (figura 13:7) IL ‘nome localhost indica al browser Web che la pagins Web va richiesta al server Tomcat in ‘secuzione sul computer locale. Se la home page della documentazione di Tomcat non viene vsualizzata, provate FURL inttp://127.0.0.1:8080/ Sitesi “ap. The jakarta Project: yodr sng te pons a own Ameena youve “i emeetscrvsay Congo! (ecg a foe totes mnsonmapes tearm at famed ey rate nececoeg md yeetot cye Figura 13:7 La home page dell decumentazione dl Tomcat 650 Carrro.o 13 Lindirizz IP 127.0.0.1 8 Pequivalenwe numerico di Localhost. Collen ¢ mesa a punto 13.2 Seil nome Yocathast nan fenziona sl vostro computer, sottuiaela con indirizan IP 127.0.0.1 Der femareil server Toment, digicre shutdown dalla fincstra dei comand 13.3.2 Installare un’applicazione Web 1 JSP i servlet e i loto file di supporto sono installari come parte di una appliasione Web. Di ‘solto, le applicazioni Web sono installae nella sottodiectory webapps in Jakarta-toncat. 44-112, Unvapplicarione Web ha tuna srutura di diecrory ben precisa in cui risedono tui {fle che sono parce dll'applicazione. La strurura di directory pu essere creata dll mamini- stratore del server nella diectory weba2ps, oppute Vintera strutura di directory pud essere archiviata in un Web application archive file. Tale archivio & noto come fle WARe termina con TFestensione -war. Se un file WAR viene posto nella directory webapps, quando il server ‘Tomeat iniia Fesecuzione, estrae il contenuto dl file WAR nla struttra di sotcodirectory «di webapps appropriata, Per semplici, nel seguto creeremo la stuttura di directory git espansa per tutti gl exempi del eapitoo La strutura di directory dell'aplicazione Web contiene una radice del contest, owero il Iivllo principale di unintera appicazone Web, e diverse sottodirectory, che vengono de- serie nella figura 13.8. Errore tpico 13.1 sare “ere” o "serelet” come radice del conteto pd impedivilfunsionamentocor- resto dei serolet su aleuni ster ‘Configurar la radice del contest per uvappicszione Web in Tomcat richiede la crea- tione di una sotodirecrory nella ditecory webapps. Quando Tomcat iniza 'eecuzione, crea tuna radice del contest per ogni sotodirecory di webapps, usando_il nome della sortodirectory ‘come nome della radice del contesto, Pet eseguire gli esempi di questo capitol, erate la dlicectory Jntps nella directory webapps di Tomcat. Directory Deserizione Radice del contesto Questa la diterory radce per Papplicazione Web. Tut le pagine JSP, i document ETML, i seret file i support, come le immagine file ,c1ass, csedona in questa directory o in suesoredireeory. II nome i questa diectory viene spciicato dal creator dell applicaione Web Per fornie la sutra di una appicszione Web, porte inserire delle sowoditecory nella radice del eontesto. Per esempio, sel wosra ap- plicazone ust molte immagini, poet inserire una sotodirectory pe le immagini in questa directory. Gliesempi di questo capiolousano nts come race el contesto. Figura 13.8 Le directory standard dl urapplieazione Web (continua) T server 651 Directory Deserisione 8. 1NF Ques direcorycontine il derritiordellinsallacone pe applicazio- ine Web (eb. xm) WEB-InF/classes Questa directory conten fle .class dei server eal fle class di supporto usat in una applicaziane Web, Se le class sono parte di un package, la strurura di directory completa del package deve inisiare aul weB-1HF/2ib (Questa directory contiene i fl Java archivi (AR). | fle JAR posono contenere fle clase dei serve alr file Lass di sport usin tuna applicazione Web, Figura 13.8 Le directory standard i uriapplicazione Web Dopo aver configurato la radice del contesto, dabbiamo configurate Ia nostra applicazio- ine Web in mada che gestisca le rchieste. Questa corfigurazione viene fata nel descittare dellintallacone, che viene memorizzato in un file chismato web xm. Ik descritore dell'in- stallaione specitiea vari paramets di configurszione, come il nome usato per invocare il servlet (cia il suo ala), una descrizione del servlet, i nome completo della assed servlet, © un comrppondenza peril seer (cod, il percorso oi percorsi che fanno in modo che il ‘ontenirore di servet invochi il servlet). Dovete crear il fle web.xml per questo esempio. Molti strumenti per Vnstallazione di applicazoni Web ceano per vo i file web. xm I le ‘web. xm! peril primo esempio del capitolo viene mostrato nella figura 13.9. Fenderemo questo file mano a mano che aggiungeremo dei servlet all applcazione Web nel rerto del capitol, 4. <100cTYPE web-app PUBLIC 2 1 /Sun Wicresystens, Inc. /OTD Web Application 2.2//EN* 3 hietp://java. sun. com! j2ee/¢tds veb-app_2_2.6td"> 5 6 7 <1-- Descrizione generale della vostra applicazione Wed 8 ° sonpi dal capitolo sut servlet 10 del Libro Teonsche avanzate 11 2 12 14 (Questa & 1'applicazione Web in cui nostriano 8 A nostri esenpi su serviet e JSP. 36 w7 18 <1-= definizioni dei serviet 18 serviet> 20 ‘uelconet 2 Figura 13.9 Descrittore dellinstalazione (web.xm) per Tapplicazione Web jhtpS (continua) 652 Camrrovo 13 2 description 23 Un semplice servlet che gestisce uns richiesta HTTP get 24 ar Welconeserviet 22 <[sorviet-class> 29 0 31 3 /uelcomet 35 36 37 Figura 13.9 Descritore delinwalazione (web.eml) per Vapplicazione Web jhepS Letighe 1-3 speifican il ipod documento del desrittoredelnsllzione del appi- cazione Web cla posiione dl DTD per questo file XML. Lelemeaco web-app (cghe 5-37) defnisc a conigurazione di og seme nel spplicazione Web cla corsspondenss de servlet per ogni serdct. elemento display-nane tighe 8-11) specifica un nome che pub essere ‘isulizato al'amminstratre dl server su cu Fapplicazone Web & installa. elemento ‘escription (righe 13-16) specifica una descrzione dellapplicazione Web che pud essere visualizaa dall'smminisratore del ever elemento serviet (righe 19-25) descive un servlet, elemento serviet-nane (ciga 20) &il nome che scegliamo peril servlet (welcone'}), Lelemento description (ighe 22- 24) specifica una desrzione di questo particolareserdet. Dinuovo, questa pub essere vsualizta dallamministratore del server. Leleriento servlet class (righe 26-28) specifica il nome ‘completo della clase del servlet. Quindi, il servlet welcome! & definito dalla clase Welcomeserviet. Uclemento serviet-apping (ighe 32-35) specifica gli clementi serviet-nanee ur pattern, Ques ultimo suai ervera determinare quali ichieste vengono spedite al servlet (weiconet). La nostra applicazione Web sar’ instllata come parte della radice del contesto htps discusso nella sezione 13.3.2. Quindi, I'URL relativo che forniamo al browser per indicate il servle in questo esempio £ 1 shtp5/weLconet dove /3ntp5 specifica la radioe del concesto che aiuta il servera determinare quale spplicazio- ne Web gestsce a richiestae fwolcane1 specifica la pare di URL che viene crasformata nel servlerwelconet per gestie I richest, Notaeecheil server su cul il servlet rsiede non viene {ui specificato, sebbene sia possibile farlo come segue: hnttp: localhost :8e80/jht36/welconet Seil server espictoeil numero di por non sono specificati come parte del URL, il browser assume che i gstore del modulo (ie, il server specificato nella propriets action delele- ‘mento form) sta nello stesso server e numero di porta da cui il server ha scaticato la pagina Web contenente il modulo. server 653 Gi sono diversi formati che possono essere usati negli URL. Il formato /weleomet richiede una conispondenza esata. Pocete anche specificare delle corrgpondnze di percoro, dele cor rispondenze di excensione e un seroler di defulr per una applicazione Web. Una corrispon- denza di percosso comincia con un / efinisce con un (*. Pee esempio, FURL ‘FintpS/exemple/* indica che ogni percorso che inizia con !jhtp6/exanple/ vert spedito al server che cosr- sponde a questo URL. Una corrispondenza di estensiore inizia con * e termina con Vesten- sione del nome di un file. Per esempio, !URL “8p indica che ogni richista di un file con Festensione .jspverraspedita al servle che gestisce le. richiese di pagine JSP In ral, cut server con contenitori di JSP erasformano impli ‘mente ogni estensione *. jsp in un servet che gestsce Ie rchieste di pagine JSP. La porzione «di URL / rappresenta il servet di default per ur’appliczzione Web. Questo & simile al dacu- ‘mento di default di un server Web. Per esempio, se dgitate 'URL wav.deitel com nel vostro browser Web, il documento che ricevete dal server Web & il documento di defaule 4index.ntel. Se FURL fornito corrisponde al servet di default di urVapplicszione Web, ess0 viene inyocat ertorna una rispesta di defaulral dient. Questo pud essere utile per personalizare il contenuto Web in base a specific ween Finalmente, siamo pronti per mettre nos fle nelle directory appropriate per comple- tareTinsallasione del nostro primo serlet. Dobhiamo insrire ce file: WelconeServlet nt, Welconeserviet class e web.xml, Nella sotodirectry mebapps di jakarta-toncat 4.1.12, create la sottodirectory rtp la adice del con:eso per la nosta applicazione Webs In questa directory, create le sottodrectory Servlets e MEB-INF. Inseriamo jfile HTML di {questo capitolonela directory serviets. Copiatel fleWelconeServiet .ntml nella directory ‘servlets. Nella directory WEB- INF, creaela sottdizectory classes, poi copate fle web xn nella directory WEB-INF e il file We1coneServiet .class nella directory Classes. A questo punto, la strurtura dei file e delle directory allinterne della direcrory webapps dovrebbe ‘essere come in figura 13.10 (i nomi dei file sono in convo). Collzudo ¢ mesa a punta 13:3. Fate riparieitsercer Tomcat dope aver modifica i file del descritoedellimtllaio- ne web.xml, Tomcat ont viconoscer la vstaappliazione Web, Dopo che i file sono stati posi nelle directory appropriate, apriteil vostro browser e digtare il seguente URL: te partie il server Tomeat, http: //localhost:6060/ jntp5 MelconeServie: nea. per caricare WelcomeServiet htm nel browser Web. Po, cliccate il pulsante Get HTML Document per invocar il servlet. Doveeste vedere i isularo della figura 13.6, Potete provare questo servet da diversi browser per vetificare che i rswtati sano gl ste Errore tpico 13.2 Fd [Non mestere sree altri file clas nella rattue ei drectory appropracaimpedive al server di oalizzare in modo appropriato queteclasi. Quest provoca un erore di spate al en di tipo “Non rovaro (404) con Nesseape Navigator e “La pagina non pad e- sre trovata” oltre ad sana spegazione com Inerma Explorer 654 Canrroto 13 {a struttura del file © delle directory nellapplicazione Web WelcomeServlet nts: serviets Welconeserviet.néwl weo- TNF web. xa classes Weleoneserviet.class Figura 13.10 La-sruttura de flee delle directory per WelcomeServet, In realty il file HTML. della figura 13.6 non & necessaio per invocate il servlet. Una richiesea get pud essere inviarasemplicemente digiando TURL in un browser Web, esate ‘mente nella sesso modo incu rchiedete una pagina Web. In questo esempio, poretedigiare hnttp:/ localhost :880/htp5/we1conet rel campo ndiiaz0 o Pesiziona de! vostra browser per invocare diretamenteil servlet Cobleudo e mesa a punto 13.4 Potet verificare wn server che gennerihiete HTTP get digitande P'URL che invoca eroleediertamense nel campo itizz0 0 Pesizione del vastro browser 13.4 Gestire una richiesta http get contenente dati {Quando si ichiede un documenteo una rsorsa da un Web server, & possibile Fornire dei dati come parce della richicsta. Il servet WelconeServiet2 della figura 13.11 risponde ad una richiesta HTTP get che contiene un nome fornito dal utente. I serviet usa il nome come parce della risposa al client. 11 Fig. 13.11: WeLconeServiet2. java JI Gastire richseste HTTP che contengono dati 1 2 a 4 import javax.serviot.*5 5 import javax.serviet.nttp.*; 6 import java.io.*; 8 ° public class Welconeserviet2 extends Httpsorviet { 10 _// gostisce richieste “get dal client 11 protected void dodet( HttpServietRequest request, 2 HttpservletResponse response ) 13 throws ServietException, IOException iB x 15 String firstNane = requost.getParaneter( “firstname ); Figura 12:11 WelcomeServet2 raponde a richieste get contenent dati (continua) Isemmer 655 7 response.setContentType( ‘text/ntnl" ); 8 Printiiriter out » response.getinster(): 9 2 11 spedisce docunento XHTML al client 2 22 1) inizio documento XHTML 23 out.printin( ‘" 3 24 25 out.printin( "<1DOCTYPE heml PUBLIC \*-//k@G/ OTD * + 8 SHAT 1.8 strice//EN\" hee: /faw.wa.org* + 2 */T/antmLt JOT /aemL-strict.8ta\">* ); 2a 2 cout println{ ‘html sans = \"rttp://mm.xG.ong/1990/xheaL\">* )3 a0 at 11 sezione heed del documento 22 fut.printin( ** ); 23 out. printin( 34 ‘* 38 out.printIn( "" ); 36 a7 11 sezione body del docunento 38 out.printin( "" ); 39 out.printin{ "chioHello * + firstame + *
* )3 0 out printin( "Welcone to Servietst* }; a“ out.printin( "" }; 2 11 fine documento xin “a out. printin( *" ); “6 out.close();/ chiude flusso per conpletare 1a pagina “e wy igura 12.11 WelcomeServiet2 risponde a richleste get contenend dat (continu | parametti vengono passati come copie nomelralore nella rchiesta got. La riga 15 ‘mostra come ottenere informarioni che erano stare pasate al servi come pact della richic- sta del client. il metodo gotParaneter dell oggerto request iceve il nome del parametro ‘ome argomento ¢ rtomna il corispondente valore stinga, 0 null se il parametro non era parce della richiesta. La iga 39 sail csularo della riga 15 come parce della risposea al clint I documento We1coneServ1et2..rent (Fgura 13 12) fornisce un modulo in cu 'wen- te pud inserire un nome nelfelemento input chiamato firstnane (riga 17) e cliceate il pulsante Submit per invocare WelconeServiet2. Quando Puente preme il pulsante Submit, il valore degli elementi input viene posto in coppie nome/valore come parte dela richiesta al serve, Nella seconda schermata della figura 13.12, notte che il browser ha aggiunto *ferstnan ul alla fine della URL action. Il? separa la stringe quer (cio, i dati paseati come parte della richiesta get) dal resco del URL in una richiesta get. Le coppie nome/vaore sono passate com il nome ei valoreseparai da =. Set pit di una coppia nomelvalre, ogni coppia viene separata da &

You might also like