java2 esercitazioni del corso di sistemi informativi marina mongiello [email protected]
TRANSCRIPT
![Page 2: Java2 Esercitazioni del corso di Sistemi Informativi Marina Mongiello mongiello@poliba.it](https://reader038.vdocumenti.com/reader038/viewer/2022102520/5542eb4c497959361e8b9f1a/html5/thumbnails/2.jpg)
Java nella programmazione di sistemi informativi su web
Java fornisce tecnologie utili per la programmazione di applicazioni multi-tier Internet-based:
Livello Interfaccia utente Applet Componenti Java Beans
Livello Comunicazione Remote Method Invocation RMI
Livello Middleware Servlet Java Server Pages JSP
Livello Dati Java DataBase Connectivity JDBC
![Page 3: Java2 Esercitazioni del corso di Sistemi Informativi Marina Mongiello mongiello@poliba.it](https://reader038.vdocumenti.com/reader038/viewer/2022102520/5542eb4c497959361e8b9f1a/html5/thumbnails/3.jpg)
La classe Applet
• E’ definita nel package• javax.applet
• Nella classe• javax.applet.JApplet
![Page 4: Java2 Esercitazioni del corso di Sistemi Informativi Marina Mongiello mongiello@poliba.it](https://reader038.vdocumenti.com/reader038/viewer/2022102520/5542eb4c497959361e8b9f1a/html5/thumbnails/4.jpg)
Ciclo di vita di un’applet
• Init• Start• Stop• Destroy
![Page 5: Java2 Esercitazioni del corso di Sistemi Informativi Marina Mongiello mongiello@poliba.it](https://reader038.vdocumenti.com/reader038/viewer/2022102520/5542eb4c497959361e8b9f1a/html5/thumbnails/5.jpg)
Servlet
• Estende le funzionalità di un server web• È usata per realizzare comunicazioni basate sul protocollo HTTP• È definita nei packages
• javax.servlet e javax.servlet.http• I packages servlet definiscono due classi astratte che implementano
l’interfaccia Servlet• GenericServlet nel package javax.servlet• HttpServlet nel package javax.servlet.http
• Forniscono per default l’implementazione di tutti i metodi dell’interfaccia Servlet
• In generale, una servlet estende o GenericServlet oppure HttpServlet
![Page 6: Java2 Esercitazioni del corso di Sistemi Informativi Marina Mongiello mongiello@poliba.it](https://reader038.vdocumenti.com/reader038/viewer/2022102520/5542eb4c497959361e8b9f1a/html5/thumbnails/6.jpg)
Servlet
• Tutte le servlet devono implementare l’interfaccia Servlet
• I metodi dell’interfaccia sono richiamati automaticamente dal server su cui la servlet è installata (servlet container)
![Page 7: Java2 Esercitazioni del corso di Sistemi Informativi Marina Mongiello mongiello@poliba.it](https://reader038.vdocumenti.com/reader038/viewer/2022102520/5542eb4c497959361e8b9f1a/html5/thumbnails/7.jpg)
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
![Page 8: Java2 Esercitazioni del corso di Sistemi Informativi Marina Mongiello mongiello@poliba.it](https://reader038.vdocumenti.com/reader038/viewer/2022102520/5542eb4c497959361e8b9f1a/html5/thumbnails/8.jpg)
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
![Page 9: Java2 Esercitazioni del corso di Sistemi Informativi Marina Mongiello mongiello@poliba.it](https://reader038.vdocumenti.com/reader038/viewer/2022102520/5542eb4c497959361e8b9f1a/html5/thumbnails/9.jpg)
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.
![Page 10: Java2 Esercitazioni del corso di Sistemi Informativi Marina Mongiello mongiello@poliba.it](https://reader038.vdocumenti.com/reader038/viewer/2022102520/5542eb4c497959361e8b9f1a/html5/thumbnails/10.jpg)
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
![Page 11: Java2 Esercitazioni del corso di Sistemi Informativi Marina Mongiello mongiello@poliba.it](https://reader038.vdocumenti.com/reader038/viewer/2022102520/5542eb4c497959361e8b9f1a/html5/thumbnails/11.jpg)
Interfaccia HttpServletRequest
Interfaccia HttpServletResponse
Classe HttpServlet
implementa
doDeletedoOptiondoPutdoTrace
addCookiesgetOutputStreamgetWritersetContentType
getParametergetParameterNamegetCookiesgetSession
![Page 12: Java2 Esercitazioni del corso di Sistemi Informativi Marina Mongiello mongiello@poliba.it](https://reader038.vdocumenti.com/reader038/viewer/2022102520/5542eb4c497959361e8b9f1a/html5/thumbnails/12.jpg)
Sviluppare una servlet
Affinchè una servlet possa essere eseguita è necessario che il server sia attivo
Web Server che supportano le servlet• Apache HTTP Server• WWW Jigsaw Web Server• Microsoft Internet Information Server IIS• Netscape iPlanet Application Server• IBM WebSphere Application Server• BEA WebLogic application server
![Page 13: Java2 Esercitazioni del corso di Sistemi Informativi Marina Mongiello mongiello@poliba.it](https://reader038.vdocumenti.com/reader038/viewer/2022102520/5542eb4c497959361e8b9f1a/html5/thumbnails/13.jpg)
Esempio: Tomcat Apache server
É contenuto nel progetto jakarta recuperabile all’indirizzo jakarta.apache.org
Configurazione del server tomcat• Definire le variabili di ambiente JAVA_HOME e
TOMCAT_HOME che individuano rispettivamente la directory contenente l’installazione di java ( per esempio C:\jdk1.3.1) e la directory che contiene l’installazione di Tomcat
![Page 14: Java2 Esercitazioni del corso di Sistemi Informativi Marina Mongiello mongiello@poliba.it](https://reader038.vdocumenti.com/reader038/viewer/2022102520/5542eb4c497959361e8b9f1a/html5/thumbnails/14.jpg)
Configurazione del server
Avvio del server tomcat• dalla directory bin di jakarta eseguire il batch
tomcat.bat• tomcat è eseguito sulla porta 8080• è possibile controllare che il server sia attivo sulla
URL http://localhost:8080 o equivalemente all’indirizzo http:// 127.0.0.1:8080/
Per interrompere l’esecuzione di tomcat eseguire• tomcat stop
![Page 15: Java2 Esercitazioni del corso di Sistemi Informativi Marina Mongiello mongiello@poliba.it](https://reader038.vdocumenti.com/reader038/viewer/2022102520/5542eb4c497959361e8b9f1a/html5/thumbnails/15.jpg)
Struttura delle directory
Le applicazioni web sono contenute nella sottodirectory webapps di jakarta-tomcat 3.2.3
Ciascuna applicazione sarà contenuta in una sottodirectory di webapps
Web-inf contiene il file descrittore web.xml Web-inf/classes contiene
• le classi relative alle servlet e altre classi che supportano I file usati in una applicazione web.
• la directory relativa al package nel caso in cui le classi siano parte di un package
• Web-inf/lib contiene• I file jar che contengono le classi servlet ed altre classi di
supporto
![Page 16: Java2 Esercitazioni del corso di Sistemi Informativi Marina Mongiello mongiello@poliba.it](https://reader038.vdocumenti.com/reader038/viewer/2022102520/5542eb4c497959361e8b9f1a/html5/thumbnails/16.jpg)
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!
![Page 17: Java2 Esercitazioni del corso di Sistemi Informativi Marina Mongiello mongiello@poliba.it](https://reader038.vdocumenti.com/reader038/viewer/2022102520/5542eb4c497959361e8b9f1a/html5/thumbnails/17.jpg)
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 client7: protected void doGet(HttpServletRequest request, 8: HttpServletResponse response)9: throws ServletException, IOException10: { 11: response.setContentType("text/html");12: PrintWriter out=response.getWriter();
![Page 18: Java2 Esercitazioni del corso di Sistemi Informativi Marina Mongiello mongiello@poliba.it](https://reader038.vdocumenti.com/reader038/viewer/2022102520/5542eb4c497959361e8b9f1a/html5/thumbnails/18.jpg)
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
![Page 19: Java2 Esercitazioni del corso di Sistemi Informativi Marina Mongiello mongiello@poliba.it](https://reader038.vdocumenti.com/reader038/viewer/2022102520/5542eb4c497959361e8b9f1a/html5/thumbnails/19.jpg)
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
![Page 20: Java2 Esercitazioni del corso di Sistemi Informativi Marina Mongiello mongiello@poliba.it](https://reader038.vdocumenti.com/reader038/viewer/2022102520/5542eb4c497959361e8b9f1a/html5/thumbnails/20.jpg)
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
![Page 21: Java2 Esercitazioni del corso di Sistemi Informativi Marina Mongiello mongiello@poliba.it](https://reader038.vdocumenti.com/reader038/viewer/2022102520/5542eb4c497959361e8b9f1a/html5/thumbnails/21.jpg)
21: // intestazione del documento22: out.println("<head>");23: out.println("<title> Prima servlet</title>");24: out.println("</head>");25:26: // corpo del documento xhtml27: out.println("<body>");28: out.println("<h1> Welcome to Servlet! </h1>");29: out.println("</body>");30:31: // fine del documento32: out.println("</html>");33: out.close(); // chiude lo stream34: }35: }
![Page 22: Java2 Esercitazioni del corso di Sistemi Informativi Marina Mongiello mongiello@poliba.it](https://reader038.vdocumenti.com/reader038/viewer/2022102520/5542eb4c497959361e8b9f1a/html5/thumbnails/22.jpg)
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
![Page 23: Java2 Esercitazioni del corso di Sistemi Informativi Marina Mongiello mongiello@poliba.it](https://reader038.vdocumenti.com/reader038/viewer/2022102520/5542eb4c497959361e8b9f1a/html5/thumbnails/23.jpg)
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>
![Page 24: Java2 Esercitazioni del corso di Sistemi Informativi Marina Mongiello mongiello@poliba.it](https://reader038.vdocumenti.com/reader038/viewer/2022102520/5542eb4c497959361e8b9f1a/html5/thumbnails/24.jpg)
import javax.servlet.*;import javax.servlet.http.*;import java.io;public class WelcomeServlet extends HttpServlet {
// gestisce le richieste "post" dai clientprotected void doPost(HtpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException { String firstName = request.getParameter("firstname"); response.setContentType("text/html"); PrintWriter out=response.getWriter();
![Page 25: Java2 Esercitazioni del corso di Sistemi Informativi Marina Mongiello mongiello@poliba.it](https://reader038.vdocumenti.com/reader038/viewer/2022102520/5542eb4c497959361e8b9f1a/html5/thumbnails/25.jpg)
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
![Page 26: Java2 Esercitazioni del corso di Sistemi Informativi Marina Mongiello mongiello@poliba.it](https://reader038.vdocumenti.com/reader038/viewer/2022102520/5542eb4c497959361e8b9f1a/html5/thumbnails/26.jpg)
// 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>");
![Page 27: Java2 Esercitazioni del corso di Sistemi Informativi Marina Mongiello mongiello@poliba.it](https://reader038.vdocumenti.com/reader038/viewer/2022102520/5542eb4c497959361e8b9f1a/html5/thumbnails/27.jpg)
// 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
}}
![Page 28: Java2 Esercitazioni del corso di Sistemi Informativi Marina Mongiello mongiello@poliba.it](https://reader038.vdocumenti.com/reader038/viewer/2022102520/5542eb4c497959361e8b9f1a/html5/thumbnails/28.jpg)
<?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><form action = "/welcome3" method = "post">
<p><label> Type your name and press the Submit button<br> <input type = "text" name = "firstname"/><input type = "submit" value = "Submit"/>
</label></p></form>
</body></html>
Documento XHTML