Java Servlet. Davide Taibi.

Documenti analoghi
SERVLET & JSP DISPENSE

Corso di Applicazioni Telematiche

Note pratiche sullo sviluppo di servlet (I)

Programmazione server-side: Java Servlet

Un contatore di accessi

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

Introduzione alla programmazione Http lato server in Java

Tener traccia del client

Servlet API. Programmazione in Ambienti Distribuiti A.A

EVOLUZIONI DEL CALCOLO WEB. DIREZIONI CORRENTI di EVOLUZIONE Sicuramente il campo applicativo più ampio di dimensioni è il sistema Web stesso

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

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

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

Introduzione a Java Servlet Technology

Architetture Web: un ripasso

Laboratorio di Basi di Dati e Web

Laboratorio di Basi di dati

Alma Mater Studiorum Università di Bologna. Scuola di Ingegneria e Architettura. Tecnologie Web T. Esercitazione Riepilogo

Laboratorio di reti II: Servlet

Alma Mater Studiorum Università di Bologna. Scuola di Ingegneria e Architettura. Tecnologie Web T. Esercitazione 09 Riepilogo

Laboratorio di Programmazione di Rete

UNIVERSITÀ DEGLI STUDI DI TORINO

Servlet. Possibili usi di una Servlet. Servlet e Servlet Container. Introduzione alle Servlet

Lezione di Basi di Dati 1 18/11/ TECNOLOGIE PER IL WEB: CGI - AJAX SERVLETS & JSP

Gestire le sessioni con le Servlet

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

Tecnologie di Sviluppo per il Web

Capitolo 7. Soluzione: <P align= center > Form di invio nome e cognome </P> <FORM action= nomecognome.exe method= post >

Laboratorio di sistemi Prima Web Application JSP [Java]

Concetto di sessione di navigazione. I cookie. Gestione della sessione di navigazione. Introduzione alle Servlet 2

Trasformare una Java (Console) Application in una Web Application (con utilizzo di un database MySQL)

Laboratorio di Programmazione di Rete

Sviluppo di Applicazioni Web con Java 2 Enterprise Edition

Sviluppo di Applicazioni Web con Java 2 Enterprise Edition


Java Servlet & Java Server Pages (una semplice introduzione) SAPIENZA Università di Roma Corso di Progetto di Applicazioni Software

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

Stateless Session Bean

Tomcat struttura delle directory

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

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

Svantaggi delle servlet

Applicazione distribuita basata su Web accessibile via Web per mezzo di una Intranet o attraverso Internet

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

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

Corso di Algoritmi e Strutture Dati con Laboratorio. The JCF(continua): L interfaccia Map

JAVA SERVLET: I filtri

D B M G Il linguaggio HTML

Server-side Programming: Java servlets Parte II

LA SACRA BIBBIA: OSSIA L'ANTICO E IL NUOVO TESTAMENTO VERSIONE RIVEDUTA BY GIOVANNI LUZZI

Quando mi collego ad alcuni servizi hosting ricevo un messaggio relativo al certificato di protezione del sito SSL, come mai?

Architetture Web I Server Web e gli Standard della Comunicazione

Tecnologie di Sviluppo per il Web

Programmazione Java Avanzata. MVC Model, View,, Controller. Ing. Gianluca Caminiti

@2011 Politecnico di Torino 1

Laboratorio di reti II: Java Server Pages

REGISTRATION GUIDE TO RESHELL SOFTWARE

RESTful Services. Sistemi Informativi Aziendali A.A. 2012/2013

Università degli Studi di Modena e Reggio Emilia. Facoltà di Ingegneria Reggio Emilia CORSO DI TECNOLOGIE E APPLICAZIONI WEB.

Architetture Web I Server Web e gli Standard della Comunicazione

Le tecnologie software Internet

Servlet. L architettura Java J2EE

Le tecnologie software Internet

I CAMBIAMENTI PROTOTESTO-METATESTO, UN MODELLO CON ESEMPI BASATI SULLA TRADUZIONE DELLA BIBBIA (ITALIAN EDITION) BY BRUNO OSIMO

REGISTRATION. Area Ricerca

Copyright 2012 Binary System srl Piacenza ITALIA Via Coppalati, 6 P.IVA info@binarysystem.eu

