Laboratorio Di Basi Di Dati 07 Programmazione Web Lato Server
1. Corso di Basi di Dati e Laboratorio
La programmazione Web
Alfio Ferrara - Stefano Montanelli
A.A. 2005/2006 Basi di Dati e Laboratorio 1
Architettura del Web
Richiesta HTTP HTTP Server
Client
La pagina contiene script
NO
lato server?
NO
Gli script richiedono Sì
Sì
connessioni al DBMS?
Interprete del
linguaggio di
scripting
(ASP, PHP, …)
DBMS Server
A.A. 2005/2006 Basi di Dati e Laboratorio 2
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
A.A. 2005/2006 Basi di Dati e Laboratorio 3
1
2. 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 4
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-BIN
es. http://nomehost/cgi-bin/abc.exe
A.A. 2005/2006 Basi di Dati e Laboratorio 5
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
A.A. 2005/2006 Basi di Dati e Laboratorio 6
2
3. 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 7
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 8
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
A.A. 2005/2006 Basi di Dati e Laboratorio 9
3
4. 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 10
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 11
Server Side – Perl
• Esempio
– Inserire nel file Hello.pl il seguente codice
#!/usr/local/bin/perl
print “Hellon”;
– Mandare lo script in esecuzione con il
seguente comando
perl Hello.pl
A.A. 2005/2006 Basi di Dati e Laboratorio 12
4
5. 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 13
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 14
Server Side – PHP
A.A. 2005/2006 Basi di Dati e Laboratorio 15
5
6. Server Side – PHP
• Esempio richiesta con form
<html><body>
<h2>Desidera ulteriori informazioni sui temi del
nostro corso?</h2>
<form action=quot;risposta.phpquot; method=quot;postquot;>
Nome:<input type=quot;textquot; name=quot;namequot; size=quot;20quot;
maxlength=quot;30quot;>
Indirizzo email:<input type=quot;textquot;
name=quot;emailquot; size=quot;20quot; maxlength=quot;30quot;>
Mi interessa:<select name=quot;preferencequot;>
<option value=“ASP”>ASP</option>
<option value=“PHP”>PHP</option>
<option value=“JSP”>JSP</option></select>
<input type=quot;submitquot; value=quot;Inviaquot;></form>
</body></html>
A.A. 2005/2006 Basi di Dati e Laboratorio 16
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 (quot;Invieremo le informazioni su
$pref a $postaquot;); ?>
</div>
</body></html>
A.A. 2005/2006 Basi di Dati e Laboratorio 17
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)
A.A. 2005/2006 Basi di Dati e Laboratorio 18
6
7. 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 Object
Model)
– 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 19
Server Side – ASP
HTML +
VBScript/JScript
ActiveX Server
Components
A.A. 2005/2006 Basi di Dati e Laboratorio 20
Server Side – ASP
• Esempio
– Analizziamo lo stesso esempio visto per PHP
<html>
<head>
<%
nome= Request.form(quot;namequot;)
posta= Request.form(quot;emailquot;)
pref= Request.form(quot;preferencequot;)
%>
</head><body>
<h2>Grazie per l'interesse <% =nome %></h2>
<div>
Invieremo le informazioni su
<% =pref %> a <% =posta %>
</div></body></html>
A.A. 2005/2006 Basi di Dati e Laboratorio 21
7
8. 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 22
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 23
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
A.A. 2005/2006 Basi di Dati e Laboratorio 24
8
9. 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 25
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 26
Server Side – .NET
VB.NET C# J# VC++.NET …
XML Web
Web Forms
Services Windows
Forms
ASP.NET
.NET Framework class library
Common Language Runtime
Win 32
A.A. 2005/2006 Basi di Dati e Laboratorio 27
9
10. 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 28
Server Side – .NET
• risposta.aspx
<%@ Page language=quot;c#quot;
Codebehind=quot;risposta.aspx.csquot; %>
<HTML><HEAD><title>Calcoli numerici</title></HEAD>
<body>
<h2>Risultati relativi ai numeri inseriti</h2>
<table border=quot;1quot;>
<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 29
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(quot;N11quot;));
… /* acquisizione dei parametri */
if (N11 > N12) MAX1 = N11; else MAX1 = N12;
… /* test di controllo */
MA1 = (N11 + N12)/2;
… /* calcolo delle medie aritmetiche */
}}}
A.A. 2005/2006 Basi di Dati e Laboratorio 30
10
11. 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 31
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 32
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
A.A. 2005/2006 Basi di Dati e Laboratorio 33
11
12. 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 34
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 35
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
A.A. 2005/2006 Basi di Dati e Laboratorio 36
12
13. Server Side – JSP
Web Server
HTTP
Request. Web components
HTTPServlet (servlet)
JSP page 2
Request
Web 1
client
6 5
HTTPServlet
HTTP
Response 3
Response.
HTML page
JavaBeans components
JDBC 4
A.A. 2005/2006 Basi di Dati e Laboratorio 37
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 38
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
A.A. 2005/2006 Basi di Dati e Laboratorio 39
13