21
1 Titolo Presentazione / Data / Confidenziale / Elaborazio ne di ... Corso Java/J2EE per PM/software architect Servlet Elaborazione di Franco Grivet Chin Data 16/06/2009

1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... Corso Java/J2EE per PM/software architect Servlet Elaborazione di Franco Grivet Chin

Embed Size (px)

Citation preview

Page 1: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... Corso Java/J2EE per PM/software architect Servlet Elaborazione di Franco Grivet Chin

1Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Corso Java/J2EE per PM/software architect ServletElaborazione di Franco Grivet Chin

Data 16/06/2009

Page 2: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... Corso Java/J2EE per PM/software architect Servlet Elaborazione di Franco Grivet Chin

2Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

1 – Servlet introduzione

• Una Servlet è una classe scritta in Java usata per estendere le capacità di un server che usa applicazioni con un modello richiesta- risposta, come un web server

• Servlets sono un efficace sostituto delle CGI.• Forniscono la possibilità di generare documenti dinamici facili da scrivere e veloci in

esecuzione. • Servlets risolvono anche il problema di avere a che fare con API server side

specifiche di una piattaforma: sono implementate con le Java Servlet API, una estensione Java standard.

• Richiemare una servlet da client

http://machine-name:port/servlet/servlet-name

http://localhost:8080/servlet/bookdetails?bookId=203

Normalmente la servlet è mappata con un nome logico

Page 3: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... Corso Java/J2EE per PM/software architect Servlet Elaborazione di Franco Grivet Chin

3Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

2 Servlet e versioni

•Disponibili da jdk 1.2•Non fanno parte del jdk core•Dalla versione 2.2. Fanno parte della distribuzion J2EE•Versioni 1.0 (obsoleta) 2.0 –2.6

•Attenzione a controllare che la versione utilizzata in sviluppo sia poi uguale a quella utilizzata in produzione

Page 4: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... Corso Java/J2EE per PM/software architect Servlet Elaborazione di Franco Grivet Chin

4Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

3 Livello logico delle servlet

Costituiscono assieme alle JSP il livello web della piattaforma J2EE

