Progetto di reti di Calcolatori e Sistemi Informatici

Documenti analoghi
Programmazione server-side: Java Servlet

Servlet API. Programmazione in Ambienti Distribuiti A.A

Introduzione alla programmazione Http lato server in Java

Server-side Programming: Java servlets Parte II

Tecnologie di Sviluppo per il Web

Tener traccia del client

Note pratiche sullo sviluppo di servlet (I)

Tomcat & Servlet. Contenuti. Programmazione in Ambienti Distribuiti. Tomcat Applicazioni Web. Servlet JSP Uso delle sessioni

Applicazioni web. Sommario. Parte 6 Servlet Java. Applicazioni web - Servlet. Alberto Ferrari 1. Servlet Introduzione alle API ed esempi

Architetture Web: un ripasso

Laboratorio di Programmazione di Rete

Gestire le sessioni con le Servlet

Laboratorio di reti II: Servlet

Il Protocollo HTTP e la programmazione di estensioni Web

Laboratorio di Basi di Dati

3 ServletContext. Marco Tessarotto Programmazione dei Web Server Anno Accademico

Sessioni Applicative in Http. Tito Flagella

Tecnologie di Sviluppo per il Web

Siti web centrati sui dati (Data-centric web applications)

Scaletta. Estensioni UML per il Web. Applicazioni web - 2. Applicazioni web. WAE: Web Application Extension for UML. «Client page»

Antonio d Acierno 13/01/2006

Basi di dati e Web (Moduli: Laboratorio e Siti Web centrati sui Dati) Prova scritta del 14 luglio 2008

JAVA SERVLET: I filtri

Applicazioni web centrati sui dati (Data-centric web applications)

Architettura MVC-2 A L B E R T O B E L U S S I A N N O A C C A D E M I C O /

Tecnologie di Sviluppo per il Web

I file WAR. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2004/05-1

Application Server per sviluppare applicazioni Java Enterprise

SERVLET & JSP DISPENSE

Java Server Pages (JSP) JSP o Servlet? Java Server Pages (JSP) Java Server Pages Costituiscono un estensione della tecnologia delle servlet

Capitolo 4 Pianificazione e Sviluppo di Web Part

Università degli Studi di Modena e Reggio Emilia. Facoltà di Ingegneria Reggio Emilia CORSO DI TECNOLOGIE E APPLICAZIONI WEB. Http con java, URL

Lezione 1 Introduzione

Tito Flagella - Introduzione alla programmazione di Servlet

Web Application model. Servlet. Servlet e Servlet Container. Introduzione alle Servlet

Oggetto: MASTER DI ALTA FORMAZIONE PROFESSIONALE IN PROGRAMMATORE JAVA PARTECIPAZIONE GRATUITA

Java Servlet. Corso di Applicazioni Telematiche. A.A Lezione n.10 Prof. Roberto Canonico

Telematica II 17. Esercitazione/Laboratorio 6

Corso di PHP. Prerequisiti. 6.1 PHP e il web 1. Conoscenza HTML Tecnica della programmazione Principi di programmazione web

LA GESTIONE DELLE VISITE CLIENTI VIA WEB

19. LA PROGRAMMAZIONE LATO SERVER

Laboratorio di Programmazione di Rete

Servlet e JDBC. Servlet e Web Server. Servlet e Web Server. Servlet e Web Server. Richieste. Servlet. Servlet:

Corso di Applicazioni Telematiche


Siti web centrati sui dati Architettura MVC-2: i JavaBeans

2.5. L'indirizzo IP identifica il computer di origine, il numero di porta invece identifica il processo di origine.

Tutorial web Application

Programmazione a Oggetti Lezione 10. Ereditarieta

Architettura MVC-2: i JavaBeans

Do-Dots Protocollo di comunicazione

Database & WWW. Basi di dati Architetture e linee di evoluzione P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. Torlone

DOCFINDERWEB SERVICE E CLIENT

Sviluppo di Applicazioni Web con Java 2 Enterprise Edition

