Catalogo prodotti www liquoribelmonte it liquorificio.belmonte
Scienza e Ingegneria - WIS Web Information Systems · 2004. 1. 7. · 1 Basi di dati e WWW ©...
Transcript of Scienza e Ingegneria - WIS Web Information Systems · 2004. 1. 7. · 1 Basi di dati e WWW ©...
1
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Basi di dati e WWW
WISWeb Information Systems
2
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Obiettivi
Con l'avvento di Internet e' nata la necessita' di sviluppare sistemi informatici accessibili via Web.Gli utenti che utilizzano la rete hanno solitamente a disposizione un browser.Vedremo diversi modi per estrarre informazioni da una base di dati attraversoun browser.
3
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Connessione Browser/DBMS via Web
Browser
Come attuare la comunicazione?
? ?
INTERNET
DBMS
DB
4
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Scenario 1: Client Side
DBMS
DB
INTERNET
Browser
ProgrammaOspite API
5
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Scenario 1: Client Side
Il browser utilizza un programma che permettela connessione alla base di dati.Questa soluzione e' consigliabile solo quando:
Esiste un controllo sui client (ad esempio lapossibilita' di installare programmi adeguati su tutti i computer che accedono alla BD), oppureil carico di lavoro dell'applicazione e' di piccola entita'.
6
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Scenario 2: Server Side (ISAPI/NSAPI)
HTTPWeb
Server
INTERNET
Browser
DBMS
DB
API
7
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Scenario 2: Server Side (ISAPI/NSAPI)
E' possibile estendere il server Web, in modo che esso comunichi direttamente con il DBMS.Non esiste uno standard.Le estensioni sono difficili da programmare(gestione della concorrenza).I moduli "girano" insieme al Web server. Se iprimi hanno dei problemi, il secondo ne puo' risentire (devono essere sicuri e stabili).
8
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Scenario 2: Server Side (Application Server)
HTTPWeb
Server
INTERNET
Browser
APPLICATIONSERVER
DBMS
DB
9
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Scenario 2: Server Side (Application Server)
La parte dell'applicazione che comunica con ildatabase viene implementata al di fuori del server Web, con il quale comunica.Questo rende il sistema scalabile e sicuro.In teoria, questa soluzione puo' essere meno efficiente dell'utilizzo di ISAPI, in cui la DLL con l'estensione viene caricata una volta pertutte.Esistono comunque implementazioni molto efficienti di questa strategia, che vedremo.
10
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Basi di dati e WWW
Scenario 1:Client Side
11
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
JavaScript e Java
Una Applet Java puo' comunicare con un DBMS, direttamente o tramite altri programmi(ad esempio una servlet).Uno script JavaScript puo' accedere ai metodi dell'applet tramite DOM.
Browser
Applet Java
Script JS
connessione con DBMS
12
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Applet Java
E' possibile far comunicare Java e DBMStramite un'API (Application Programming Interface) chiamata JDBC.JDBC e' attualmente alle versioni 3.0 (gia' disponibile) e 4.0 (in preparazione).JDBC serve per connettersi e interrogare basi di dati indipendentemente dal DBMS e dalla piattaforma utilizzata dal client.
13
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Esempio di utilizzo di JDBC
DBMS
DB
INTERNET
Browser
Applet JavaJDBC API
14
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Applet JavaJDBC API
Class.forName("COM.cloudscape.core.RmiJdbcDriver");
DBMS
DB
INTERNET
Browser
Driver JDBC
Il driver specifico peril DBMS utilizzato viene
caricato.
15
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Connection con = DriverManager.getConnection(url,"","");
Applet JavaJDBC API
DBMS
DB
INTERNET
Browser
Driver JDBC
Attraverso l'interfacciaJDBC viene chiesto al
driver di aprire una connessione.
16
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Statement stmt = con.createStatement();
Applet JavaJDBC API
DBMS
DB
INTERNET
Browser
Driver JDBC SQL
Tramite la connessione,vengono eseguiti comandi SQL.
17
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
ResultSet rs = stmt.executeQuery("SELECT a FROM T");
Applet JavaJDBC API
DBMS
DB
INTERNET
Browser
Driver JDBC
In questo modo sono ottenutioggetti rappresentantii risultati delle query.
18
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
while (rs.next()) { System.out.println(rs.getString(1)); }
Applet JavaJDBC API
DBMS
DB
INTERNET
Browser
Driver JDBC
Dall'oggetto vengono estratte leinformazioni necessarie.
19
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
finally { if (con != null) con.close();}
Applet JavaJDBC API
DBMS
DB
Browser
Driver JDBC
Infine, la connessioneviene chiusa.
INTERNET
20
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Connessione verso altri host
ATTENZIONE. Un'applet (non autenticata e suinternet) puo' connettersi solo con l'host da cui e' stata scaricata.Nel caso di un DBMS installato su una macchina diversa, e' necessario un middleware sull'host di origine.
Host DBMS
DBAppletServlet
Web Server
21
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Snapshot: Applet connessa a Postgresql
22
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Basi di dati e WWW
Scenario 2:Server Side (con Application Server)
23
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Server Side in generale
Un interfaccia browser/DB lato server puo' essere realizzata tramite metodi e linguaggi diversi (ricordiamo CGI, Servlet, pagine PHP, ASP, JSP).Tutti questi metodi agiscono in generale nello stesso modo.
24
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Richiesta del browser
HTTPWeb
Server
INTERNET
Browser
Viene richiesta una pagina chenecessita di una connessione auna base di dati.
Queste pagine sono caratterizzateda un URL speciale, che puo'essere riconosciuto dal web server.Ad esempio, http://host/cgi-bin/
25
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Forward a un modulo specifico
HTTPWeb
Server
INTERNET
Browser
Modulo
Il web server riconosce che si trattadi una pagina speciale, e passa
la richiesta a un programma/moduloprecedentemente registrato.
26
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Elaborazione della richiesta
HTTPWeb
Server
INTERNET
Browser
Modulo
DBMS
DB
Il modulo processa la richiesta,connettendosi a una base di dati.
27
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Restituzione del risultato
HTTPWeb
Server
INTERNET
Browser
Modulo
DBMS
DB
Il risultato, solitamente scrittonello standard output del modulo,
viene inviato dal web serveral browser richiedente.
28
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
CGI
Un esempio ben noto e' quello delle CGI (Common Gateway Interface).Una CGI viene implementata tramite unprogramma esterno al Web server, scritto tipicamente in Perl, residente solitamente inuna directory virtuale /cgi-bin.
29
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
CGI
Esempio di invocazione di una CGI.<HTML><BODY><FORM action="cgi-bin/find.cgi" method="post">
Scrivi il nome dell'autore desiderato:<INPUT type="text" name="authorName" size="30"maxlength="50"><INPUT type="submit" value="Invia la richiesta"><INPUT type="reset" value="Nuova richiesta">
</FORM></BODY></HTML>
30
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
CGI
INTERNET
Browser find.cgi<1>
find.cgi<2>
find.cgi<3>
find.cgi<4>
find.cgi<5>
DBMS
DBHTTPWeb
Server
31
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Problemi delle CGI
Per ogni richiesta viene inizializzato un nuovo processo. Le performance di una CGI sono il vero punto debole di questa soluzione.Una CGI scritta male presenta rischi di sicurezza.E' necessario un interprete esterno (nel caso di CGI scritte in perl).Alcune CGI non sono portabili (ad esempio sescritte in C).
32
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Java Servlet
Una soluzione alle basse performance delleCGI sono le Servlet, applicazioni Java lato-server.Una servlet viene inizializzata solo una volta, poi resta disponibile (al prezzo di un utilizzo costante di risorse del sistema).Nel caso di piu' richieste contemporanee, nonvengono creati nuovi processi, ma esse vengono gestite tramite thread.
33
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Invocazione di Servlet
L'invocazione, come detto, e' sempre uguale.<HTML><BODY><FORM action="servlet/find" method="post">
Scrivi il nome dell'autore desiderato:<INPUT type="text" name="authorName" size="30"
maxlength="50"><INPUT type="submit" value="Invia la richiesta"><INPUT type="reset" value="Nuova richiesta">
</FORM></BODY></HTML>
34
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Application Server e Servlet
HTTPWeb
Server
INTERNET
Browser
Container
DBMS
DB
Ogni nuova richiesta vieneprocessata internamente tramite
un processo leggero (thread)
35
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Servlet
Una servlet viene gestita da un applicazione,detta “contenitore”, che ne controlla il ciclo divita e la interfaccia con l'esterno, utilizzando tutte le potenzialita' di java.Il metodo principale di una servlet e' service(),che mette a disposizione i parametri di ingresso e lo stream di output.
36
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Metodo principale
public void service(HttpServletRequest req,HttpServletResponse res)throws ServletException, IOException {
res.setContentType("text/html");PrintWriter out = res.getWriter();String name = req.getParam("authorName");out.println("<h1>Risultato della richiesta</h1>");out.println("<table border='5'>");try { Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROMautori WHERE nome = " + name);
37
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Metodo principalewhile (rs.next()) {out.print("<tr>");out.println("<td>" + rs.getString(1) + "</td>");out.println("<td>" + rs.getString(2) + "</td>");out.println("<td>" + rs.getString(3) + "</td>");out.print("</tr>");
}stmt.close();out.println("</table>");
} catch (SQLException e) {System.out.println(e);}ECCETERA
38
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Snapshot: Servlet connessa a Postgresql
39
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Separazione tra presentazione e contenuto
Una servlet e' una soluzione abbastanza soddisfacente, ma non del tutto.Istruzioni per produrre HTML sono immersenel codice java, rendendolo poco leggibile.Se si cambia l'aspetto della pagina (cosa che avolte cambia molto piu' velocemente delcodice) bisogna riscrivere la servlet.La soluzione consiste nel separare la parteHTML dal codice java.
40
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Separazione tra presentazione e contenuto
Esistono diversi modi per realizzare laseparazione tra presentazione e contenuto.ASP, ASP.NET, PHP, JSPLe pagine JSP vengono compilate in servlet, per cui ne mantengono i vantaggi,guadagnando in leggibilita' e riusabilita' delcodice.
41
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
JSP<%@ page import="java.io.*, java.sql.*"%>"<html><head><title>Hello</title></head><body bgcolor="white"><h1>Risultato della richiesta</h1><table border='5'><%try {
Class.forName("org.postgresql.Driver");String url = "jdbc:postgresql://localhost:8000/test";Connection con = DriverManager.getConnection(url,"magnani","");Statement stmt = con.createStatement();ResultSet rs = stmt.executeQuery("SELECT * FROM autori");while (rs.next()) {
%><tr><td> <%rs.getString(1);%> </td><td> <%rs.getString(2);%> </td><td> <%rs.getString(3);%> </td></tr><%
}stmt.close();
} catch (ClassNotFoundException nf) {System.out.println(nf);}catch (SQLException e) {System.out.println(e);}catch (Exception ex) {System.out.println(ex);} finally { try {if (con != null) con.close();}catch (Exception ex) {System.out.println(ex);}}%> </table></body></html>
HTML
Script
42
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Snapshot: JSP con postgresql
43
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Considerazioni finali
Soluzioni lato-client sono opportune perscenari in cui:
Esiste un controllo sui client.L'applicazione Web non e' molto “pesante”.
Attenzione: anche Java non e' portabile! Opera con le vecchie plug-in java si interrompe. Con lapiu' recente l'applet dell'esempio va in crash. ConMozilla/Netscape non si riescono a chiamare imetodi dell'applet tramite javascript. Oltre ad altri problemi che si scoprono solo dopo molte linee di codice.
44
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Considerazioni finali
La soluzione lato-server deve essere scelta sulla base della complessita' dell'applicazione(per semplici task le CGI in perl vanno benissimo), il numero di utenti (idem), lariusabilita' e la manutenzione del codice, lapiattaforma di sviluppo e di utilizzo dell'applicazione.
45
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Considerazioni finali
In casi reali, le tecnologie presentate si utilizzano in modo piu' sofisticato.Ad esempio, le connessioni in Java non si aprono tramite il DriverManager, le eccezioni ealtri parametri sono gestiti in modo piu’puntuale, si possono usare EnterpriseJavaBeans, risorse esterne di vario tipo, filtri.
46
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Bibliografia
Atzeni, Ceri, Paraboschi, TorloneBasi di datiMcGraw-Hillcapitolo “Basi di dati e World Wide Web”
47
Basi di dati e WWW© Matteo Magnani, Danilo Montesi – Università di Bologna
Webliografia
Tutorial su vari argomenti trattati riguardantijava:http://developer.java.sun.com/developer/onlineTraining/