Antonio d Acierno 13/01/2006 Servlet Introduzione alle Servlet Corso di Sistemi Web e Basi Dati Prof. Antonio d Acierno Alternativa Java ai CGI-BIN Classi java che estendono le funzionalità di un server Web generando dinamicamente le pagine Web. Riferimento: http://java.sun.com/products/servlets http://www.coreservlets.com 1 Vantaggi di una servlet 2 Servlet Engine Efficienti Con l approccio CGI-BIN un nuovo programma è avviato per ogni richiesta. Con le servlets ogni nuova richiesta è gestita tramite threads. Convenienti Esiste un significativa infrastruttura per leggere e decodificare forms, mantenere i dati di una sessione, gestire cookies, gestrire headers HTTP, interagire con DB, etc. Possibilità di riutilizzare opportunamente l enorme quantità di utilities JAVA presenti nel mondo freeware/opensource Portabili Sono scritte in Java rispettando uno standard ben preciso. Sicure Non sono eseguibili a se stanti, per cui non sono utilizzabili per attaccare un server. Economiche Tutta l infrastruttura necessaria esiste (anche) nel mondo open source. 3 Le servlet operano in una macchina virtuale dell ambiente controllato dal server e comunicano con i client utilizzando semplicemente i comandi HTTP. Servlet Engine: gestisce il caricamento e lo scaricamento delle servlet e collabora con il server Web per dirigere le richieste alle servlet e per rinviare il loro output ai client Web. 4 1 Antonio d Acierno 13/01/2006 Architettura di riferimento Servlet Engine: Tomcat Tomcat http://tomcat.apache.org/ Realizza sia l'engine per Servlet e JSP, sia l engine per HTTP. Può essere utilizzato come server web completo di tecnologia servlet/jsp. La versione corrente di Tomcat è la 5.X Tomcat è scritto in Java, per cui richiede un Java Runtime Environment (JRE) per poter funzionare (almeno la versione 1.5.0 per Tomcat 5.0). 5 Tomcat Monitor 6 Tomcat funziona! http://localhost:8080/ 7 8 2 Antonio d Acierno 13/01/2006 Applicazione web secondo Tomcat Layout delle directories di una Web Application in Tomcat Un'applicazione Web è l'insieme di file html, immagini, servlet, jsp, ecc. che servono per realizzare le pagine di un sito Web. In Tomcat un'applicazione Web è denominata Context. Un applicazione Web deve essere organizzata secondo una struttura ben precisa. Nella root directory dell applicazione *.html, *.jsp, etc. I file che devono essere visibilie al bowser del client. /WEB-INF/web.xml Il file web.xml rappresenta il descrittore dell applicazione. E un file XML che descrive le servlets e gli altri componenti dell applicazione. /WEB-INF/classes/ Questa directory contiene le classi java organizzarti in packages.. /WEB-INF/lib/ Contiene i files JAR che contengono classi JAVA necessarie all applicazione. Esistono directories per librerie condivise tra più applicazioni. I nuovi server accettano applicazioni nel formato Web Application Archive (WAR). 9 Servlet: ciclo di vita 10 Servlet: Esempio L engine svolge le seguenti operazioni: carica una Servlet la prima volta che viene richiesta; richiama il metodo init() della Servlet; gestisce le varie richieste richiamando il metodo service() delle Servlet in una nuova thread; alla chiusura richiama il metodo destroy() 11 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ServletHelloWWW extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println( <HTML><HEAD> ); out.println( <TITLE>Hello World </TITLE></HEAD> ); out.println( <BODY> <H1> Hello World </H1></BODY></HTML> ); } } 12 3 Antonio d Acierno 13/01/2006 Compilare ed eseguire una servlet Session tracking HTTP è un protocollo stateless: Ogni volta che un client richiede una pagina lo fa con una nuova connessione ed il server non mantiene informazioni sul client stesso. Importante: sbloccare l invoker nel file C:\Programmi\Apache Software Foundation\Tomcat 5.5\conf\web.xml Problema Copiare il .class nella dir C:\Programmi\Apache Software Foundation\Tomcat 5.5\webapps\ROOT\WEBINF\classes In un sito di e-commerce, un cliente aggiunge prodotti al suo carrello. Come fa il server a ricordarsi cosa il cliente ha nel carrello? 13 Soluzioni possibili 14 L API HttpSession HTTP Cookies Un cookie è un insieme sintetico di informazioni inviate da un web server ad un client. Il client, ogni volta che accede una pagina su quel server, reinvia queste informazioni. URL-Rewriting Ogni URL locale su cui l utente può cliccare è riscritto in modo da portare con se le informazioni necessarie ad identificare la sessione. Hidden form field 15 Le servlet propongono una soluzione basata sull interfaccia HttpSession che usa cookies o (se il browser non li supporta o se questi sono esplicitamente disattivati) URL rewriting. Il programmatore non deve preoccuparsi di dettagli implementativi manipolando cookies o informazioni da appendere all URL. 16 4 Antonio d Acierno 13/01/2006 L API HttpSession L API HttpSession Ogni sessione ha un oggetto HttpSession che può essere invocato con il metodo getSession di HttpServletRequest. HttpSession session =request.getSession(true); Con il parametro true, se la sessione non esiste ancora viene creata. Con parametro false, se la sessione non esiste getSession ritornerà null. Gli oggetti HttpSession vivono sul server e sono automaticamente associati al client tramite una meccanismo tipo cookies o URL-rewriting. Un oggetto HttpSession ha una serie di metodi tra cui vanno citati setAttribute(String name, Object obj) Object getAttribute(String name) 17 Esempio 18 Esempio 19 20 5 Antonio d Acierno 13/01/2006 Esempio Esempio 21 22 6