Siti interattivi e dinamici. in poche pagine

Svantaggi delle servlet

Corso di Informatica (Programmazione) Lezione 6 (31 ottobre 2008)

Esercitazione 4 JDBC

Progettazione : Design Pattern Creazionali

Airone Gestione Rifiuti Funzioni di Esportazione e Importazione

Funzioni in C. Violetta Lonati

Spring WS Sviluppare WebService in Java

Protocolli e architetture per WIS

Integrazione InfiniteCRM - MailUp

UNIVERSITÀ DEGLI STUDI DI FIRENZE FACOLTA DI INGEGNERIA DIPARTIMENTO DI SISTEMI E INFORMATICA. Elaborato di Tecnologie del Software per Internet

Laboratorio di Basi di dati

Web Programming. Lezione 4: Cookie e Sessioni. Giulio Rossetti 14/04/2011. Guru@Work

Per chi ha la Virtual Machine: avviare Grass da terminale, andando su Applicazioni Accessori Terminale e scrivere grass

Architetture Web parte 2

Uno dei pregi di Java è quello di integrare la documentazione con il codice stesso Formato dei commenti:

I file di dati. Unità didattica D1 1

Tecnologie di Sviluppo per il Web

GESTIONE DEI PROCESSI

Laboratorio di Basi di Dati e Web

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

costruttori e distruttori

Reti di Telecomunicazione Lezione 7

SITI-Reports. Progetto SITI. Manuale Utente. SITI-Reports. ABACO S.r.l.

Standard Nazionale di Comunicazione Mercato Gas

Programmazione Java Avanzata

Bibliografia: Utenti e sessioni

Corso di Amministrazione di Reti A.A. 2002/2003

Protocolli applicativi: FTP

API e socket per lo sviluppo di applicazioni Web Based

1 Gestione dell utente connesso in sessione con Java Server Pages, Java Beans, Servlet

Inizializzazione, Assegnamento e Distruzione di Classi

Laboratorio di sistemi Prima Web Application JSP [Java]

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Sviluppo di Applicazioni Web con Java 2 Enterprise Edition

PRACTICAL DEVELOPMENT OF A WEB SERVICE

Riccardo Dutto, Paolo Garza Politecnico di Torino. Riccardo Dutto, Paolo Garza Politecnico di Torino

Breve introduzione curata da Alessandro Benedetti. Struts2-Introduzione e breve guida

RMI Remote Method Invocation

Introduzione alle applicazioni di rete

Progetto di Gestione Documenti in Ambiente Web

SWIM v2 Design Document

Osservazioni. Laboratorio di Tecnologie Lato Server - V.Della Mea e I.Scagnetto, a.a. 2005/06-1

FPf per Windows 3.1. Guida all uso

Tricks & Tips. [Access] Tutorial - ActiveX - Controllo Tree View. - Michele de Nittis - Versione: 1 Data Versione: venerdì 30 agosto 2002

Standard Nazionale di Comunicazione Mercato Gas

Transcript:

Progetto di reti di Calcolatori e Sistemi Informatici Stefano Millozzi 1

Servlet 2

Servlet Tecnologia Java per estendere le funzionalità di un server [web] indipendenti dalla piattaforma portabili senza il collo di bottiglia dei vecchi CGI modello di esecuzione thread-based anziché process-based accesso a tutta la tecnologia java es. JDBC La servlet utilizza il protocollo HTTP per comunicare con l esterno E il Web Application Server (Servlet Container) che gestisce le transazioni con il client 3

Cos è una servlet http Classe che estende javax.servlet.http.httpservlet 4

Chi esegue la Servlet La servlet è eseguita nel server e restituisce dati (HTML, Immagini, XML ecc) al client secondo il protocollo HTTP <html> <body>. http Servlet 1 Servlet 2 5 Client Browser Web Application Server Servlet Container