Capitolo 7. Sviluppi futuri. 7.1 Generazione automatica di pagine WML

UNIVERSITÀ DEGLI STUDI DI TORINO

Università degli Studi di Modena e Reggio Emilia. Facoltà di Ingegneria Reggio Emilia CORSO DI TECNOLOGIE E APPLICAZIONI WEB.

Verso l architettura MVC-2 Java Server Pages (JSP)

Accesso Web a Data Base

Università degli studi dell Aquila. Sistemi di elaborazione delle informazioni

How to register online for exams (Appelli) Version updated on 23/10/2017

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

Progetto di Gestione Documenti in Ambiente Web

LA SACRA BIBBIA: OSSIA L'ANTICO E IL NUOVO TESTAMENTO VERSIONE RIVEDUTA BY GIOVANNI LUZZI

Anno Accademico Corso di Tecnologie Web Web Application: Servlet. Universita degli Studi di Bologna - Facolta di Ingegneria

SERVLET & JSP DISPENSE

LA SACRA BIBBIA: OSSIA L'ANTICO E IL NUOVO TESTAMENTO VERSIONE RIVEDUTA BY GIOVANNI LUZZI

Modulo o Form in Html

Contenuti dinamici. Tecnologie per la generazione di contenuti dinamici. Livelli logici di un servizio Web-based. Contenuti dinamici (2) based

Resources and Tools for Bibliographic Research. Search & Find Using Library Catalogues

Downloading and Installing Software Socio TIS

Servlet. Nicola Gessa

Architetture Web parte 2

Soluzione 1: controller per la pagina di dettaglio delle categorie

AJAX (Asynchronous JavaScript and XML)

Verso l architettura MVC-2 Java Server Pages (JSP)

Architettura MVC-2 ALBERTO BELUSSI ANNO ACCADEMICO 2009/2010. Verso l architettura MVC-2

Canti Popolari delle Isole Eolie e di Altri Luoghi di Sicilia (Italian Edition)

WELCOME. Go to the link of the official University of Palermo web site Click on the box on the right side Login unico

Sicurezza delle applicazioni web: protocollo HTTP

Laboratorio di Basi di Dati e Web

Lo sniffer. questo sconosciuto! Corso di Reti di Calcolatori Architetture e Servizi A.A. 2010/11. Introduzione allo sniffing TCP

A.A. 2006/2007 Laurea di Ingegneria Informatica. Fondamenti di C++ Horstmann Capitolo 3: Oggetti Revisione Prof. M. Angelaccio

Architettura MVC-2. Alberto Belussi. Anno accademico 2006/2007

User Guide Guglielmo SmartClient

Java Server Pages. Corso di Applicazioni Telematiche. A.A Lezione n.18 Prof. Roberto Canonico

Progetto di reti di Calcolatori e Sistemi Informatici

Applicazioni Web. Applicazione Web

Transcript:

Java Servlet Davide Taibi davide.taibi@uninsubria.it 2010

Sommario Servlet Sessioni Cookies 2 Davide Taibi

Servlet Moduli scritti in Java che estendono le funzionalità dei web server. Usati al posto di script CGI e risiedono sul server Cosa fanno? Consentono di generare pagine web dinamiche facili da scrivere e veloci da visualizzare Si può interagire con un DB remoto attraverso il protocollo HTTP con i soliti metodi POST e GET Vantaggio Essendo scritti in Java possono essere inseriti nella maggior parte dei web server (java è indipendente dalla piattaforma)

alcuni commenti generali Il problema della sicurezza è superato grazie a un Securiy Manager simile quello degli applet Si presentano come un applicazione java in esecuzione su una JVM residente su un sever di solito essa esegue delle operazioni che producono un codice HTML inviato al client

Servlet Supportano richieste multiple (es. conferenze online) Aggiornano, eliminano o consultano dati contenuti in un DB tramite protocollo TCP/IP Applicazioni di E-Commerce Fare dei forward ad altri server per bilanciare i carichi di lavoro

