Java: la libreria delle classi Applet

Java: la libreria delle classi
• Applet
– anatomia di un applet
– cenni di html
• La libreria JDBC per l’accesso ai database
– il package java.sql
213
Gianpaolo Cugola
Applet
• Un applet è una applicazione Java che ha una
forma particolare che le permette di essere
eseguita da un JVM integrata in un browser web
• Un applet è costruita creando una sottoclasse
della classe di libreria java.applet.Applet
• Il tag html <applet> permette di specificare
che una certa applet deve essere visualizzata
all’interno di una pagina html
Gianpaolo Cugola
Gianpaolo Cugola
214
Applet: schema di funzionamento
Il codice html e il codice dell’applet
vengono scaricati dalla macchina server
sul client sfruttando il protocollo http
browser
applet code
(class file)
HTTP server
html code
client
215
Gianpaolo Cugola
La classe java.applet.Applet
• La classe java.applet.Applet esporta i seguenti metodi
pubblici:
– public void init()
• invocato dal browser quando la pagina che contiene l’applet viene aperta per la
prima volta
– public void start()
• invocato dal browser quando si entra nella pagina che contiene l’applet
– public void stop()
• invocato dal browser quando si esce dalla pagina che contiene l’applet
– public void destroy()
• invocato dal browser quando si esce definitivamente dalla pagina che contiene
l’applet
• Questi metodi possono essere ridefiniti nelle sottoclassi per
attribuire alle proprie applet il comportamento desiderato
Gianpaolo Cugola
Gianpaolo Cugola
216
La classe java.applet.Applet
• Le applet non hanno accesso all’interfaccia a
carattere
• La classe java.applet.Applet è
sottoclasse della classe java.awt.Panel. Può
quindi contenere oggetti grafici per l’input/ output
con l’utente
217
Gianpaolo Cugola
Applet e pagine html
• Il tag applet viene utilizzato per indicare al browser che
deve visualizzare un applet all’interno di una pagina html
• Esempio:
<applet code="Clock" width=50 height=50>
<param name=Color value="blue">
</applet>
• Il metodo:
public String getParameter(String name)
per l’accesso ai parametri specificati nel codice html
Gianpaolo Cugola
Gianpaolo Cugola
218
Applet: un esempio
219
Gianpaolo Cugola
Applet: un esempio - codice Java
import java.awt.*;
public class ProvaApplet ex tends java.applet.Applet {
private TextArea ta;
private Button b;
public void init() {
ta=new TextArea(20,80); b=new Button("Press here");
setLayout(new BorderLayout()); add("Center",ta);
add("North",b);
resize(400,200);
}
public void start() {ta.appendText("Chiamato metodo start\n");}
public void stop() {ta.appendText("Chiamato metodo stop\n");}
public void destroy() {ta.appendText("Chiamato metodo
destroy\n");}
public boolean handleEven t(Event evt) {
if(evt.target==b) {ta.appendText("Premuto bottone\n"); return
true;}
else return false;
}
}
Gianpaolo Cugola
Gianpaolo Cugola
220
Applet: un esempio - codice html
<HTML>
<HEAD>
<TITLE>Un esempio di applet</TITLE>
</HEAD>
<BODY>
<H2>Un esempio di applet</H2>
<P>
prova a premere il bottone...
<P>
<APPLET code="ProvaApplet.class" width=400 height=200>
</APPLET>
</BODY>
</HTML>
221
Gianpaolo Cugola
Applet: esercizio
• Si scriva un applet con un bottone che, premuto,
che apre una finestra esterna al browser con un
messaggio
Gianpaolo Cugola
Gianpaolo Cugola
222
Applet: vincoli
• Le applet sono soggette ad una serie di vincoli di
sicurezza che variano da browser a browser
• Attualmente (Netscape 3 e Internet Explorer 3)
un applet:
– non può accedere al file system
– non può lanciare applicazioni esterne
– può aprire connessioni tcp/ ip solo con la macchina
dalla quale è stata scaricata
223
Gianpaolo Cugola
Applet come applicazioni
• E’ possibile scrivere una classe che sia tanto un
applet quanto un applicazione “stand-alone”
• Esempio:
public class ProvaApplet ex tends java.applet.Applet {
private TextArea ta;
private Button b;
public static void main(String args[]) {
Frame f=new Frame("ProvaApplet");
ProvaApplet p=new ProvaApplet();
p.init(); p.start();
f.add(p); f.show(); f.p ack();
}
...
Gianpaolo Cugola
Gianpaolo Cugola
224
JDBC
• JDBC (Java DataBase Connectivity) è una libreria
per l’accesso a database SQL
• Permette di:
– aprire una connessione ad un database SQL
– inviare dei comandi SQL
– manipolare i risultati forniti dal database
• JDBC è un front-end per motori di accesso a
database diversi (es. ODBC)
• La libreria è costituita dal package java.sql
225
Gianpaolo Cugola
JDBC: cenni generali
• JDBC può sfruttare diversi “driver” per
implementare l’accesso vero e proprio al database
• Driver diversi possono avere caratteristiche
diverse in termini di capacità a connettersi in
maniera trasparente a database remoti
• Noi prenderemo in considerazione il solo driver
basato su ODBC (parte integrante del JDK di
Sun)
Gianpaolo Cugola
Gianpaolo Cugola
226
La classe java.sql.Connection
• La classe Connection rappresenta una
connessione ad un DB
• Una applicazione può avere più connessioni
aperte con lo stesso DB o con DB diversi
• Attraverso una connessione è possibile inviare
comandi SQL e ottenere indietro gli eventuali
risultati
227
Gianpaolo Cugola
Aprire una connessione
• Una connessione viene generalmente aperta invocando il metodo
getConnection della classe DriverManager come segue:
Connection con=DriverManager.getConnection("jdbc:odbc:Prova");
• Il parametro passato rappresenta l’URL del DB
• Un driver capace di gestire l’accesso al DB specificato deve essere
preliminarmente registrat o presso il DriverManager
– ciò si può ottenere con uno statement del tipo:
• Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
• NOTA:
– Nel caso di uso del driver ODBC, il DB deve essere preliminarmente
esportato ed associato ad un nome simbolico (pannello di controllo : 32 bit
ODBC)
Gianpaolo Cugola
Gianpaolo Cugola
228
URL JDBC
• Un URL JDBC ha la seguente forma generale:
jdbc:<subprotocol>:<subname>
• La parte “subprotocol” specifica il tipo del
protocollo di comunicazione da adottare
– da tale scelta dipende il tipo di driver JDBC che verrà
scelto
• La parte “subname” indica il DB al quale
collegarsi
– il formato di questa parte dipende dal protocollo usato
229
Gianpaolo Cugola
Invio di comandi SQL
• Attraverso una connessione è possibile invocare
normali statement SQL, prepared statement, o
calleable statement
• Un “prepared statement” è usato per invocare
una serie di statement “precompilati” che
differiscono solo per il valore di certi parametri
• Un “calleable statement” è usato per invocare una
procedura SQL definita all’interno del DB
Gianpaolo Cugola
Gianpaolo Cugola
230
Transazioni
• Per default una connessione è in modalità “auto
commit”
– ogni statement è automaticamente seguito da una
commit
• E’ possibile cambiare questo comportamento
(metodo setAutocommit della classe
Connection) e specificare esplicitamente
commit e rollback (metodi omonimi della classe
Connection)
231
Gianpaolo Cugola
Invio di comandi SQL standard
• Il metodo:
public Statement createStatement()
della classe Connection permette di creare uno
statement SQL privo di parametri
• La classe Statement: metodi principali:
public ResultSet executeQuery(String sql)
public int executeUpdate(String sql)
• La classe ResultSet esporta una serie di metodi per
accedere ai risultati di una query
Gianpaolo Cugola
Gianpaolo Cugola
232
ResultSet: un esempio
int i; String s; float f;
java.sql.Statement stmt = conn.createStatement();
ResultSet r = stmt.executeQuery(
"SELECT a, b, c FROM Table1");
while (r.next()) {
// print the values for the current row.
i = r.getInt("a");
s = r.getString("b");
f = r.getFloat("c");
System.out.println("ROW = " + i + " " + s + " "
+ f);
}
233
Gianpaolo Cugola
Invio di “prepared statement” SQL
• Il metodo:
public PreparedStatement prepareStatement(String sql)
della classe Connection permette di invocare
statement SQL con parametri
• La classe PreparedStatement: metodi principali:
– public ResultSet executeQuery()
– public int executeUpdate()
più una serie di metodi per impostare il valore dei
parametri
Gianpaolo Cugola
Gianpaolo Cugola
234
Invocazione di “calleable statement”
• Il metodo:
public CallableStatement prepareCall(String sql)
della classe Connection permette di invocare
procedure SQL salvate nel DB
• La classe CalleableStatement: è una sottoclasse
della classe PreparedStatement e fornisce tutti i
metodi di quest’ultima
235
Gianpaolo Cugola
JDBC: un esempio completo
import java.sql.*;
public class ProvaJDBC {
public static void main(String[] args) {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
DriverManager.setLoginTimeout(5);
Connection con= DriverManager.getConnection("jdbc:odbc:Prova");
Statement stat = con.createStatement();
ResultSet res = stat.executeQuery("SELECT T1.Nome, T2.Dim FROM
`Table1$` T1, `Table2$` T2 WHERE T1.Dip = T2.Dip");
while(res.next())
{System.out.println(res.getString(1)+" : "+res.getString(2));}
stat.close();
}catch(Exception e){e.printStackTrace();}
}
}
Gianpaolo Cugola
Gianpaolo Cugola
236