Java2
Esercitazioni del corso di Sistemi
Informativi
Marina Mongiello
[email protected]
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
La classe Applet
• E’ definita nel package
• javax.applet
• Nella classe
• javax.applet.JApplet
Ciclo di vita di un’applet
•
•
•
•
Init
Start
Stop
Destroy
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
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)
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)
•
•
void service (ServletRequest request, ServletResponse
response)
•
•
•
•
•
è avviato automaticamente da server prima che la servlet possa
gestire la richiesta
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
Interfaccia HttpServletResponse
Interfaccia HttpServletRequest
getParameter
getParameterName
getCookies
getSession
implementa
Classe HttpServlet
doDelete
doOption
doPut
doTrace
addCookies
getOutputStream
getWriter
setContentType
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
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
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
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
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:
2:
3:
4:
5:
import javax.servlet.*;
import javax.servlet.http.*;
import java.io;
public class WelcomeServlet extends HttpServlet {
6: // gestisce le richieste "get" dai client
7: protected void doGet(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>
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();
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
// 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
}
}
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">
<!-- 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>