Cosa fa una servlet Legge dati inviati in maniera esplicita dai client attributi e valori di una form dati impliciti inviati da un client es. header richiesta, cookie etc. Produce dei risultati basati sugli input e/o sullo stato (il contenuto è dinamico) Invia al clienti risultati espliciti (HTML) es. autenticazione avvenuta con successo impliciti header, cookie, stato sessione etc. 6

Come funziona una servlet La servlet viene invocata dal web server (WS) alla prima invocazione viene invocato il costruttore viene invocato il metodo init() che contiene il codice di inizializzazione creazione di oggetti di supporto memorizzazione di parametri/costanti Ad ogni richiesta, viene invocato il metodo di servizio corrispondente parsing della richiesta generazione dell output (HTML) invio output al client 7

Ciclo di vita di una servlet il WS carica la servlet e la inizializza invocando il metodo init() per ogni richiesta viene eseguito il metodo di servizio corrispondente, tipicamente: doget() dopost() service() Prendono 2 argomenti HttpServletRequest HttpServletResponse il metodo è eseguito in un thread separato per ogni client la programmazione deve essere thread-safe! EVITARE L USO DI VARIABILI DI ISTANZA NON SINCRONIZZATE ALL INTERNO DI UNA SERVLET alla fine (ad es. quando il WS termina) la servlet viene distrutta invocando il metodo destroy() 8

Sviluppo di una servlet http Inizializzazione Lettura dei dati in ingresso query string header [cookie] Calcolo e presentazione dei risultati Gestione dello stato Sessioni Contesto applicazione Distruzione 9

