laboratorio di basi di dati 07 programmazione web lato server
TRANSCRIPT
1
A.A. 2005/2006 Basi di Dati e Laboratorio 1
Corso di Basi di Dati e Laboratorio
La programmazione WebAlfio Ferrara - Stefano Montanelli
A.A. 2005/2006 Basi di Dati e Laboratorio 2
Architettura del Web
ClientHTTP Server
DBMS Server
Interprete del linguaggio di
scripting(ASP, PHP, …)
La pagina contiene script lato server?
Gli script richiedono connessioni al DBMS?
Richiesta HTTP
NO
NOSì
Sì
A.A. 2005/2006 Basi di Dati e Laboratorio 3
Programmazione lato server• Strumenti
– Pagine server: si tratta di script associati a pagine Web, spesso embedded, che vengono interpretati da appositi moduli del server quando la pagina viene richiesta.
• ASP, JSP, PHP, Perl, …– CGI: consente di interfacciarsi con
un’applicazione eseguita o compilata sul server
• Perl, Python, VB, C, …– .NET: applicazione compilata sul server ed
eseguita tramite processi dedicati
2
A.A. 2005/2006 Basi di Dati e Laboratorio 4
Server Side – CGI
• CGI (Common Gateway Interface) è una tecnica per realizzare processing lato server– NON è un linguaggio di programmazione– NON è un protocollo di comunicazione
• Definisce un ambiente di esecuzione per i programmi lato server
A.A. 2005/2006 Basi di Dati e Laboratorio 5
Server Side – CGI
• Invocazione– Il client invia una richiesta indicando nella URL
il nome del programma da invocare e specificando i parametri necessari all’esecuzione
• I parametri vengono passati con metodo GET/POST
• Il programma risiede in una posizione precisa del file system del server: la directory CGI-BINes. http://nomehost/cgi-bin/abc.exe
A.A. 2005/2006 Basi di Dati e Laboratorio 6
Server Side – CGI
• Esecuzione– Il server individua tramite la richiesta il
programma da mandare in esecuzione– Il server decodifica i parametri associati alla
richiesta e predispone l’ambiente di esecuzione
• es. request_method, query_string, content_length, content_type
3
A.A. 2005/2006 Basi di Dati e Laboratorio 7
Server Side – CGI
– Il server manda in esecuzione l’applicazione richiesta
• L’applicazione interagisce con le sorgenti dati (basi di dati)
– L’applicazione stampa i risultati sullo standard output
• Il risultato è HTML– Il server ridireziona lo standard output verso il
client
A.A. 2005/2006 Basi di Dati e Laboratorio 8
Server Side – CGI
• Considerazioni– Conserva la natura stateless di HTTP
• Nessuna forma di persistenza– Ogni richiesta genera un nuovo processo
• Basse performance, congestione del server– Eventuali interazioni con i DBMS richiedono
una connessione dedicata per ogni richiesta• Congestione del DBMS
– Sicurezza• Nelle prime versioni i programmi CGI permettevano
l’accesso arbitrario al file system del server
A.A. 2005/2006 Basi di Dati e Laboratorio 9
Server Side – Fast CGI
• Evoluzione di CGI– Il Web server genera il processo fast-cgi in
fase di inizializzazione– Il processo esegue una routine di
inizializzazione e si pone in attesa– Ad ogni richiesta, il Web server apre una
connessione verso il processo fast-cgi– Il processo genera l’output sulla connessione
HTTP aperta verso il client– Il processo fast-cgi chiude la connessione e
rimane in attesa di nuove invocazioni
4
A.A. 2005/2006 Basi di Dati e Laboratorio 10
Server Side – Fast CGI
• Considerazioni– La generazione dei processi avviene solo in
fase di inizializzazione• Miglioramento delle prestazioni
– La persistenza del processo fast-cgi e la connessione con il client consente di superare la natura stateless di HTTP
A.A. 2005/2006 Basi di Dati e Laboratorio 11
Server Side – Perl
• Caratteristiche di Perl– Nato nel 1986 (prima del Web!)– Linguaggio di scripting orientato alla
manipolazione di stringhe– Distribuito in modo free sotto licenza GNU– Si interfaccia ai principali DBMS tramite
• DBI: libreria di funzioni indipendenti dal DBMS• DBD: driver specifici per alcuni DBMS
A.A. 2005/2006 Basi di Dati e Laboratorio 12
Server Side – Perl
• Esempio– Inserire nel file Hello.pl il seguente codice#!/usr/local/bin/perlprint “Hello\n”;
– Mandare lo script in esecuzione con il seguente comandoperl Hello.pl
5
A.A. 2005/2006 Basi di Dati e Laboratorio 13
Server Side – Perl
• Modalità di esecuzione– L’interprete comunica con il Web server
tramite CGI• Script perl memorizzati nella directory CGI-BIN del
server– L’interprete Perl viene integrato come modulo
dinamico del Web server sfruttando API specifiche
• Nel caso di Apache, il Web server viene integrato con mod_perl
A.A. 2005/2006 Basi di Dati e Laboratorio 14
Server Side – PHP
• Caratteristiche di PHP– Linguaggio open source distribuito con licenza
GPL– Codice embedded nelle pagine HTML– Sintassi simile a C e Perl– Ampio supporto alle interazioni con i DBMS– Supporto alle sessioni HTTP (dalla versione 4)– Nato come CGI, poi disponibile come modulo
di Apache (mod_php), oggi anche come dll di altri Web server
A.A. 2005/2006 Basi di Dati e Laboratorio 15
Server Side – PHP
6
A.A. 2005/2006 Basi di Dati e Laboratorio 16
Server Side – PHP
• Esempio richiesta con form<html><body><h2>Desidera ulteriori informazioni sui temi del nostro corso?</h2>
<form action="risposta.php" method="post">Nome:<input type="text" name="name" size="20" maxlength="30">
Indirizzo email:<input type="text" name="email" size="20" maxlength="30">
Mi interessa:<select name="preference"><option value=“ASP”>ASP</option><option value=“PHP”>PHP</option><option value=“JSP”>JSP</option></select>
<input type="submit" value="Invia"></form></body></html>
A.A. 2005/2006 Basi di Dati e Laboratorio 17
Server Side – PHP
• Esempio di risposta<html><head><?php $nome=$_POST['name'];
$posta=$_POST['email'];$pref=$_POST['preference'];
?></head><body><h2>Grazie per l'interesse
<?php print $nome ?></h2><div>
<?php print ("Invieremo le informazioni su$pref a $posta"); ?>
</div></body></html>
A.A. 2005/2006 Basi di Dati e Laboratorio 18
Server Side – PHP
• Considerazioni– Linguaggio semplice ed efficiente– Mancanza di un ambiente di sviluppo
completo– Mancanza di un’interfaccia uniforme verso i
DBMS– Mancanza di supporto diretto a tecniche di
clustering e failover• Linguaggio inadatto ad applicazioni Web
complesse ed estese– Evoluzione verso la programmazione ad
oggetti (dalla versione 5)
7
A.A. 2005/2006 Basi di Dati e Laboratorio 19
Server Side – ASP
• Caratteristiche di ASP– Tecnologia proprietaria Microsoft
• Soluzione server side maggiormente diffusa in ambiente Microsoft
– Accesso alle API Windows tramite il supporto dello standard COM (Component ObjectModel)
– Impiego di ADO (Active Data Objects) COM per le interazioni con i DBMS
– Vantaggi di performance rispetto a CGI• Gli interpreti VBScript e Jscript sono integrati nel
Web server IIS
A.A. 2005/2006 Basi di Dati e Laboratorio 20
Server Side – ASP
ActiveX ServerComponents
HTML +VBScript/JScript
A.A. 2005/2006 Basi di Dati e Laboratorio 21
Server Side – ASP
• Esempio– Analizziamo lo stesso esempio visto per PHP<html><head><%
nome= Request.form("name")posta= Request.form("email")pref= Request.form("preference")
%></head><body><h2>Grazie per l'interesse <% =nome %></h2><div>
Invieremo le informazioni su <% =pref %> a <% =posta %>
</div></body></html>
8
A.A. 2005/2006 Basi di Dati e Laboratorio 22
Server Side – ASP
• Considerazioni– Soluzione proprietaria dipendente dalla
piattaforma Windows– Ottimizzato in ambiente Microsoft– Limiti di sicurezza degli oggetti ActiveX– Poca scalabilità– ASP è stato evoluto con ASP+
• Supporto di codice compilato• Caching• Multi-server• Multi-processor
A.A. 2005/2006 Basi di Dati e Laboratorio 23
Confronto PHP ASP
• PHP nasce prima di ASP• Uguale espressività
– I due offrono sostanzialmente le medesime azioni
– Esistono convertitori automatici da ASP a PHP e viceversa
• Differente sintassi– PHP è simile al C– ASP discende dal Basic (VBScript)
A.A. 2005/2006 Basi di Dati e Laboratorio 24
Confronto PHP ASP
• ASP è rigorosamente basato sul modello ad oggetti– PHP lo è dalla versione 5
• PHP è disponibile su tutte le piattaforme ed è integrabile con un gran numero di DBMS
• Lo sviluppo ASP può essere assistito tramite Frontpage o altri strumenti visuali
9
A.A. 2005/2006 Basi di Dati e Laboratorio 25
Server Side – .NET
• Caratteristiche di .NET– .NET è un’infrastruttura per lo sviluppo di
soluzioni integrate adeguate a qualsiasi gruppo di risorse Web
– Comprende 4 linguaggi conformi alle CLS (Common Language Specification) di ECMA riguardo all’interoperabilità
• Visual C# .NET (standard ECMA dal 2001)• Visual C++ .NET• Visual Basic .NET• Visual J# .NET
A.A. 2005/2006 Basi di Dati e Laboratorio 26
Server Side – .NET
• Esecuzione– Il codice (scritto in uno dei linguaggi di .NET)
viene compilato in un linguaggio intermedio• MSIL (Microsoft Intermediate Language)
– All’invocazione della pagina MSIL viene eseguito all’interno del CLR (Common Language Runtime) tramite processi specifici
• ASP.NET
A.A. 2005/2006 Basi di Dati e Laboratorio 27
Server Side – .NET
Win 32
VB.NET C# J# VC++.NET …
Common Language Runtime
.NET Framework class library
Windows Forms
Web Forms XML WebServices
ASP.NET
10
A.A. 2005/2006 Basi di Dati e Laboratorio 28
Server Side – .NET
• Esempio– Date tre coppie di numeri interi, la pagina
ASPX restituisce il massimo e la media per ogni coppia
A.A. 2005/2006 Basi di Dati e Laboratorio 29
Server Side – .NET
• risposta.aspx<%@ Page language="c#"
Codebehind="risposta.aspx.cs" %><HTML><HEAD><title>Calcoli numerici</title></HEAD><body>
<h2>Risultati relativi ai numeri inseriti</h2><table border="1">
<tr><td><b>Primo numero</b></td><td><b>Secondo numero</b></td><td><b>Massimo</b></td><td><b>Media aritmetica</b></td></tr>
<tr><td><% =N11 %></td><td><% =N12 %></td><td><% =MAX1 %></td><td><% =MA1 %></td></tr>
…</table>
</body></HTML>
A.A. 2005/2006 Basi di Dati e Laboratorio 30
Server Side – .NET• risposta.aspx.cs
using System;using … /*inclusione delle librerie necessarie*/namespace test{public class risposta : System.Web.UI.Page
{protected decimal N11,N12,N21,N22,N31,N32,MAX1,MAX2,MAX3,MA1,MA2,MA3;
private void Page_Load(object sender,System.EventArgs e)
{ N11 = System.Convert.ToDecimal(Request.Form.Get("N11"));
… /* acquisizione dei parametri */if (N11 > N12) MAX1 = N11; else MAX1 = N12;… /* test di controllo */MA1 = (N11 + N12)/2;… /* calcolo delle medie aritmetiche */
}}}
11
A.A. 2005/2006 Basi di Dati e Laboratorio 31
Server Side – .NET
• Considerazioni– E’ suggerito l’uso di code-behind
• Separazione fra HTML e codice dinamico– La migrazione da ASP a ASP.NET non è
banale• In ambiente .NET gli oggetti COM sono stati
ristrutturati• Impossibilità di condividere informazioni di stato
A.A. 2005/2006 Basi di Dati e Laboratorio 32
Server Side – JSP
• Java Servlet– Analogo server-side delle applet
• Sono programmi Java compilati– Specializzano GenericServlet o HTTPServlet e
contengono 3 metodi principali• init() inizializzazione (variabili, connessioni, …)• service() gestione delle richieste del client• destroy() deallocazione delle risorse
– Richiamabili all’interno di HTML• <form action=http://nomehost/servlet/nomeserv >
– Richiamabili direttamente da URL• http://nomehost/servlet/nomeserv
A.A. 2005/2006 Basi di Dati e Laboratorio 33
Server Side – JSP
• Servlet engines– Processi dedicati all’esecuzione di servlet– Disponibili come moduli da integrare al Web
server• Es. Apache + mod_jserv
– Offrono integrazione con i DBMS tramite JDBC– Ottimizzano l’esecuzione delle servlet
• La servlet viene caricata alla prima invocazione e rimane attiva gestendo molte richieste client
12
A.A. 2005/2006 Basi di Dati e Laboratorio 34
Server Side – JSP
• Caratteristiche di JSP– Integrazione in pagine HTML di codice Java
eseguito lato server – Separazione della parte dinamica dal template
statico HTML• Il codice JSP va incluso in tag speciali delimitati da <%…%>
– L’invocazione di una pagina JSP implica l’esecuzione di una servlet
• La servlet deve essere inizializzata alla prima invocazione (init())
• La servlet viene solo richiamata se già attiva per precedenti invocazioni (service())
A.A. 2005/2006 Basi di Dati e Laboratorio 35
Server Side – JSP
• Esecuzione– Il client invia una richiesta HTTP al Web server– Il Web server converte la richiesta in un oggetto
HTTPServletRequest per il componente Web (una servlet) che tratterà la richiesta
– Il componente Web interagisce con i componenti JavaBeans e con i DBMS per generare contenuti dinamici
A.A. 2005/2006 Basi di Dati e Laboratorio 36
Server Side – JSP
– La richiesta può essere passata ad altri componenti Web per ulteriori elaborazioni
– Il componente Web genera un oggetto HTTPServletResponse
– L’oggetto HTTPServletResponse viene convertito in una risposta HTTP e viene restituita al client
13
A.A. 2005/2006 Basi di Dati e Laboratorio 37
Server Side – JSP
Web client
HTTPServletRequest
Web Server
HTTPServletResponse
Web components(servlet)
JavaBeans components
HTTPRequest.JSP page
HTTPResponse.HTML page
1
6
2
5
3
4JDBC
A.A. 2005/2006 Basi di Dati e Laboratorio 38
Server Side – JSP
• Un JSP engine: Tomcat– Prodotto del progetto Jakarta di Apache
Software Foundation sponsorizzato da Sun– Implementazione di riferimento per le
tecnologie Java Servlet e JSP• Essenzialmente è un servlet engine con un
ambiente JSP– Integrato con Apache tramite mod_jk
(evoluzione di mod_jserv), ma disponibile anche per altri Web server (IIS)
A.A. 2005/2006 Basi di Dati e Laboratorio 39
Server Side – JSP
• Considerazioni su JSP– Acquisisce i pregi di Java
• Portabilità su più piattaforme• Accessibilità di tutte le API Java• Integrabilità in architetture complesse
– Meno efficiente di PHP e ASP• Conveniente in soluzioni complesse
– Richiede notevoli competenze tecniche• Conoscenze delle tecnologie e del linguaggio Java