1.03k likes | 1.24k Views
Java Enterprise Edition. Gabriele Tolomei DAIS – Università Ca ’ Foscari Venezia. Programma del Corso. 09/01 – Introduzione 10/01 – Java Servlets 16-17 /01 – JavaServer Pages (JSP) 23-24/01 – Lab: Applicazione “ AffableBean ” 30-31/01 – Enterprise JavaBeans (EJB) + Lab.
E N D
Java Enterprise Edition Gabriele Tolomei DAIS – UniversitàCa’ FoscariVenezia
Programma del Corso • 09/01 –Introduzione • 10/01 – Java Servlets • 16-17/01 – JavaServer Pages (JSP) • 23-24/01 – Lab: Applicazione “AffableBean” • 30-31/01 – Enterprise JavaBeans (EJB) + Lab
Modulo 2: Java Servlets • Tecnologie web server-side • Applicazioni client/server su Web (HTTP) • Java Servlets • Ruoloall’internodellapiattaforma Java EE • Esercitazione • Creazione di un progetto web dinamicosu Eclipse
Il Web • Il Web nasce per consentire la condivisione di risorsedistribuitesu hosts collegatitralorotramite Internet • Definisce 2 ruoli: • Client eseguerichieste di accessoallerisorse • Server memorizza le risorseed evade le richieste verso i clients
Struttura del Web • Si basasulnoto stack di protocolli di rete TCP/IP e su di essodefinisce 3 concettifondamentali: • un sistema per l’identificazioneunivoca di risorsedistribuite(URL) • un protocollo di richiesta/rispostatramite cui le risorsevengonotrasferitetrail client edil server (HTTP) • un linguaggio(HTML) per la rappresentazione di particolaririsorse: pagine Web connessetraloro da hyperlinks (grafo del Web)
URL: Uniform Resource Locator • Ogni URL ècomposto da: • protocollo (ad es.: HTTP, FTP, telnet, etc.) • user/password (opzionali per accedere al server) • indirizzo del server Websottoforma di • IP (ad es.: 157.138.7.88) • Nome (ad es.: www.unive.it) • porta del servizio TCP a cui connettersi (opzionale) • i server Web accettanorichieste di connessionesullaporta 80 (default) • path dellarisorsarichiesta (ad es.: /index.html) • eventualiparametridellarichiesta (opzionali) • utilinelleapplicazioni Web per lo scambio di datitrail browser edil server (ad es., form HTML)
HTTP: HyperText Transfer Protocol • Stabilisce le “regole” con cui client e server comunicano • Definisce un formato “standard” (IETF RFC 2616) deimessaggi di richiesta/risposta • Client: apreconnessione con il server Web specificatonell’URLedinvia ad essounarichiesta HTTP • Server: evade la richiestaedinvia la risposta HTTP sullaconnessioneaperta dal Cliente e la chiude
HTTP: Richiesta Client HTTP Request Request method Request headers Empty line Request body (optional)
HTTP: Metodi di Richiesta • HTTP definisceiseguentimetodi di richiesta: • GET, POST, PUT, DELETE, HEAD • GET e POST sono le piùutilizzate • Eventualiparametridellarichiestapossonoesserespecificati: • nella query string (URL) se siusailmetodo GET http://example.com/sayHello?param1=val1¶m2=val2 • nelcorpodellarichiesta se siusailmetodo POST in combinazione con form HTML
HTTP GET (senzaparametri) http://www.example.com/index.html GET /index.html HTTP/1.1 Host: www.example.com Empty line
HTTP GET (con parametri) http://www.example.com/sayHello?param1=val1¶m2=val2 GET /sayHello?param1=val1¶m2=val2 HTTP/1.1 Host: www.example.com Empty line
HTTP POST http://www.example.com/sayHello POST /sayHello HTTP/1.1 Host: www.example.com Content-Type: application/x-www-form-urlencoded param1=val1¶m2=val2 Empty line
HTTP: URL-Encoding • I parametriinviatitramite form HTML nelcorpodellarichiesta HTTP POST devonoessereopportunamentecodificati • Lista di coppie (chiave, valore) • Esempio: name: Jonathan Doe, age: 23, func: a + b == 10%! sonocodificati come name=Jonathan+Doe&age=23&func=a+%2B+b+%3D%3D+10%25%21
HTTP: Risposta Server HTTP Response Response status code Response headers Empty line Response body (optional)
HTTP: Codici di Risposta • 2xx = Successo • 200 OK la richiesta ha avutosuccesso • GET: l’entitàcorrispondenteallarichiestavieneinviatanellarisposta • POST: l’entitàcorrispondente al risultatodell’azionerichiestavieneinviatanellarisposta • 3xx = Redirezione • 4xx = Errore Client • 401 Bad Request, 404 Not Found, etc. • 5xx = Errore Server • 500 Internal Server Error, 503 Service Unavailable, etc.
HTTP 200 OK HTTP Response HTTP/1.1 200 OK Date:… Server: Apache… Content-Type: text/html; charset=UTF-8 Empty line <html> <head> <title>…</title> </head> <body>…</body> </html>
HTML: HyperText Markup Language • Linguaggio di markup (tag) con cui vengonoscrittiidocumenti Web • Vieneinterpretato e renderizzatodai browsers • Definiscealcuni tag standard • <html> inizio del file HTML • <body> inizio del contenuto da renderizzare • <a href=“URL”> hyperlink ad un’altrarisorsa • <form action=“URL”> form inviodati al server
HTML: Form • Sonoutilizzati per inviareidati dal client (utentetramite browser) al server Web • All’internocontiene tag specificichedefinisconoiparametri da inviare • <input name=nome type=tipo value=valore> • type puòavereiseguentivalori: • text campo di testo di 1 riga • password campo password • hidden campo nascosto • … • submit pulsante di invio del form
Java EE: Architettura Multi-tier Java EE Application Server Web Client Legacy Tier Web Tier Connector/Messaging Tier B2B Client Data Tier Business Tier Data Access Tier Client Tier Middle Tier Data Tier
Contenuti web dinamici • Necessari per andareoltre le “solite” pagine web HTML statiche • Unapagina web dinamicavariailpropriocontenutoa secondadeiparametriforniti dal client al momentodellarichiesta • Il sorgente HTML dellapaginavienegenerato dal server web in mododinamico prima di essererestituito al browser e renderizzato • Client-vs. Server-side scripting
Client-side scripting • La dinamicitàriguarda la singolapaginaweb • Cambiamentiin risposta ad azionispecifiche (mouse, tastiera, etc.) • Il contenutodinamicoègenerato da codice in esecuzionesulclient • Principalelinguaggio di scripting client-side: JavaScript
Server-side scripting • La dinamicitàriguardapiù di unasingolapagina web • Il contenutodinamicoègenerato da codice in esecuzionelato (web) server • Gestiscesessioniutente e controllailflussodell’applicazione • HTML form, parametrinella URL di richiesta, tipo di browser usato, ecc. • Principalilinguaggi server-side: Perl, PHP, Java, ASP • Estensioni server-side: CGI, JSP, ASP.NET
CGI: Common Gateway Interface • Interfacciatrail server web e iprogrammi (script CGI) usati per generareicontenutidinamici • Ognirichiesta al server provocal’esecuzione del corrispondente script CGI sottoforma di un nuovoprocesso • Vantaggi: • semplice, diffuso, indipendentedal linguaggio (Perl e Python piùutilizzati) • Svantaggi: • altamenteinefficiente
ColdFusion • ColdFusion Markup Language (CFML) • Sviluppato e controllato da Macromedia • Potente e di facile utilizzo • Ancorapiuttostodiffuso
PHP • PHP Hypertext Preprocessor • Spessoutilizzatoall’interno di server web Apache • Ideale per lo sviluppo di piccoleapplicazioni web • facile e potente • Molto popolarenellacomunità open source • LAMP (Linux Apache MySQL PHP)
ASP: Active Server Pages • Sviluppato e controllato da Microsoft • Estensione per server web Microsoft IIS • Linguaggisupportati per la creazione di contenutidinamici: • VBScript • JavaScript • VisualBasic • C# (ASP.NET)
Java Servlet/Java Server Pages (JSP) • Sviluppato da Java Community Process • Parte dello standard Java EE • OO, platform-independent, efficiente, scalabile,… • Consente la separazionetraillivello di presentazione (interfaccia) e la logicaapplicativa
CGI vs. Servlet/JSP • CGI • 1 richiesta client 1 processo server • Servlet/JSP • 1 richiesta client 1 thread all’internodellostessoprocesso server JVM • Ottimizzazionedellerisorse • Processo vs. Thread
Java Servlet: Vantaggi • Condividonotuttiivantaggi del swscritto in Java: • Portabilità, OO, riuso, supporto di libreriegiàesistenti, efficienza, sicurezza, etc. • Si basanosuuna ben consolidata API specifica per ilprotocollo HTTP: • processing dellerichieste • generazionedellerisposte • gestionedellesessioni e dei cookies
Servlet e Applicazioni Web (2) • Sia le Servlets che le JSPs sonoeseguiteall’interno di archivi Web (WAR) • I WAR a lorovoltasono in esecuizionesu un Servlet Container (parte dellespecifiche Java EE server) • Nelcaso di JBoss, il Servlet Container coincide con ilservizio Apache Tomcat
Servlet e Applicazioni Web (3) • Le applicazioni web sono isolate l’unadall’altraall’internodellostesso Servlet Container • Il Servlet Container forniscetuttiqueiservizi di “basso livello” necessari per ilciclo di vita di Servlets e JSPs: • gestionedelleconnessioni HTTP, sessioni, threading, sicurezza, gestionedellerisorse, monitoring, deployment, etc.
Ma checos’èuna Java Servlet? • Èunanormaleclasse Java checonsentel’interazionerichiesta/risposta con un’applicazione secondo ilmodello client/server • Le Servlets sonoprogettate per gestirequalunquetipo di protocollorichiesta/risposta • Tipicamentevengonousate per l’implementazione di applicazionicheinteragiscono secondo ilprotocollo HTTP (richiesta/risposta via Web)
Java Servlet: Packages • Èdefinitaall’interno del package standard javax.servlet • Ogni Servlet deveimplementarel’interfacciajavax.servlet.Servlet • specificaimetodirelativi al ciclo di vita • Le Servlets chegestisconoprotocolli di richiesta/rispostagenericidevonoestenderejavax.servlet.GenericServlet • Le Servlet specifiche per la gestione del protocollo HTTP devonoestenderejavax.servlet.http.HttpServlet
Java Servlet: Ciclo di Vita • A fronte di unarichiesta da parte del client il container: • Verificache la Servlet siagiàstatacaricata • Se non lo è, provvede a caricare la classecorrispondente e ne genera un’istanza • Inizializzal’istanzaappenacreatainvocandosu di essailmetodoinit • Invocailmetodoservicecorrispondenteall’istanzadella Servlet passando come argomentiglioggetticherappresentano la richiesta e la risposta • La rimozionedella Servlet dal container siottienetramiteunachiamata al metododestroy
JVM Servlet Container Servlet S Initialize init() Loading/Instantiation Class.forName().newInstance() 1 request = 1 thread Servicing service() YES isLoaded S NO Unload/Garbage Collector finalize() Destroy destroy() Incoming client requests for the Servlet S
Java Servlet: Ciclo di Vita (2) • I metodiinit e destroyvengonochiamati solo unavolta, rispettivamenteallacreazione e rimozionedella Servlet • Il metodoservicevienechiamatounavolta per ciascunarichiesta (spesso in modoconcorrente da più threads) • Nelcaso di HttpServlet al posto del metodo service (che pure èpresente) vengonoinvocatimetodipiùspecificichecorrispondono al protocollo HTTP: • HTTP GET doGet • HTTP POST doPost
Java Servlet: Inizializzazione • Per customizzarel’inizializzazioneuna Servlet puòimplementareo fare overriding del metodoinit • Il metodoinitprende come argomentoun’istanza di javax.servlet.ServletConfig • contieneiparametri di inizializzazione • utilizzail file descrittore in WEB-INF/web.xml • AncheGenericServletimplemental’interfacciaServletConfig • metodoinit con nessunargomento
Richiesta/Risposta: service • La gestionedellarichiesta/rispostaèaffidata al metodo service che ha iseguentiargomenti: • ServletRequest: richiesta del cliente (lettura) • ServletResponse: risposta al cliente (scrittura) • Nelcasospecifico di HttpServletilmetodo service è un “dispatcher” verso altrimetodispecifici del protocollo HTTP (doGet, doPost, …) • HttpServletRequest: HTTP request • HttpServletResponse: HTTP response
Lettura:(Http)ServletRequest • La richiesta del client consente di accederealleseguentiinformazioni: • Client: IP/hostname, porta • Browser: locale, headers, security • Request: headers, cookies, path, parameters, content-type, -length, -encoding, -body • User: authorization/authentication (role) • Session: attributidellasessione • Request shared storage: attributidellarichiesta
Scrittura:(Http)ServletResponse • La risposta al client consente di accederealleseguentiinformazioni: • Codici di stato • Headers • Cookies • Contenuto: length, type, body • URL Encoding: session tracking • Èimportantespecificareilcodice di stato (default HTTP 200 OK) e gli headers dellarisposta HTTP prima chequestasiainviata al client
Java Servlet: Distruzione • Il metododestroyvieneinvocatoognivoltache la Servlet deveesseredeallocata • ad es.: stop del server, reloading dell’applicazione • Possibilechiamata del metodoservicesuuna Servlet su cui èstatoinvocatoilmetododestroy in ambiente multi-threading • Thread-safe • Tutte le risorse allocate al momentodellainitsonorilasciate • Il metododestroyvienechiamatouna sola voltaduranteilciclo di vita della Servlet
Java Servlet: Deployment • Prima di poteressereusatauna Servlet deveessere: • Compilatatramite le classifornitedalla Servlet API • Java EE SDK • Servlet container: ${jboss.common.lib.url}/servlet-api.jar • specificataneldescrittoredell’applicazione web (WEB-INF/web.xml) • impacchettata in un archivio WAR • distribuitasu un Servlet container (Java EE AS) • accedutatramite URL(s)