Struttura di una servlet import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ServletTemplate extends HttpServlet { } } public void doget (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ // lettura Input //Calcolo risultati //Presentazione risultati //gestione stato public void init() throwsservletexception{ // inizializzazioni globali public void destroy() {// cleanupcode...} } // eventuali altri metodi di supporto 10

1. Lettura dell input L input viene fornito ai metodi di servizio tramite un oggetto di tipo HttpServletRequest request.getparameter("name") Ritorna una stringa che rappresenta il valore della prima occorrenza del parametro name null se il parametro è assente request.getheader("name") Ritorna una stringa che rappresenta il valore associato all header name null se l attributoèassente request.getparameternames() Ritorna una Enumeration contenente i valori di tutti i parametri In generale, è possibile ispezionare l intera richiesta http, usando altri metodi disponibili 11

2. Scrittura della risposta Occorre ottenere un OutputStream dall oggetto HttpResponse nel caso comune (content=text/html) si utilizza un PrintWriter Si imposta il tipo di contenuto ritornato setcontenttype(string type) public void doget(httpservletrequestrequest, HttpServletResponseresponse) throws ServletException, IOException{ response.setcontenttype("text/html"); PrintWriterout = response.getwriter(); È possibile inserire nello stream di output codice HTML qualsiasi altra stringa Qualsiasi sequenza di byte, compatibile con il content type out.println("<tr><td>" + headername); out.println(" <TD>" + request.getheader(headername)); Analogamente al caso dell input, è possibile impostare tutti i dettagli della risposta http 12

Tipi di richieste HTTP GET IP-address resourcename?param1=value1& &paramn=valuen Usato per chiedere dati statici o informazioni dinamiche al server (GET http://www.prova.com, GET http://www.prova.com?nome=stefano) POST IP-address resourcename?param1=value1& &paramn=valuen HEAD Usato per accedere a risorse dinamiche sul server incapsulando i parametri (ad es. raccolti mediante FORM HTML) nel body della richiesta GET appende i params all URL (bookmark ok), PUT li inserisce nella richiesta (bookmark ko) Usato per chiedere header di risposta (ad es. Content-Type, Content- Length) 13

Configurazione delle servlet: web.xml <?xml version="1.0" encoding="utf-8"?> <web-app id="webapp_id" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>wwwx</display-name> <servlet> </servlet> <servlet-name>basicservlet</servlet-name> <servlet-class>basicservlet</servlet-class> <servlet-mapping> <servlet-name>basicservlet</servlet-name> <url-pattern>/basicservlet</url-pattern> </servlet-mapping> </web-app> 14

Alcuni tag XML in web.xml (1) web-app definisce a quale versione delle servlet ci si riferisce (es. 2.4) e fornisce riferimenti agli XML schema dove è descritta la grammatica da utilizzare (2) servlet, servlet-name, servlet-class: permettono di dichiarare quali sono le servlet della webapp con il loro nome (univoco) e la classe di riferimento (compresa del percorso con i package) (3) servlet-mapping, servlet-name, url-pattern: definiscono il percorso relativo che permette di identificarle nella stringa URL 15

Creazione di una Web Application Java fornisce specifiche per la creazione di applicazioni web Formato war Si può creare attraverso il task ant war Struttura del file META-INF (opzionale) contiene un file Manifest per collegare librerie esterne alla WebApp WEB-INF web.xml lib File jar utilizzati dalla webapp classes File.class corrispondenti alle servlet + altre classi utilizzate dalle servlet File html File JSP File dati, immagini Cartelle e sottocartelle 16

Deploy di una WebApp Directory context root WEB-INF WEB-INF/classes WEB-INF/lib Description This is the root directory for the Web application. The name of this directory is chosen by the Web application developer. All the JSPs, HTML documents, servlets and supporting files such as images and class files reside in this directory or its subdirectories. The name of this directory is specified by the Web application creator. To provide structure in a Web application, subdirectories can be placed in the context root. For example, if your application uses many images, you might place an images subdirectory in this directory. The examples of this chapter and Chapter 10 use advjhtp1 as the context root. This directory contains the Web application deployment descriptor (web.xml). This directory contains the servlet class files and other supporting class files used in a Web application. If the classes are part of a package, the complete package directory structure would begin here. This directory contains Java archive (JAR) files. The JAR files can contain servlet class files and other supporting class files used in a Web application. 17

web.xml 1. <!DOCTYPE web-app PUBLIC 2. "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" 3. "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"> Element web-app defines the configuration of each servlet in 4. <web-app> the Web application and the 5. <!-- General description of your Web application --> servlet mapping for each 6. <display-name> servlet. 7. Advanced Java How to Program JSP 8. and Servlet Chapter Examples 9. </display-name> 10. <description> 11. This is the Web application in which we 12. demonstrate our JSP and Servlet examples. 13. </description> Element display-name specifies a name that can be displayed to the administrator of the server on which the Web application is installed. Element description specifies a description of the Web application that might be displayed to the administrator of the server. 18

web.xml 1. <servlet> 2. <servlet-name>welcome1</servlet-name> 3. <description> 4. A simple servlet that handles an HTTP get request. 5. </description> 6. <servlet-class> 7. com.deitel.advjhtp1.servlets.welcomeservlet 8. </servlet-class> 9. </servlet> Element servlet describes a servlet. Element servlet-name is the name for the servlet. Element description specifies a description for this particular servlet. Element servlet-class specifies compiled servlet s fully qualified class name. 19

web.xml 31 <!-- Servlet mappings --> 32 <servlet-mapping> 33 <servlet-name>welcome1</servlet-name> 34 <url-pattern>/welcome1</url-pattern> 35 </servlet-mapping> 36 37 </web-app> Element servlet-mapping specifies servlet-name and urlpattern elements. 20

Il Deployment Alberi Web Application da inserire in specifiche directory del Web Server Di solito due possibilità: comunicare al Web Server dove si trova l albero della Web Application creazione di un file.war con l albero della Web Application da consegnare al Web Server che automaticamente provvede a scompattarlo dove necessario (portabilità dell applicazione) In JBoss la directory importante per il deployment è <JBOSS_HOME>\server\default\deploy In questa directory si trovano gli alberi delle Web Application disponibili sul Web Server 21

Creazione di un.war Assicurarsi di avere tutti i files pronti nell albero della Web Application Nella directory <wa> eseguire il comando: jar cvf miawebapp.war * Al completamento nella dir <wa> si troverà il file compresso: miawebapp.war Sposta il file miawebapp.war in JBoss Avvia JBoss Per accedere agli URL statici della Web Application: http://localhost:8080/miawebapp/index.htm http://localhost:8080/miawebapp/xxx.htm Per accedere alle servlet della Web Application: http://localhost:8080/miawebapp/s1 http://localhost:8080/miawebapp/s2 22

Esempio Realizzare una servlet che legge i parametri passati nella URL e ritornare una pagina HTML che mostra i parametri passati e i valori ottenuti ListParameterServlet.java 23

Ant e l'automazione dei passi di deployment ANT è un tool free-downloadable (http://ant.apache.org/) e crossplatform per automatizzare l intero processo di: preparazione su file system della struttura ad albero di una Web Application (con cancellazioni e creazioni di directories) copia dei files necessari nelle giuste posizioni compilazione di tutti i files java (servlet ed utilità) generazione dell archivio compattato.war contenente la Web Application copia dell archivio compattato nella giusta posizione di un Web Server per il deployment della Web Application Sostituisce file batch (.bat in ambiente Windows) e scripts (.sh in ambiente Linux) Ispirato alla filosofia di compilazione e linking di programmi C ( makefile ) Incentrato sull uso di un file build.xml contenente tag (denominati target) associati alle varie interazioni previste (con comandi di file system, compilatori, script, ecc.) Ambiente potente e flessibile di gestione delle articolate fasi di sviluppo e deployment di una Web Application 24

Esercizi Costruire una pagina HTML che raccoglie i dati anagrafici di uno studente; i dati vengono poi inviati ad una servlet che apre un file e salva i dati su un file Modificare la Servlet ListParameterServlet in modo da restituire una pagina HTML con i parametri e gli header Realizzare una servlet che, quando invocata, ritorna una immagine in base al valore di un opportuno parametro Utilizzare la servlet come src di un tag img di una pagina HTML 25

Alcuni metodi utili delle Servlet ServletConfig getservletconfig() Ritorna un oggetto ServletConfig che permette di accedere ai parametri di configurazione della servlet dettagliato di seguito ServletContext getservletcontext() Ritorna il context in cui vivono le servlet (all interno del server) Permette di ottenere un riferimento ad altre servlet e condividere oggetti comuni a tutte le servlet della stessa applicazione String getservletinfo() Ritorna informazioni sulla servlet String getservletname() Ritorna il nome della servlet, come definito nel file web.xml 26

Metodi di Servlet Method void init( ServletConfig config ) ServletConfig getservletconfig() String getservletinfo() void service( ServletRequest request, ServletResponse response ) void destroy() 27 Description This method is automatically called once during a servlet s execution cycle to initialize the servlet. The ServletConfig argument is supplied by the servlet container that executes the servlet. This method returns a reference to an object that implements interface ServletConfig. This object provides access to the servlet s configuration information such as servlet initialization parameters and the servlet s ServletContext, which provides the servlet with access to its environment (i.e., the servlet container in which the servlet executes). This method is defined by a servlet programmer to return a String containing servlet information such as the servlet s author and version. The servlet container calls this method to respond to a client request to the servlet. This cleanup method is called when a servlet is terminated by its servlet container. Resources used by the servlet, such as an open PdR_09010 file or an - Stefano open database Millozzi connection, should be deallocated here.

Metodi di Servlet Method dodelete dooptions doput Description Called in response to an HTTP delete request. Such a request is normally used to delete a file from a server. This may not be available on some servers, because of its inherent security risks (i.e., the client could delete a file that is critical to the execution of the server or an application). Called in response to an HTTP options request. This returns information to the client indicating the HTTP options supported by the server, such as the version of HTTP (1.0 or 1.1) and the request methods the server supports. Called in response to an HTTP put request. Such a request is normally used to store a file on the server. This may not be available on some servers, because of its inherent security risks (i.e., the client could place an executable application on the server, which, if executed, could damage the server perhaps by deleting critical files or occupying resources). dotrace 28 Called in response to an HTTP trace request. Such a request is normally used for debugging. The implementation of this method automatically returns a\n HTML document to the client containing the request header information (data sent by the browser as part of the request).

Metodi di Servlet (da sovrascrivere) public void doget(httpservicerequest req, HttpServiceResponse res) implementa la gestione di richieste di tipo GET RIDEFINIBILE public void dopost(httpservicerequest req, HttpServiceResponse res) implementa la gestione di richieste di tipo POST RIDEFINIBILE public void dohead(httpservicerequest req, HttpServiceResponse res) implementa la gestione di richieste di tipo HEAD RIDEFINIBILE 29

Gestione avanzata delle servlet 1) Gestione dello stato 1) url rewriting 2) Cookie 3) I listener 4) I FIltri 2) Inizializzazione delle servlet 3) Cooperazione tra servlet 1) Include, forward e redirect 4) Scambio di dati tra servlet 1) scope di sessione, request, application 5) Multithreading 32

