Tecnologie di Sviluppo per il Web Applicazioni Web J2EE: Struttura dell Applicazione versione 2.4 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina) G. Mecca mecca@unibas.it Università della Basilicata Applicazioni Web J2EE: Struttura >> Sommario Sommario Applicazione Web J2EE Struttura dell Applicazione Organizzazione delle Cartelle Descrittore dell Applicazione URI delle Risorse Amministrazione Installazione ( Deployment ) Il manager di Tomcat 2
Applicazioni Web J2EE: Struttura >> Applicazione J2EE Applicazione Web J2EE Applicazione Web J2EE collezione di servlet e Java Server Pages componenti Java (beans, jar) pagine HTML, CSS, immagini, altri file Richiede un server applicativo conforme contenitore delle applicazioni es: Jakarta Tomcat (implementazione di riferimento di servlet e JSP) 3 Applicazioni Web J2EE: Struttura >> Applicazione J2EE Applicazione Web J2EE Idea le richieste HTTP vengono gestite da opportune classi Java dette servlet le pagine JSP vengono trasformate dal contenitore in servlet opportuni i servlet vengono compilati ed istanziati dal contenitore ogni volta che arriva una richiesta destinata ad una pagina JSP, viene servita dal servlet 4
Applicazioni Web J2EE: Struttura >> Applicazione J2EE Servlet Classe Java Orientata alla comunicazione client-server riceve messaggi di richiesta produce messaggi di risposta Viene eseguita dal contenitore opportuno ciclo di vita basata su API opportune (javax.servlet.*) Standard arrivato alla versione 2.4 5 Applicazioni Web J2EE: Struttura >> Applicazione J2EE Servlet Due categorie servlet generici (estendono javax.servlet.genericservlet) orientati alla gestione di messaggi generici servlet HTTP (estendono javax.servlet.http.httpservlet) orientati alla gestione di messaggi http In questo corso considereremo solo servlet HTTP 6
Applicazioni Web J2EE: Struttura >> Applicazione J2EE Un Esempio istruzioni Java (scriptlet) <!-- Data.jsp --> oggetti predefiniti <html> <body> <% String nome=(string)request.getparameter( nome ); session.setattribute( nome, nome); %> <p>benvenuto, <%= nome %>. La data di oggi e : <%= new java.util.date() %> </p> </body> </html> espressioni Java questa pagina JSP viene automaticamente trasformata in un servlet 7 Applicazioni Web J2EE: Struttura >> Applicazione J2EE Il Servlet Corrispondente import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class Data_jsp extends HttpServlet { public void doget (HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String nome = (String)request.getParameter( nome ); HttpSession session = request.getsession(true); session.setattribute( nome, nome); response.setcontenttype("text/html"); PrintWriter out = response.getwriter(); out.println("<html>\n<body>"); out.println( <p>benvenuto, + nome); out.println( La data di oggi e : ); out.println( <b> + new java.util.date()+ </b></p> ); out.println("</body>\n</html>"); } } 8
Applicazioni Web J2EE: Struttura >> Applicazione J2EE Servlet Due metodi principali doget(): operazioni per rispondere a richieste di tipo GET dopost(): operazioni per rispondere a richieste di tipo POST Parametri richiesta: HttpServletRequest request risposta: HttpServletResponse response 9 Applicazioni Web J2EE: Struttura >> Applicazione J2EE Servlet Ciclo di vita dei servlet sono classi gestite dal contenitore il contenitore crea le istanze e le rimuove Tre fasi principali del ciclo di vita inizializzazione servizio distruzione 10
Applicazioni Web J2EE: Struttura >> Applicazione J2EE Servlet Inizializzazione alla prima richiesta (o all avvio) il contenitore istanzia uno o più oggetti della classe servlet Servizio le istanze vengono utilizzate per servire molte richieste ogni richiesta all URI corrispondente genera un thread che chiama doget o dopost Distruzione quando è necessario (es: shutdown, reload), l oggetto viene rimosso 11 Applicazioni Web J2EE: Struttura >> Applicazione J2EE Servlet Vantaggi rispetto alle CGI efficienza (attivazione di thread leggeri rispetto all attivazione di thread pesanti) flessibilità (tutti i servlet girano nella stessa macchina virtuale e possono cond. dati) Altri vantaggi potenza del linguaggio portabilità relativa economicità dei contenitori 12
Applicazioni Web J2EE: Struttura >> Applicazione J2EE Rapporto tra Servlet e JSP Di conseguenza i componenti di interfaccia e controllo sono in realtà servlet le pagine JSP sono un modo più rapido per scrivere questi servlet Nel seguito servlet: modello per descrivere la semantica JSP: implementazione pratica 13 Applicazioni Web J2EE: Struttura >> Applicazione J2EE Rapporto tra Servlet e JSP Vantaggi delle pagine JSP la scrittura del codice HTML è decisamente semplificata (non servono println()) non è necessario compilare il codice: la traduzione in servlet e la compilazione viene effettuata dal compilatore il contenitore, tra l altro, si accorge anche delle modifiche effettuate e ripete il processo tutte le volte che è necessario 14
Applicazioni Web J2EE: Struttura >> Applicazione J2EE Rapporto tra Servlet e JSP Esempio nell applicazione indovinam1jsp, per ogni pagina JSP il contenitore genera un servlet corrispondente nella cartella /tomcat4/work >> servlet generati >> esempio di modifica modificando una pagina jsp, il servlet corrispondente viene rigenerato, ricompilato, istanziato e utilizzato per gestire le richieste 15 Applicazioni Web J2EE: Struttura >> Applicazione J2EE Rapporto tra Servlet e JSP >> indovinam1servlet >> esempio di modifica In effetti le due tecnologie sono completamente equivalenti dal punto di vista delle funzionalità tutto quello che è possibile fare in una pagina JSP è fattibile anche scrivendo direttamente un servlet e viceversa Esempio è possibile scrivere la stessa applicazione utilizzando esclusivamente servlet scritti direttamente dal programmatore ma la scrittura è decisamente più faticosa 16
Applicazioni Web J2EE: Struttura >> Applicazione J2EE Rapporto tra Servlet e JSP Quindi, nel seguito studieremo i servlet per comprendere la struttura delle pagine JSP svilupperemo applicazioni solo con JSP In realtà ci sono precise differenze dal punto di vista metodologico le approfondiremo in seguito 17 Applicazioni Web J2EE: Struttura >> Struttura di un'applicazione Web J2EE Struttura di un Applicazione J2EE Ogni applicazione J2EE è una cartella montata sul file system del contenitore Radice del file system: webapps variabile da contenitore a contenitore tutte le applicazioni Web nella radice sono visibili è possibile definire alias ( contesti ) ogni applicazione ha un nome corrispondente al nome della cartella 18
Applicazioni Web J2EE: Struttura >> Struttura di un'applicazione Web J2EE Struttura di un Applicazione J2EE Esempio: Tomcat radice delle applicazioni predefinita su Linux: /var/tomcat4/webapps è possibile spostarla (es: /usr/webapps) Applicazioni Web predefinite ROOT (pagina di benvenuto) examples (esempi) tomcat-docs (documentazione) manager (amministrazione) 19 Applicazioni Web J2EE: Struttura >> Struttura di un'applicazione Web J2EE Organizzazione Standard dei File Struttura dell applicazione fissata dallo standard è necessario che tutte le applicazioni seguano la struttura standard garantisce la portabilità tra contenitori se un applicazione nella cartella webapps non rispetta la struttura il server non la rende visibile 20
Applicazioni Web J2EE: Struttura >> Struttura di un'applicazione Web J2EE Organizzazione Standard dei File radice dell applicazione; es: indovinam1jsp pagine JSP (event. in sottocartelle) es: tentativo.jsp pagine HTML, fogli di stile, immagini, altre cartelle cartella WEB-INF eventuale descrittore dell applicazione web.xml cartella classes servlet (eventualmente in package) bean (eventualmente in package) cartella lib file jar >> 21 Applicazioni Web J2EE: Struttura >> Struttura di un'applicazione Web J2EE Organizzazione Standard dei File Struttura fondamentale della cartella radice /: pagine JSP, pagine HTML, fogli di stile CSS, immagini (tipicamente organizzati in sottocartelle) cartella /WEB-INF: eventuale deployment descriptor web.xml cartella /WEB-INF/classes: servlet e componenti (tipicamente organizzati in package) 22
Applicazioni Web J2EE: Struttura >> Struttura di un'applicazione Web J2EE Organizzazione Standard dei File Altri elementi cartella /WEB-INF/lib: contiene tutti i jar che è necessario rendere visibili ai servlet e alle pagine JSP (es: driver JDBC) Il CLASSPATH per l applicazione Web tutti i package in /WEB-INF/classes tutti i jar in /WEB-INF/lib ATTENZIONE: altre classi non sono visibili 23 Applicazioni Web J2EE: Struttura >> Descrittore dell Applicazione Descrittore dell Applicazione Descrittore dell applicazione web.xml deployment descriptor serve a specificare parametri specifici per l applicazione es: nomi per i servlet; pattern degli URI a cui rispondono; file indice standard (es: index.jsp); timeout per le sessioni ecc. è indispensabile, ma può essere vuoto (il contenitore assegna valori standard) 24
Applicazioni Web J2EE: Struttura >> Descrittore dell Applicazione Descrittore dell Applicazione Un descrittore minimale <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> </web-app> 25 Applicazioni Web J2EE: Struttura >> Descrittore dell'applicazione Descrittore dell Applicazione Elementi principali: servlet: assegna un alias e dei parametri di inizializzazione ad un servlet servlet-mapping: assegna uno o più URI ad un servlet session-config: definisce parametri delle sessioni error-page: URI della pagina da visualizzare in caso di errori nell applicazione 26
Applicazioni Web J2EE: Struttura >> Descrittore dell'applicazione Descrittore dell Applicazione Elemento servlet consente di assegnare un nome ad un servlet è possibile fare riferimento al servlet (negli URI e in web.xml) con il nuovo nome Sottoelementi servlet-name servlet-class jsp-file (nel caso il servlet venga da jsp) 27 Applicazioni Web J2EE: Struttura >> Descrittore dell'applicazione Descrittore dell Applicazione Sintassi per i servlet: <servlet> <servlet-name>esci</servlet-name> <servlet-class>indovina.servletesci</servlet-class> </servlet> Sintassi per le pagine jsp <servlet> <servlet-name>indovinato</servlet-name> <jsp-file>/indovinato.jsp</jsp-file> </servlet> 28
Applicazioni Web J2EE: Struttura >> Descrittore dell'applicazione Descrittore dell Applicazione Elemento servlet-mapping deve comparire dopo tutti gli elementi servlet associa uno o più URI alternativi a quello standard ad un servlet per fare riferimento al servlet (o alla pagina Jsp) si utilizza il nome (servlet-name) assegnato con l elemento servlet 29 Applicazioni Web J2EE: Struttura >> Descrittore dell'applicazione Descrittore dell Applicazione Sintassi: <servlet-mapping> <servlet-name>esci</servlet-name> <url-pattern>/esci</url-pattern> </servlet-mapping> Per le pagine Jsp (necessario): <servlet-mapping> <servlet-name>indovinato</servlet-name> <url-pattern>/indovinato.jsp</url-pattern> </servlet-mapping> 30
Applicazioni Web J2EE: Struttura >> Descrittore dell'applicazione Descrittore dell Applicazione E possibile specificare classi di URI collezioni di URI che unificano con il pattern carattere speciale *: qualsiasi stringa Esempio: URI che terminano con.asp <servlet-mapping> <servlet-name>errore</servlet-name> <url-pattern>*.asp</url-pattern> </servlet-mapping> pattern; attenzione: non comincia per / 31 Applicazioni Web J2EE: Struttura >> Descrittore dell'applicazione Descrittore dell Applicazione Elemento session-config definisce il tempo massimo di inattività di una sessione (in minuti); per Tomcat standard 30 Sottoelemento session-timeout Esempio <session-config> <session-timeout>15</session-timeout> </session-config> 32
Applicazioni Web J2EE: Struttura >> Descrittore dell'applicazione Descrittore dell Applicazione Elemento error-page serve a specificare l URI di una pagina da visualizzare in caso errori, ovvero: risposte HTTP di errore (codici 4xx e 5xx) eccezioni nel codice Java Sottoelementi error-code exception-type location 33 Applicazioni Web J2EE: Struttura >> Descrittore dell'applicazione Descrittore dell Applicazione Esempio di codice di errore: <error-page> <error-code>404</error-code> <location>/errore.html</location> </error-page> Esempio di eccezione: <error-page> <exception-type> javax.servlet.servletexception </exception-type> <location>/errore.html</location> </error-page> >> 34
Applicazioni Web J2EE: Struttura >> Descrittore dell'applicazione Descrittore dell Applicazione Ordine degli elementi in web.xml description: serve a dare una breve descrizione dell applicazione Web context-param: serve a definire parametri di inizializzazione validi per tutti i servlet/jsp filter >> filter-mapping >> servlet servlet-mapping 35 Applicazioni Web J2EE: Struttura >> Descrittore dell'applicazione Descrittore dell Applicazione Ordine degli elementi in web.xml (cont.) session-config mime-mapping: definisce il tipo MIME per estensioni di file inusuali welcome-file-list: definisce i file standard da servire in caso di URI che fanno riferimento a cartelle (es: index.jsp, index.html) error-page 36
Applicazioni Web J2EE: Struttura >> Descrittore dell'applicazione Descrittore dell Applicazione Ordine degli elementi in web.xml (cont.) taglib >> security-constraint: vincola l accesso ad opportuni URI dell applicazione login-config: configura il tipo di autenticazione da usare per le risorse protette (es: basic o digest) 37 Applicazioni Web J2EE: Struttura >> Struttura di un'applicazione Web J2EE URI delle Risorse Ogni risorsa dell applicazione ha un URI http://<host>:<porta>/<percorso risorsa> <porta>: normalmente diversa da 80 Tomcat: 8080 Esempio: http://127.0.0.1:8080/ (pagina di benvenuto) http://127.0.0.1:8080/manager/html/list (applicazione manager di Tomcat) 38
Applicazioni Web J2EE: Struttura >> Struttura di un'applicazione Web J2EE URI delle Risorse Pagine JSP percorso a partire da webapps /<nomeappl>/<percorso>/<nomefile> es: /indovinam1jsp/fine.jsp es: /studenti/inserimenti/inserisciesame.jsp Pagine HTML e connessi stessa convenzione delle pagine JSP 39 Applicazioni Web J2EE: Struttura >> Struttura di un'applicazione Web J2EE URI delle Risorse Servlet non ha un URI definito risponde a tutte le richieste corrispondenti a URL pattern definiti per quel servlet in Web xml Esempio se l URL pattern /Fine è associato a Fine /indovinam1servlet/fine 40
Applicazioni Web J2EE : Struttura >> Amministrazione del Contenitore Amministrazione del Contenitore Il contenitore è uno strumento essenziale per lo sviluppo dell applicazione Web Operazioni fondamentali sul contenitore installazione configurazione ciascun contenitore ha le sue regole e le sue procedure faremo riferimento a Tomcat 41 Applicazioni Web J2EE : Struttura >> Amministratore del Contenitore Amministrazione del Contenitore Installazione di Tomcat >> tomcat >> tomcat-users.xml eseguire l installabile prelevato dal sito jakarta.apache.org installa un servizio che ascolta sulla porta 8080 Post-configurazione definizione dell utente manager cambiare il valore del file %TOMCAT_HOME%\conf\tomcat-users.xml definendo un nuovo utente con ruolo manager 42
Applicazioni Web J2EE: Struttura >> Amministrazione del Contenitore Amministrazione del Contenitore Attenzione a causa della complessità dell architettura applicativa, le applicazioni Web richiedono varie attività di carattere amministrativo In particolare installazione nel contenitore ( deployment ) disinstallazione modifica e caricamento 43 Applicazioni Web J2EE: Struttura >> Amministrazione del Contenitore Installazione ( Deployment ) Per essere accessibile: l applicazione deve essere visibile al contenitore (collocata nella cartella webapps oppure associata ad un alias) inoltre l applicazione deve essere installata nel contenitore ( deployed ) Differenza con il server HTTP ordinario non basta la visibilità sul file system operazione aggiuntiva di installazione 44
Applicazioni Web J2EE: Struttura >> Amministrazione del Contenitore Installazione ( Deployment ) Installazione le attività cambiano da server a server normalmente vengono inizializzati i servlet dell applicazione compilate le pagine JSP caricati i componenti (Bean) tipicamente all avvio vengono installate tutte le applicazioni nella radice (webapps) e tutte quelle corrispondenti agli alias noti 45 Applicazioni Web J2EE: Struttura >> Amministrazione del Contenitore Installazione ( Deployment ) Successivamente, il server deve consentire di installare altre applicazioni di disinstallare altre applicazioni di ricaricare applicazioni i cui componenti sono cambiati Ogni server ha la sua modalità 46
Applicazioni Web J2EE: Struttura >> Amministrazione del Contenitore Installazione ( Deployment ) Esempio: Tomcat due modi per installare o ricaricare un applicazione Web Modo n.1 riavviare il contenitore (riavviare Tomcat) interrompe il funzionamento di tutte le altre applicazioni Web è necessario avere i privilegi di amministratore 47 Applicazioni Web J2EE: Struttura >> Amministrazione del Contenitore Installazione ( Deployment ) Modo n.2 applicazione Web /manager un applicazione Web per amministrare il contenitore vantaggio: non richiede di riavviare il contenitore la sintassi dei comandi è descritta nella documentazione di Tomcat (>>) 48
Applicazioni Web J2EE: Struttura >> Amministrazione del Contenitore Installazione ( Deployment ) File war dell applicazione le applicazioni Web sono spesso distribuite sotto forma di file war file compressi con estensione.war sono file jar che rispettano l organizzazione delle cartelle dell applicazione Web si creano e si gestiscono con jar i contenitori sono in grado di decompattare ed installare automaticamente i file war 49 Applicazioni Web J2EE: Struttura >> Amministrazione del Contenitore Il Manager di Tomcat Applicazione Web fornita con Tomcat consente di effettuare le principali operazioni sulle applicazioni Web installazione, rimozione, ri-caricamento Per utilizzare il manager è necessario autenticarsi con nome utente e password come un utente di ruolo manager 50
Applicazioni Web J2EE: Struttura >> Amministrazione del Contenitore Il Manager di Tomcat Utilizzo dell applicazione attraverso il browser i comandi vengono eseguiti richiedendo l accesso ai servlet dell applicazione Due modalità principali di funzionamento utilizzo dell interfaccia HTML utilizzo diretto dei comandi attraverso URI nella barra degli indirizzi 51 Applicazioni Web J2EE: Struttura >> Amministrazione del Contenitore Il Manager di Tomcat Utilizzo dell interfaccia HTML per installare un applicazione basta fornire l URI della cartella relativa es: file:///e:/codice/build/indovinam1jsp Utilizzo diretto dei comand ciascun comando può essere impartito attraverso una richiesta HTTP ad un URI opportuno fornendo i parametri nella query string 52
Applicazioni Web J2EE: Struttura >> Amministrazione del Contenitore Il Manager di Tomcat Forma generale degli URI (comandi) http://localhost:8080/manager/<comando>?<query> elenco nella docum. di Tomcat (accessibile a partire dall URI http://localhost:8080) Nel seguito: alcuni comandi utili Comando list elenca le applicazioni installate, lo stato delle applicazioni, e per ciascuna le sessioni attive http://localhost:8080/manager/list 53 Applicazioni Web J2EE: Struttura >> Amministrazione del Contenitore Il Manager di Tomcat Comando install installa una nuova applicazione Web nella query string è necessario specificare l alias (il path su cui montare l applicazione) e il percorso per raggiungere la radice Esempio: http://localhost:8080/manager/ install?path=/prova&war=file:/usr/webapps/prova supponiamo che l applicazione prova sia nella cartella prova di webapps 54
Applicazioni Web J2EE: Struttura >> Amministrazione del Contenitore Il Manager di Tomcat Comando reload ricarica i servlet e i componenti di un applicazione Web già installata nella query string è necessario specificare il path su cui l applicazione è montata Esempio: http://localhost:8080/manager/reload?path=/prova 55 Applicazioni Web J2EE: Struttura >> Amministrazione del Contenitore Il Manager di Tomcat Comando remove disinstalla un applicazione Web nella query string è necessario specificare il path su cui l applicazione è montata Esempio: http://localhost:8080/manager/remove?path=/prova 56
Applicazioni Web J2EE: Struttura >> Sommario Riassumendo Applicazione Web J2EE Struttura dell Applicazione Organizzazione delle Cartelle Descrittore dell Applicazione URI delle Risorse Amministrazione Installazione ( Deployment ) Il manager di Tomcat 57 Termini della Licenza Termini della Licenza This work is licensed under the Creative Commons Attribution- ShareAlike License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/1.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. Questo lavoro viene concesso in uso secondo i termini della licenza Attribution-ShareAlike di Creative Commons. Per ottenere una copia della licenza, è possibile visitare http://creativecommons.org/licenses/by-sa/1.0/ oppure inviare una lettera all indirizzo Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. 58