Corso Java/J2EE per PM/software architect Servlet Elaborazione di Franco Grivet Chin Data 16/06/2009 Titolo 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 Titolo 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 Titolo 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 Titolo 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. Titolo 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 Titolo 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 Caricamento instanziazione Inizializzazione init() Attesa di richiesta service() Garbage collector finalize() Distruzione destroy() Titolo 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. Titolo Presentazione / Data / Confidenziale / Elaborazione di ...
3 Ciclo di vita della servlet - Service Il metodo service viene sempre invocato dal container quando viene richiamata la servlet public 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 Titolo 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. Titolo 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. Titolo Presentazione / Data / Confidenziale / Elaborazione di ...
6 Metodi principali di HttpServletRequest Metodi comuni getContentType(),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 BufferedReader getInputStream() che restituisce un ServletInputStream per dati in formato binario Metodi per recuperare percorsi HttpServletRequest.getRealPath(String path) // depr. Da 2.1 ServletContext.getRealPath(String path) Titolo 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. Titolo 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 cache Redirezionamento Public void sendRedirect(String location) throws IOException permette 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 PrintWriter getOutputStream() che restituisce un ServletOutputStream per dati in formato binario Dalla versione 2.2 sono stati aggiunti metodi per una gestione migliore del buffering getBufferSize // restituisce la dimensione del buffer setBufferSize // imposta la dim del buffer isCommitted // booleano che dice se sono stati inviati dati al client flushBuffer // invio immediato dei dati reset() // cancellazione del buffer Titolo 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 comuni public void setAttribute(String name, Object o) public Object getAttribute(String name) public Enumeration getAttributeNames() public void removeAttribute(String name) Titolo 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 metodi public void forward(ServletRequest request, ServletResponse response) throws ServletException, IOException public 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 Titolo 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 Titolo 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 Titolo 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 Titolo Presentazione / Data / Confidenziale / Elaborazione di ...
6 Classi listener Titolo Presentazione / Data / Confidenziale / Elaborazione di ...
www.consorzioformaweb.it Titolo Presentazione / Data / Confidenziale / Elaborazione di ...