(1) Gestione dello stato Attraverso le servlet è possibile gestire Stato interno della servlet Sincronizzazione canonica Stato di oggetti persistenti Transazioni Stato della sessione Session tracking 33

Gestione della sessione Il protocollo HTTP è stateless! Per mantenere informazioni rispetto allo stato della sessione esistono appositi meccanismi In HTTP Campi hidden nei form Non persistente Cookie coppie <attributo,valore> inviate dal WS memorizzate dal browser ritornate al WS per ogni connessione al sito persistenza affidata al client URL rewriting Non persistente Servlet Session tracking Astrae dai suddetti meccanismi fornendo un interfaccia uniforme È compito del ws (servlet container) implementare le gestione delle sessioni usando una delle tecniche sopra elencate 34

API per il Session Tracking Gli oggetti sessione sono gestiti dal WebServer Associati al client utilizzando cookie o URL rewriting (trasparente per il programmatore) Session s = request.getsession(true) ritorna o una sessione esistente o una nuova se non ve ne è una Il WS ispeziona la richiesta(url e cookie) per verificare se il client ha già una sessione(chiave di una hash table). Se si, ritorna l oggetto. Se no, crea una nuova sessione memorizzando nella hash table una chiave che viene associata ad un cookie o ad una stringa che verrà inserita nella URL Ottenuta una sessione, si possono memorizzare al suo interno valori come con le hash table setattribute(string key, Object value) Object getattribute() 35