Vantaggi delle servlet Efficienza. Le servlet vengono istanziate e caricate una volta soltanto. Tutte le successive chiamate da parte di nuovi client vengono gestite creando dei nuovi thread che si prendono carico del processo di comunicazione. Portabilità: Grazie alla tecnologia Java, le servlet "portate" da una piattaforma ad un'altra senza particolari problemi. Persistenza: Dopo il caricamento, una servlet rimane in memoria mantenendo intatte determinate informazioni (come la connessione ad un data base) anche alle successive richieste. Gestione delle sessioni: Come è noto il protocollo HTTP è un protocollo stateless (senza stati) e, pertanto non in grado di ricordare i dettagli delle precedenti richieste provenienti da uno stesso client. Le servlet sono in grado di superare questa limitazione.

Per utilizzare i servlet bisogna E la libreria opzionale (javax sta per Standard Extension) di Java (J2EE) che permette di realizzare classi Java, caricate dinamicamente, per espandere le funzionalità di un Web server Installare le classi servlet del package javax

Architettuura del package javax.servlet Servlet interface: dichiara I metodi della servlet (init, service, etc.) GenericServlet implements Servlet HttpServlet (subclass) aggiunge funzionalita specifiche HTTP

Ciclo di vita di una servlet 1. A server loads and initializes the servlet New thread created for each client. 2. The servlet handles zero or more client requests 3. The server terminates the servlet

Ciclo di vita di una servlet Il server in risposta ad una richiesta per una servlet ne effettua il caricamento in memoria void init (ServletConfig config) è avviato automaticamente da server prima che la servlet possa gestire la richiesta void service (ServletRequest request, ServletResponse response) gestisce tutte le richieste rceve le richieste le elabora e invia le risposte al client è chiamato dal server per rispondere ad una richiesta eseguito in un nuovo thread per ogni richiesta void destroy( ) chiamato al termine dell esecuzione della servelt per rilasciare le risorse usate dalla servlet

Classe HttpServlet Generalmente le Servlet web-based estendono la classe HttpServlet usano il metodo service per distinguere tra le richieste ricevute da un client (web browser) Le richieste (metodi) HTTP sono di tipo: get per richiedere informazioni dal server, generalmente documenti HTML o immagini post per inviare dati al server generalmente informazioni relative ad autenticazione o data inseriti in un form Usa i metodi doget e dopost rispettivamente per rispondere alle richieste corrispondenti

HttpServletRequest Interface Le chiamate a dopost e doget per una HttpServlet ricevono un oggetto che implementa l interfaccia HttpServletRequest. Il Web server che esegue la servlet crea un oggetto HttpServletRequest e lo passa al metodo service.

HttpServletResponse Interface Il web server che esegue la servlet crea un oggetto HttpServletResponse che passa al metodo service della servlet che a sua volta lo passa a doget o dopost

Sviluppare una servlet Affinchè una servlet possa essere eseguita è necessario che il server sia attivo Web Server che supportano le servlet Apache Tomcat JBoss Jetty

Esempio n.1: costruzione di una servlet La servlet genera un documento XHTML in risposta ad una richesta di tipo get, che consente di recuperare il contenuto di una specifica URL Generalmente il contenuto è di tipo HTML o XHTML Il documento conterrà la sola stringa Welcome to Servlet!

