Database Access from Web Servers
April 22, 2023 - slide 2Nome dell’evento
MotivazioniProdurre pagine “al volo” in base alle esigenze dell’utente e da contenuti strutturati (p.e. database)Scripting & componenti client-side non bastanoSoluzioni:
Architetture per produrre contenuti dinamici a lato-server
April 22, 2023 - slide 3Nome dell’evento
Web Server: estensioniCGI (Common Gateway Interface)
Web Server launches application named in URL CGI application gets HTTP headers & URL arguments CGI application returns HTTP headers and HTML document Runs in separate process from Web Server High startup cost (load plus process creation) Typically written in C, C++, Perl
April 22, 2023 - slide 4Nome dell’evento
Web Server: estensioniISAPI (Internet Server API)
Microsoft Internet Information Server high performance API Functionally similar to CGI, but runs much faster Runs in same process as Web Server Low startup cost (after first load, stays in memory) Typically written in C, C++
Netscape NSAPI is similar
April 22, 2023 - slide 5Nome dell’evento
CCommon ommon GGateway ateway IInterfacenterface
• Interfaccia che consente al Web Server Interfaccia che consente al Web Server di eseguire applicazioni esterne in grado di eseguire applicazioni esterne in grado di creare pagine di creare pagine dinamicamentedinamicamente
April 22, 2023 - slide 6Nome dell’evento
Caratteristiche di CGI Caratteristiche di CGI
• Non e’: Non e’: •un linguaggio di programmazioneun linguaggio di programmazione•un protocollo di comunicazioneun protocollo di comunicazione
• Definisce solo un insieme di Definisce solo un insieme di variabili di variabili di ambienteambiente utili alla applicazione (ad es. utili alla applicazione (ad es. parametri inviati dal client)parametri inviati dal client)
%&£$$pp*&£$
April 22, 2023 - slide 7Nome dell’evento
InvocazioneInvocazione
• Il cliente specifica nell’URL il nome del programma da eseguire•Il programma deve stare in una posizione precisa (di solito il direttorio cgi-bin)
http://mio.server.web/cgi-bin/xyz.exe
root
cgi-bin
xyz.exe
April 22, 2023 - slide 8Nome dell’evento
EsecuzioneEsecuzione
1.1. Il server riconosce dall’URl che la risorsa richiesta dal cliente e’ un eseguibile
http://mio.server.web/cgi-bin/xyz.exe
April 22, 2023 - slide 9Nome dell’evento
EsecuzioneEsecuzione
2.2. Il server decodifica i parametri inviati dal cliente e riempie le variabili d’ambiente
es: request_method, query_string, content_length, content_type
http://mio.server.web/cgi-bin/xyz.exe?#^@@
#^@@P$&*£
April 22, 2023 - slide 10Nome dell’evento
EsecuzioneEsecuzione
3.3. Il server lancia in esecuzione l’applicazione richiesta
#^@@P$&*£
April 22, 2023 - slide 11Nome dell’evento
EsecuzioneEsecuzione
4.4. L L’applicazione stampa la sua risposta sullo standard output
April 22, 2023 - slide 12Nome dell’evento
EsecuzioneEsecuzione
5.5. Il server ridireziona lo standard output sulla rete e quindi verso il client
April 22, 2023 - slide 13Nome dell’evento
Invio di parametri a un programma Invio di parametri a un programma CGICGI
• Il client puo’ usare due metodi:•GET•POST
•GET: i parametri sono codificati nell’URLhttp://www.mioserver.it/cgi-bin/xyz?par=val•POST : i parametri sono spediti al server separatamente, usando il body del messaggio di richiesta HTTP•NB: il metodo POST richiede l’uso di un costrutto HTML chiamato FORM
April 22, 2023 - slide 14Nome dell’evento
FORM HTMLFORM HTML
Esempio: invio al server il nome dell’utente<form action=http://www.mysrvr.it/cgi-bin/xyz.exe method=post><p>Dimmi il tuo nome:<input type=text name=“chisei” ></p><input type=submit ></form>
April 22, 2023 - slide 15Nome dell’evento
FORM HTMLFORM HTML
April 22, 2023 - slide 16Nome dell’evento
Struttura di un programma CGIStruttura di un programma CGI
leggi le variabili d’ambiente
leggi le variabili d’ambiente
stampa codice HTML
stampa codice HTML
elaboraelabora
stampa intestazioneMIME
stampa intestazioneMIME
“Content-type: text/html”
April 22, 2023 - slide 17Nome dell’evento
Decodifica dei parametriDecodifica dei parametri
leggi la variabileRequest_methodleggi la variabileRequest_method
leggi la variabileQuery_string
leggi la variabileQuery_string
GET
leggi la variabilecontent_length
leggi la variabilecontent_length
leggi content_lengthcaratteri da
standard input
leggi content_lengthcaratteri da
standard input
POST
Valore?
April 22, 2023 - slide 18Nome dell’evento
Revisione critica di HTTP
HTTP non prevede metodi per identificare l’utenteOgni richiesta è trattata come un evento isolatoUna nuova richiesta non ricorda nulla della precedenteNon esiste il concetto di sessione interattiva dell’utenteImpossibile fare applicazioni personalizzate
April 22, 2023 - slide 19Nome dell’evento
Revisione critica di CGIRevisione critica di CGI
Il web server genera un nuovo processo cgi ad ogni richiestaIl processo viene terminato alla fine del computo della rispostaAltissimo sovraccarico di esecuzione per la creazione e distruzione di processiImpossibile:
Tenere informazioni sulla sessione dell’utente in memoria centrale (serve un database)
Tenere allocate risorse condivise tra più richieste o più utenti (es. pool di connessioni a database)
April 22, 2023 - slide 31Nome dell’evento
Obiettivi delle architetture server sideObiettivi delle architetture server side
Migliori prestazioni: creare processi solo in fase di inizializzazione del sistema e riusare un pool di processi prontiMantenimento dello stato: sfruttare la persistenza del processo per mantenere informazioni sulla sessione dell’utente (stateful application)Condivisione delle risorse: mantenere allocate le risorse condivise Scalabilità: aumentare il numero di processi applicativi all’aumentare del traffico
April 22, 2023 - slide 32Nome dell’evento
Architetture “application server”Architetture “application server”
ClientClientWebWeb
serverserverApplicationApplication
serverserver
ApplicazioniApplicazioni
Base diBase didatidati
App.App.
ServersServers
April 22, 2023 - slide 33Nome dell’evento
Java Servlet Java Servlet http://java.sun.com/products/servlet/index.html
Servlet container: un programma Java che fornisce un ambiente persistente di esecuzione per applicazioni Web ed espone le caratteristiche del Web server come oggetti JavaServlet: l’analogo di uno script CGI nel mondo Java
HTTPRequest
HTTPResponse
Browser
Servlet container
Applicazioni(servlets)
JVM
parametri
risposta
April 22, 2023 - slide 34Nome dell’evento
Esempio di servletimport java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class RequestInfo extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<HTML>"); out.println("<HEAD>"); out.println("<TITLE>Request Information Example</TITLE>"); out.println("</HEAD>"); out.println("<BODY>"); out.println("<H3>Request Information Example</H3>"); out.println("Method: " + request.getMethod()); out.println("<BR>"); out.println("Request URI: " + request.getRequestURI()); out.println("<BR>"); out.println("User Agent:"+request.getHeader("User-Agent")); out.println("</BODY>"); out.println("</HTML>"); }
}
April 22, 2023 - slide 35Nome dell’evento
Risultato
April 22, 2023 - slide 36Nome dell’evento
Classi/interfacce di utilitàHTTPServletRequest
METODI: getHeader(), getMethod(), getQueryString(),..
HTTPServletResponse METODI: getWriter(), setContentLenght, setContenType(),
setHeader(), setStatus(), ..
HTTPSession METODI: getAttribute(), invalidate(), isNew,
setMaxInactiveInterval()
Cookie METODI: setValue(), GetValue(), getName(), setMaxAge(),..
April 22, 2023 - slide 37Nome dell’evento
ValutazioneAstrazione object-oriented delle proprietà di un server HTTP esteso (request, response, session ecc)Programmazione complessa perchè bisogna produrre sia il testo statico che i contenuti dinamiciLa presentazione HTML è mescolata al codice applicativoEsigenza: serve una soluzione più semplice per produrre pagine in modo dinamico a lato server
April 22, 2023 - slide 38Nome dell’evento
Server-side scriptingIdea: inserire istruzioni per il calcolo dei contenuti dinamici all’interno della pagina HTMLIl codice è interpretato dal serverIl browser riceve HTML puro
<HTML> <HTML> <BODY><BODY> … …..</BODY></BODY></HTML> </HTML>
<HTML> <HTML> ……..</HTML> </HTML> <%> <%> ……......</%></%>
Template: testo+script da interpretare sul server
Web server +Web server +Esecutore scriptEsecutore script
April 22, 2023 - slide 39Nome dell’evento
Active server page – ASP + ADO
April 22, 2023 - slide 40Nome dell’evento
ADO and WEB
April 22, 2023 - slide 41Nome dell’evento
Active Server Page - ASP
April 22, 2023 - slide 42Nome dell’evento
ASP Server FrameworkASP Server Scripting
Hosts VB Script natively Perl, JavaScript also supported
Enables scripting of ASP Server Controls
ASP Server Controls Built on standard tools: VB, VC/C++, Java Objects compatible w/ OLE Automation hosts
Database connectivity is native Via OLEdb - ADO
April 22, 2023 - slide 43Nome dell’evento
ADO and VBScript: an example
Prepare the form <hmtl> tags and intrinsic objects </hmtl>
Get a recordset <object id=rs classid=”……………."></object> <script language="VBScript"> Provider, DataSource rs.open ……….
View the data HTMLObject.Text = rs.Fields(“……”).Value
Data Browsing rs.MoveNext, rs.MovePrevious
April 22, 2023 - slide 44Nome dell’evento
Data tierUser tier
Middle tier
An example of data access -DEMO
Run Query Data Base
Data Access
An MDB file (MS – Access)No registration, no DSN definition, no declarationOnly two components (plus the browser)
Multi scroll
Call SP
April 22, 2023 - slide 45Nome dell’evento
JSP è una architettura per server-side scripting proposta da Sun (come alternativa a ASP di Microsoft)
Si fonda su tecnologia Java: linguaggio Java, Java Servlet, Java BeansCronologia:
Proposta presentata a JavaOne 98 Versione 0.92: revisione pubblica conclusa a Genn. 99 Versione 1.0 disponibile 1Q 99 Versione 1.1 disponibile 1Q 00 Versione 1.2 in uso da ottobre 2001
Java Server Pages (JSP)
April 22, 2023 - slide 46Nome dell’evento
Un file .asp contiene una combinazione di:Un file .asp contiene una combinazione di: TestoTesto Tag HTMLTag HTML Istruzioni di server-sideIstruzioni di server-side sscriptcriptinging
E’ necessario disporre di un ambiente di E’ necessario disporre di un ambiente di
compilazione apposito (ad es. Tomcat di compilazione apposito (ad es. Tomcat di
Apache Jakarta)Apache Jakarta)
File JSP
April 22, 2023 - slide 47Nome dell’evento
Procedure ed espressioni Scriptlets
procedure racchiuse tra delimitatori (<%…….%>) scritte in Java
Espressioni Un’espressione ha la forma:
<%= variable%> La variabile viene valutata e il valore risultante, convertito in stringa, viene inserito nella pagina al posto dell’espressione
April 22, 2023 - slide 48Nome dell’evento
Direttive: <%@ variable=“value” %> il tipo di linguaggio da utilizzare all’interno del file JSP (<%@ language=”java”%>)
il file .jsp o .html che viene ritornato al client se l’esecuzione della pagina JSP restituisce un errore (<%@ errorepage=”contactwebmaster.html”%>)
i moduli (packages) importati dagli oggetti usati nella pagina (<%@ import=”java.io.*, java.util.Hashtable%>)
Direttive
April 22, 2023 - slide 49Nome dell’evento
Esempio<HTML>
<HEAD><TITLE>Request Information Example</TITLE></HEAD><BODY><H3>Request Information Example</H3>Method: <%= request.getMethod() %> <BR>Request URI: <%= request.getRequestURI() %> <BR>User Agent: <%= request.getHeader("User-Agent") %> </BODY>
</HTML>
Risultato: Risultato: la stessa pagina computata dal servlet la stessa pagina computata dal servlet mostrato in precedenzamostrato in precedenza
April 22, 2023 - slide 50Nome dell’evento
Il file JSP viene prima tradotto in un servlet
Il servlet viene compilato in bytecode
La versione compilata viene tenuta in memoria per rendere più veloce una successiva richiesta della pagina
NB: La versione originaria di Microsoft ASP (non ASP.NET) non compilava i template
Compilazione
April 22, 2023 - slide 51Nome dell’evento
Indipendenza dal tipo di browser utilizzatoIndipendenza dal tipo di browser utilizzato Il browser vede solamente pagine HTMLIl browser vede solamente pagine HTML All’utente non sono necessari programmi proprietari o All’utente non sono necessari programmi proprietari o
estensioni del browserestensioni del browser
Maggior facilità di apprendimento e utilizzo rispetto a Maggior facilità di apprendimento e utilizzo rispetto a
servletservlet
Oggetti di utilità Oggetti di utilità
Nasconde la presenza di programmi script agli utenti e Nasconde la presenza di programmi script agli utenti e
ad eventuali hackerad eventuali hacker
Resta però codice (anche se poco) frammisto a markup Resta però codice (anche se poco) frammisto a markup
HTMLHTML
Valutazione
April 22, 2023 - slide 52Nome dell’evento
Obiettivo: togliere il codice dai template di paginaSoluzione: nascondere il codice “dietro” tag “magici”, eseguiti dal server
Tag eseguiti a lato server
<%@ taglib uri="http://www.myserver.com/mytaglib" prefix=“mytag" %>
<HTML>
<HEAD><TITLE>Esempio di tag iteratore</TITLE></HEAD><BODY><mytag:iteratore att1=“un” att2=“due” att3=“tre!”>
<p><mytag:elemento></p></mytag:iteratore>
</BODY>
</HTML>
April 22, 2023 - slide 53Nome dell’evento
Risultato
ASP .NET
April 22, 2023 - slide 55Nome dell’evento
OverviewOriginally Active Server Pages (ASP)ASP.NET
Successor of ASP Different paradigm (.NET Framework)
Topics Stateless web paradigm Code behind pages Response and Request objects Session and Application variables
April 22, 2023 - slide 56Nome dell’evento
Stateless web paradigmClient may return to any page at any time in any stateState information is posted during each page request (?xxxxx=xxxxx)ASP.NET web controls automatically repost their own state to maintain the ViewState of the page
April 22, 2023 - slide 57Nome dell’evento
Code behind pagesBinds HTML page to a code file written in a .NET languageHTML page is encapsulated in a System.Web.UI.Page class
Events such as Page_Load may be handled
All ASP.NET controls can be used as regular .NET objectsScripts in HTML page may call code behind functionsEverything will eventually end up as HTML
April 22, 2023 - slide 58Nome dell’evento
Response and Request objectsResponse
Represents the client browser Response.Redirect(http://www.microsoft.com) Response.Cookies[“UserName”] = “Bob”
Request Represents the server Request.PhysicalApplicationPath UserName = (String)Request.Cookies[“UserName”]
April 22, 2023 - slide 59Nome dell’evento
Session and Application variablesSession variables
Hashtable-style collection of name-value pairs Remembered until the client closes the browser (or
the session timeout expires – default 20 minutes) Only for one client Session[“ValidUser”] = true
Application variables Hashtable-style collection of name-value pairs Always remembered For all clients Application[“NumClients”] = NumClients + 1
April 22, 2023 - slide 60Nome dell’evento
Riferimenti
CGI: http://hoohoo.ncsa.uiuc.edu/cgi/
Java Servlet http://java.sun.com/products/servlet/index.html
JSP: http://java.sun.com/products/jsp/index.html
.NET: http://samples.gotdotnet.com/quickstart/aspplus/