Metodi della classe HttpSession Object getattribute Estrae il valore di un attributo identificato da un nome. Ritorna null se al nome non è associato un valore setattribute(string key, Object value) Associa un valore ad un nome removeattribute(string key) getattributenames() String getid() Ritorna la chiave di sessione 36

Metodi della classe HttpSession boolean isnew() Determina se la sessione è nuova per il client getcreationtime() getlastaccessedtime() getmaxinactiveinterval, setmaxinactiveinterval Persistenza dell oggetto in termini temporali Invalidate Invalida la sessione e libera tutti gli oggetti ad essa associati consentendo al WS di liberare risorse 37

(1.1) Riscrittura degli URL Abbiamo visto che HttpSession è ciò che le servlet usano per recuperare una sessione Abbiamo detto che tale recupero si basa in genere su dei cookies di sessione Se un browser non supporta i cookies (per esplicito rifiuto di accettazione per esempio) Riscrittura degli URL ( URL Rewriting ) Operazione da parte del Web Container trasparente al programmatore ma operazione eseguita solo se esplicitamente richiesta! Nella URL viene aggiunto un opportuno parametro nella query che identifica la sessione nella forma: http://host/path?...&sessionid=xxxxxxxxxxxxxxx In tutte le parti HTML che vengono ritornate e che contengono un link ad una altra risorsa del server occorre aggiungere questo parametro aggiuntivo 39

Riscrittura degli URL Come aggiungere il parametro di SESSIONID? Un metodo in HttpServletResponse: String encodeurl(string url) Aggiunge al parametro in input url un identificativo della sessione Riscrittura automatica da parte del Web Container, ma solo se esiste un rifiuto dei cookies da parte del Browser encodeurl(string url) cookies accettati dal client? NON HA EFFETTO cookies rifiutati dal client? HA EFFETTO 40