Livello web responsabile di:- generazione dei contenuti per i client (varie forme di markup o anche file binari- presentazione al client web dell’interfaccia utente- presentazione e gestione della sequenza delle schermate- intermediari fra front-end e componenti di livello business- mantenimento dello stato delle sessioni utente-autenticazione egli utenti-support dei client attuali e futuri

Page 5: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... Corso Java/J2EE per PM/software architect Servlet Elaborazione di Franco Grivet Chin

5Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

3 Esecuzione delle servlet e package

• Le servlet vengono gestite da un container che si occupa del loro ciclo di vita

• La servlet può chiaramente accedere a tutte le risorse del server

• Il package javax.servlet contiene l’interfaccia Servlet e le classi che la implementano e classi di servizio come ServletRequest, ServletResponse, ServletConfig,etc.

Page 6: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... Corso Java/J2EE per PM/software architect Servlet Elaborazione di Franco Grivet Chin

6Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

3 Architettura delle Servlet

Il package javax.servlet fornisce le interfacce e le classi per scrivere servlets.

L’interfaccia di partenza è l’interfaccia Servlet.

Tutte le servlets implementano questa interfaccia, sia direttamente o, più comunemente, estendendo una classe che a implementa come HttpServlet

Page 7: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... Corso Java/J2EE per PM/software architect Servlet Elaborazione di Franco Grivet Chin

7Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

3 Ciclo di vita delle servlet

• Caricamento/instanziazione al momento della prima richiesta http da parte di un client o al momento dell’avvio del servizio• Inizializzazione. Se si vuole occorre ridefinire il metodo init(), in questa fase la servlet può caricare dati persistenti memorizzati nel file di config del server

Caricamentoinstanziazione

Inizializzazioneinit()

Attesa di richiestaservice()

Garbage collectorfinalize()

Distruzionedestroy()

Page 8: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... Corso Java/J2EE per PM/software architect Servlet Elaborazione di Franco Grivet Chin

8Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

3 Ciclo di vita della servlet - Init

•Solo la priva volta che una servlet viene richiamata viene instanziata (il container fa la new() )

viene invocato dal container il metodo init()

•Per inizializzare una servlet in modo specifico si fa un override del metodo init, chè ha due differenti implemantazioni in base alla versione API che usiamo: • public void init(ServletConfig config) version 2.0 • public void init() version 2.1.  

• Per la verione 2.0 conviene sempre iniziare il metodo con super.init() affinchè venga richiamato l’init della classe padre.

Page 9: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... Corso Java/J2EE per PM/software architect Servlet Elaborazione di Franco Grivet Chin

9Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

3 Ciclo di vita della servlet - Service

• Il metodo service viene sempre invocato dal container quando viene richiamata la servletpublic void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException

• Service prende come parametri un oggetto della classe HttpRequest, che rappresenta la richiesta inviata dal client

un oggetto della classe HttpResponse per inviare dati al client.

• Se service non viene ridefinito la servlet eredita il service di HttpServlet che richiama un metodo interno alla servlet in base al tipo di metodo http con cui la servlet viene invocata

protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException

doPost(..)doPut(..)doHead(..)doDelete(..)doOption(..)Quindi in genere si ridefiniscono i metodi sopra

Page 10: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... Corso Java/J2EE per PM/software architect Servlet Elaborazione di Franco Grivet Chin

10Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

HttpServletRequest e HttpServletResponse

Quando una servlet riceve una chiamata dal client, riceve due oggetti:

• HttpServletRequest, che gestisce la comunicazione dal client al server. Contiene le informazioni relative all’header http e i parametri inviati  

• HttpServletResponse , che gestisce la comunicazione dal server al client.

Page 11: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... Corso Java/J2EE per PM/software architect Servlet Elaborazione di Franco Grivet Chin

11Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

5 HttpServletRequest

HttpServletRequest permette alla servlet di accedere a :

• Informazioni come i parametri passati dal client, il tipo di protocollo usato dal client, il nome dell’host che ha fatto la richiesta e il server che la riceve.

• un input stream, ServletInputStream (getInputStream()) oppure un BufferedReader (getReader()). La servlet usa lo stream in input per ricevere i dati dal client che usa un protocollo come HTTP e metodi come GET,POST o PUT.

Page 12: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... Corso Java/J2EE per PM/software architect Servlet Elaborazione di Franco Grivet Chin

12Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

6 Metodi principali di HttpServletRequest

Metodi comunigetContentType(),getServerName(), getServerPort(),etc

Recuperare dati testuali inviati String getQueryString()Enumeration getParameterNames()String getParameter(String name)String[] getParameterValues(String name) (per le checkbox)

Recuperare dati non testuali (con post, delete, put)getReader() che restituisce un BufferedReadergetInputStream() che restituisce un ServletInputStream per dati in formato binario

Metodi per recuperare percorsiHttpServletRequest.getRealPath(String path) // depr. Da 2.1ServletContext.getRealPath(String path)

Page 13: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... Corso Java/J2EE per PM/software architect Servlet Elaborazione di Franco Grivet Chin

13Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

6 HttpServletResponse

HttpServletResponse fornisce alla servlet i metodi per rispondere al client: Consente di impostare il tipo di contentType e il MIME (metodi

setContentType e setHeader)

• Fornisce un output stream, ServletOutputStream (getOutputStream) usato per inviare dati in forma testuale, e uno scrittore Writer(getWriter()) usato per inviare dati in forma binaria.

Page 14: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... Corso Java/J2EE per PM/software architect Servlet Elaborazione di Franco Grivet Chin

14Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

6 Metodi principali di HttpServletResponse

Metodi comuni res.setContentType("text/html");res.setHeader("Pragma", "no-cache"); // forza il browser a non memorizzare in

cacheRedirezionamento

Public void sendRedirect(String location) throws IOExceptionpermette di redirigere il client verso altro url. Eventuali dati memorizzati nel buffer vengono cancellati

Inviare dati non testuali (con post, delete, put)getWriter() che restituisce un oggetto scrittore PrintWritergetOutputStream() che restituisce un ServletOutputStream per dati in formato binario

• Dalla versione 2.2 sono stati aggiunti metodi per una gestione migliore del bufferinggetBufferSize // restituisce la dimensione del buffersetBufferSize // imposta la dim del bufferisCommitted // booleano che dice se sono stati inviati dati al clientflushBuffer // invio immediato dei datireset() // cancellazione del buffer

Page 15: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... Corso Java/J2EE per PM/software architect Servlet Elaborazione di Franco Grivet Chin

15Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

6 Il ServletContext ( application scope)

Rappresenta l’ambiente nel quale la servlet viene eseguita. Può essere utilizzato come repository comuni di dati a cui tutte le le servlet ( e le jsp) di qualsiasi session debbano accedere ServletContext application= getServletContext();

Metodi comunipublic void setAttribute(String name, Object o)public Object getAttribute(String name)public Enumeration getAttributeNames()public void removeAttribute(String name)

Page 16: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... Corso Java/J2EE per PM/software architect Servlet Elaborazione di Franco Grivet Chin

16Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

6 La classe RequestDispatcher

Possibilità di propagare richieste e risposte. Una servlet può:Inoltrare una richiesta a un altro componente o altra servlet Includere nella propria risposta il risultato dell’esecuzione di un’altra servlet

ServletContext application= getServletContext(); RequestDispatcher disp=application.getRequestDispatcher(String path)( anche request.getRequestDispatcher(String path)

Il reference ottenuto permette di inoltrare la request direttamente all’oggetto identificato dal path passato come parametro. La RequestDispatcher fornisce i due metodipublic void forward(ServletRequest request, ServletResponse response) throws ServletException, IOExceptionpublic void include(ServletRequest request, ServletResponse response) throws ServletException, IOException

NOTA:Il forward va fatto prima di ottenere lo stream per inviare i dati al client

Page 17: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... Corso Java/J2EE per PM/software architect Servlet Elaborazione di Franco Grivet Chin

17Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

6 Gestione della sessione

Le servlet forniscono un’api per gestire la sessione

Le sessioni sono rappresentate dall’oggetto HttpSession a cui si accede con il metodo getSession dell’oggetto request

HttpSession session=request.getSession();session.setAttribute(“utente”, ut);

Ogni sessione ha un timeout determinato all’interno del file web.xmlche può oppure essere gestito con i metodi[get/set]MaxInactiveInterval

Si può usare il metodo invalidate per rimuovere una sessione o il metodo removeAttribute per rimuovere un attributo

session.invalidate(); // rimuove tutti gli attributi di sessione

Session.removeAttribute (“utente”); // rimuove solo l’utente

Operazioni svolti su una sessione generano degli eventi che possono essere gestiti dal Listener opportuno. Ad esempio l’aggiunta o la rimozione di un oggetto ad una sessione può essere catturato implementando l’interfaccia javax.http.HttpSessionBindingListener

Page 18: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... Corso Java/J2EE per PM/software architect Servlet Elaborazione di Franco Grivet Chin

18Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Cookie

I cookie sono dei file di testo che vengono memorizzati sul client e possono essere utilizzati per emorizzare delle informazioni (non sensibili) sulla macchina dell’utente finale (vengono anche usati per implementare la sessione)

Creare a Cookie

• Cookie getBook = new Cookie("Buy", bookId);

Dove “Buy” è il nome del cookie e bookId è il value entrambi stringhe non sono oggetti

Impostare attributi dei Cookie

• getBook.setComment("User wants to buy"); commento del cookie

• getBook.setValue(“Attribute”)modifico il value

Cancellare un cookie

• thisCookie.setMaxAge(0); con 0 lo cancello

Inviare un Cookie

• response.addCookie(getBook);

Recuperare Cookies

• Cookie[] cookies = request.getCookies(); lo spedisco sulla macchina del client

Recuperare il valore di un Cookie

• thisCookie.getValue(). Devo gestire la collation

NOTA: I cookie possono essere usati solo per memorizzare stringhe

Page 19: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... Corso Java/J2EE per PM/software architect Servlet Elaborazione di Franco Grivet Chin

19Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

6 Listener

Si possono definire delle classi listener (che implementano le relative interfacce) per gestire gli eventi che possono verificarsi in una applicazione web sui vari contesti

Page 20: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... Corso Java/J2EE per PM/software architect Servlet Elaborazione di Franco Grivet Chin

20Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

6 Classi listener

Page 21: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... Corso Java/J2EE per PM/software architect Servlet Elaborazione di Franco Grivet Chin

21Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

www.consorzioformaweb.it