1: import javax.servlet.*; 2: import javax.servlet.http.*; 3: import java.io; 4: 5: public class WelcomeServlet extends HttpServlet { 6: // gestisce le richieste "get" dai client 7: protected voiddoget(httpservletrequest request, 8: HttpServletResponse response) 9: throws ServletException, IOException 10: { 11: response.setcontenttype("text/html"); 12: PrintWriter out=response.getwriter();

Descrizione del contenuto della servlet Le linee 1,2,3 consentono di includere I packages javax.servlet a javax.servelet.http che contenogno le classi per gestire la richiesta get e il package java.io La classe WelcomeServlet deve estendere HttpServlet ServletException consente di gestire le eccezioni

Overloading del metodo doget Il metodo doget riceve come parametri gli oggetti request e response rispettivamente delle classi HttpServletRequest HttpServletResponse setcontenttype: metodo di HttpServletRequest usato per specificare il tipo dei dati da inviare in risposta al client Out: oggetto della classe PrintWriter Ottenuto mediante il metodo getwriter dell oggetto response Utilizzato per inviare la risposta al client

13: // invia la pagina xhtml al client 14: // avvia il documento xhtml 15: out.println("<?xml version = \"1.0\"?>"); 16: out.println("<!doctype html PUBLIC \ //W3C//DTD " + 17: "XHTML 1.0 Strict//EN\" \"http://www.w3.org"+ 18: "/TR/xhtml1/DTD/xhtml1-strict.dtd\">"); 19: 20: out.println("<html xmlns =\"http://www.w3.org/1999/xhtml\">"); Istruzioni per la creazione del documento XHTML

21: // intestazione del documento 22: out.println("<head>"); 23: out.println("<title> Prima servlet</title>"); 24: out.println("</head>"); 25: 26: // corpo del documento xhtml 27: out.println("<body>"); 28: out.println("<h1> Welcome to Servlet! </h1>"); 29: out.println("</body>"); 30: 31: // fine del documento 32: out.println("</html>"); 33: out.close(); // chiude lo stream 34: } 35: }

Documento XHTML il documento contiene un form per richiamare la servlet. form action specifica la URL che richiama la servlet welcome1 form method indica che il browser invia una richiesta get al server la richiesta richiama il metodo doget della servlet

Documento XHTML <?xml version = 1.0?> <!DOCTYPE html PUBLIC "-//w3c//dtd xhtml 1.0 Strict//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> <!-- Prima Servlet --> <html xmlns = "http://www.w3.org/1999/xhtml"> <head> <title> Gestione di una richesta HTTP di tipo Get </title> </head> <body> <form action = "/welcome1" method = "get"> <p><label> Click the button to invoke the servlet <input type = "submit" value = " Get HTML Document"/> </label></p> </form> </body> </html>

Metodo dopost Una richiesta post è usata per inviare dati da un form HTML ad un gestore di form server side che possa elaborare i dati

import javax.servlet.*; import javax.servlet.http.*; import java.io; public class WelcomeServlet extends HttpServlet { // gestisce le richieste "post" dai client protected void dopost(htpservletrequest request, HttpServletResponse response) throws ServletException, IOException { String firstname = request.getparameter("firstname"); response.setcontenttype("text/html"); PrintWriter out=response.getwriter();

// invia la pagina xhtml al client // avvia il documento xhtml out.println("<?xml version = \"1.0\"?>"); out.println("<!doctype html PUBLIC \"-//W3C//DTD " + "XHTML 1.0 Strict//EN\" \"http://www.w3.org"+ "/TR/xhtml1/DTD/xhtml1- strict.dtd\">"); out.println("<html xmlns = \"http://www.w3.org/1999/xhtml\">"); // intestazione del documento out.println("<head>"); out.println("<title> Gestione di una richesta post con invio di dati</title>"); out.println("</head>");

// corpo del documento xhtml out.println("<body>"); out.println("<h1> Hello!" + firstname + ",<br />"); out.println("welcome to Servlet! </h1>"); out.println("</body>"); } // fine del documento out.println("</html>"); out.close(); // chiude lo stream }

<?xml version = 1.0?> <!doctype HTML public "-//w3c//dtd xhtml 1.0 Strict//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> <!-- Terza Servlet --> <html xmlns = "http://www.w3.org/1999/xhtml"> <head> <title> Gestione di una richesta Post con invio di dati </title> </head> <body> button "firstname"/> </body> </html> Documento XHTML <form action = "/welcome3" method = "post"> <p><label> Type your name and press the Submit </form> <br> <input type = "text" name = <input type = "submit" value = "Submit"/> </label></p>

Session Tracking Servlets in Duke s Bookstore BookStoreServlet: Forward to main page CatalogServlet: Show all books and allow selection BookDetailServlet: Show details of a book and allow selection ShowCartServlet: Show shopping cart CashierServlet: Check out

Session Tracking Motivation In a Bookstore, suppose a client has selected several books. (Do this and check the page produced by CatalogServlet.) Problem 1: The client requests ShowCartServlet to show the books in his/her shopping cart. Question: How does ShowCartServlet know the selected books? How communications between servlets are facilitated? Problem 2: The client decides to leave the bookstore and visit some other pages. Question: When the client comes back and makes further requests, how do the servlets know the books that have been selected previously? How come servlets can remember things?

Session Tracking Session tracking is a mechanism that servlets use to maintain state about a series of requests From the same user (that is, requests originating from the same browser) Across some period of time Solution to Problem 2: Servlets use sessions as notebook and hence can remember Sessions are shared among the servlets accessed by the same client. Solution to Problem 1. Servlets communicate via sessions.

Session Tracking Session is associated with a request. To use session, Get session from HttpServletRequest request: HttpSession getsession(boolean create) HttpSession mysession = request.getsession(boolean create); Case 1: create==true Return the associated session if exists Otherwise, create a new session, associate it with the request, and return the session Case 2: create==false Return the associated session if exists Otherwise, return null. Note: get session before accessing response streams.

Session Tracking Store/retrieve information to/from HttpSession object. public void setattribute(string name, Object obj) public Object getattribute(string name). Invalidate the session (optional). Manually: Session.invalidate() Automatically when no request after certain time. void setmaxinactiveinterval(int interval) o Specifies the time, in seconds, between client requests before the servlet container will invalidate this session. A negative time indicates the session should never timeout.

public class HelloAgainServlet extends HttpServlet { public void doget(httpservletrequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setcontenttype("text/html"); HttpSession session = req.getsession(true); // get session if exists, does not create PrintWriter out = resp.getwriter(); out.println("<html><body><h1>count me!</h1><hr>"); name = req.getparameter("name"); if (session == null) { out.println("welcome," + name + ", I don't believe we've met!"); session = req.getsession(true); // create session session.setattribute("count", new Integer(1)); } else { int n=((integer)session.getattribute("count")).intvalue(); out.println("you again? " + name); out.println("that makes " + (n + 1) + " visits!"); session.setattribute("count", new Integer(n + 1)); } out.println("</body></html>"); out.close(); } } private String name = "";

Session Tracking The program presented on the previous slide has a bug. The fix is to change HttpSession session = req.getsession(true); to HttpSession session = req.getsession(false); Some interesting observations: After you test the correct version, go back and test the original version. It works! Why?

Session Tracking - Exercise Design the following servlets CatalogServlet.java ShowCartServlet.java

Cookies Cookies: objects containing a little bit information Made at server Sent to client for storage Retrieved by server when client connects again (Part of HTTP, supported by Java) Cookies can be used for Session tracking. HttpSession implemented using cookies. Persistent state. E.g. name, address, email address. When user access some servlets again, no need to provide such information one more time.

Cookies Details: Each cookie is a name=value pair. Servlets create cookies and send them to clients by adding fields to HTTP response headers. Client browser is expected to support 20 cookies for each Web server, 300 cookies total, and may limit cookie size to 4 KB each. Clients automatically return cookies by adding fields to HTTP request headers. cookies can be retrieved from the request headers NOTE: Cookies shared among servlets on the server accessed by the same client.

Cookies Cookies are objects of class javax.servlet.http.cookie To send a cookie, 1. Create a Cookie object Cookie c = new Cookie(name, value); 2. Set attributes if necessary c.setmaxage(30); // expire after 30 seconds 3. Send the cookie response.addcookie(c); To get information from a cookie, 1. Retrieve all the cookies from the user's request Cookie[] cookies = request.getcookies(); 2. Find the cookie that you are interested in and get its value for (int i = 0; i < cookies.length; i++) { String name = cookies[i].getname(); String value = cookies[i].getvalue(); }

public void doget(httpservletrequest request, HttpServletResponse response) throws IOException, ServletException { response.setcontenttype("text/html"); PrintWriter out = response.getwriter(); out.println("cookies received from client:<br>"); Cookie[] cookies = request.getcookies(); if(cookies!=null){ for (int i = 0; i < cookies.length; i++) { Cookie c = cookies[i]; String name = c.getname(); String value = c.getvalue(); out.println(name + " = " + value + "<br>"); } } out.println("<br>cookies sent to client:><br>"); String name = request.getparameter("cookiename"); String value = request.getparameter("cookievalue"); if (!name.isempty() &&!value.isempty()) { Cookie c = new Cookie(name, value); c.setmaxage(180); response.addcookie(c); out.println(name + " = " + value + "<br>"); }} // CookieServlet.java

Cookies Cookies not shared between different clients accessing the same server. Try to Access the following from two different browsers http://localhost:8080/servlet/cookieservlet?cookiename=cookie1&cook ievalue=a1 Cookies are not shared between different servers accessed by the same client Try: http://localhost:8080/servlet/cookieservlet?cookiename=monkey&c ookievalue=a http://localhost:8080/servlet/cookieservlet?cookiename=scpu8&coo kievalue=a