(1.2) Gestione dello stato attraverso Cookie javax.servlet.http.cookie modella cookies gestiti autonomamente e con tempo di vita maggiore di quello dei cookie di sessione usati per il tracciamento della sessione Cookies di applicazione inseriti in HTTP request e HTTP response Esistono i seguenti due metodi principali per la gestione di oggetti istanza di Cookie : Cookie[] getcookies() in HttpServetRequest void addcookie(cookie cookie) in HttpServletResponse 41

Metodi principali di Cookie Cookie(String name, String value) void setname(string name) String getname() void setvalue(string value) String getvalue() void setdomain(string domain) String getdomain() void setmaxage(int lifetime) int getmaxage () 42

(1.3) Listener di Sessione Il session listener interviene quando avvengono I seguenti eventi:: Una nuova sessione viene creata Una sessione viene distrutta (esplicitamente da una servlet o per timeout) Per ottenere un session listener si implementa l interfaccia javax.servlet.http.httpsessionlistener 43

Listener di Sessione } public class MioListener implements HttpSessionListener{ public void sessioncreated(httpsessionevent se) { //quando una nuova sessione viene creata public void sessiondestroyed(httpsessionevent se) { } //quando una sessione viene distrutta } <listener> <listener-class>miolistener</listener-class> </listener> 44

(1.4) Filter (Sun spec.) The Java Servlet 2.3 specification introduced the concept of filters, components that can intercept and modify requests to and responses from servlets and JSPs (JavaServer Pages). You can extend and enhance an application by adding one or more filters, and you can apply filters individually or in a series called a filter chain. From a developer's point of view, a filter is a Java class that implements the interface defined in javax.servlet.filter. The key method is dofilter, which has the following signature: public void dofilter(servletrequest request, ServletResponse response, FilterChain chain) 45

Configurazione web.xml... <filter> <filter-name>filterallrequests</filter-name> <filter-class>mypackage1.filterone</filter-class> </filter> <filter-mapping> <filter-name>filterallrequests</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>... 46

Utilizzo della catena public void dofilter(servletrequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { } // operazioni di controllo varie (autenticazione / logging etc) // processing of the request (permette agli altri filtri di effettuare controlli) e infine passa il controllo alla servlet finale chain.dofilter(request, response);//se non presente la richiesta non viene elaborata 47

(2) Inizializzazione servlet Il metodo init() viene invocato solo quando la servlet viene caricata (di solito alla prima richiesta) usato per settare parametri di inizializzazione Es. connessione al database Prima alternativa: public void init() throwsservletexception{ } // Initializationcode... Va bene se non ci sono parametri di configurazione variabili 48

Inizializzazione servlet Seconda alternativa: public void init(servletconfigconfig)throwsservletexception{ super.init(config);//importante!!!! // initializationcode } L oggetto ServletConfig contiene parametri di configurazione Settati esternamente (in modo server-specific) In Tomcat/Jboss si usa un file web.xml Letti con metodi get(in modo portabile) String message = config.getinitparameter( message ) Restistuisce il valore del parametro di nome message 49

(3) Collaborazione tra servlet Tre possibilità di collaborazione per una servlet in un Web Server: (include) inclusione di contenuto di un altra risorsa sullo stesso Web Server L output di una altra servlet/pagina html/altro viene concatenata all outputstream della servlet chiamante (forward) ridirige la richiesta ad un altra risorsa all interno dello stesso WebServer Il controllo passa ad una differente servlet/risorsa che risponde al client. Al termine della elaborazione della nuova risorsa il controllo non viene ritornato alla servlet chiamante ma la richiesta si conclude (redirect) redirezione ad una nuova URL. Il server invia un HTTP CODE 3xx e il browser effettua una riconnessione alla nuova URL comunicata dal server 50

Request dispatchet Il RequestDispatcher è l oggetto utilizzato per indirizzare una richiesta utente ad una altra risorsa locale nel server La risorsa può essere dinamica (Servlet o JSP file) o statica (HTML document, image) Per indirizzare la richiesta alla risorsa x, si usa: getservletcontext().getrequestdispatcher("x") 51

Include e forward L oggetto java da utilizzare per include e RequestDispatcher che offre i metodi: include(httpservletrequest req, HttpServletResponse res) forward(httpservletrequest req, HttpServletResponse res) RequestDispatcher è ottenibile dal metodo attraverso due alternative: Con il metodo getrequestdispatcher(string url) di: HttpServletRequest, con url relativo (che NON COMINCIA con / ) o assoluto (che COMINCIA con / ) ServletContext, con url solamente assoluto Esempi: RequestDispatcher rd = request.getrequestdispatcher( myservlet ); RequestDispatcher rd = getservletcontext().getrequestdispatcher( /myservlet ); 52

Redirect Metodo di HttpServletResponse: response.sendredirect(url) L utente vede la URL della pagina/servlet/jsp Due round trip Vantaggio: l utente può visitare la risorsa separatamente Può essere aggiunta ai preferiti Svantaggio: visitando direttamente la risorsa, la risorsa si deve occupare di recuperare i dati in quanto non c e nessuna servlet precedente che lo ha già fatto 53

Include vs Forward Con il metodo include, la servlet chiamata può solo alterare il contenuto della risposta e non gli headers Gestione richiesta e risposta di un client RESTANO DI PERTINENZA DELLA SERVLET CHIAMANTE Se la servlet chiamante ha già iniziato a rispondere usando l outputstream, si può usare solo il metodo include Il forward può essere usato per dare ad un altra risorsa la responsabilità di rispondere all utente Gestione richiesta e risposta di un client DIVENTANO DI PERTINENZA DELLA SERVLET CHIAMATA Si può utilizzare il forward SOLO se la servlet non ha iniziato a scrivere in output, altrimenti viene generata una eccezione IllegalStateException 54

(4) Scambio di dati tra Servlet 3 modi per scambiare informazioni tra Servlet (e JSP) Per dati utilizzati solo durante la richiesta corrente request.setattribute("key", value); Nel caso di dati che devono rimanere all interno della stessa sessione (più richieste successive per lo stesso utente) session.setattribute("key", value); Dati globali per l intera applicazione context.setattribute("key", value); 55

(5) Multi Threading Le Servlet sono in grado di gestire più richieste in maniera concorrente Quindi i metodi doget e dopost possono essere acceduti in maniera concorrente (più thread che eseguono gli stessi metodi sulle stesse classi) Occorre gestire quindi in maniera opportuna l accesso alle risorse condivise ed utilizzare con cautela campi statici o di istanza all interno della servlet Due approcci per il Thread safe: Sincronizzare gli accessi alle risorse Creare servlet non multithreading (SingleThreadModel) 56

SingleThreadModel Per avere servlet che gestiscono un client alla volta la servlet deve implementare l interfaccia SingleThreadModel oltre che estenere l HttpServlet class Implementare l interfaccia SingleThreadModel non richiede la scrittura di metodi aggiuntivi. Si tratta di una interfaccia di firma che serve per dichiarare al server di voler essere eseguita in maniera non concorrente In genere le servlet SingleThreadModel rendono l applicazione meno performante perché per ogni richiesta è necessario allocare una nuova struttura di gestione della servlet public class ReceiptServlet extends HttpServlet implements SingleThreadModel { } 57

Problemi di generazione della risposta Problemi delle Servlet scarsa leggibilità del codice di output Difficoltà di manutenzione caratteri speciali (&,>,<, ) devono essere tradotti Soluzioni E possibile creare delle classi che astraggono sequenze di tag HTML Cascading Style Sheet(CSS) consentono di migliorare la manutenibilità della servlet relativamente agli aspetti di produzione della risposta Combinare Servlet e JSP Lo vedremo in seguito 58