Database Access from Web Servers

49
Database Access from Web Servers

description

Database Access from Web Servers. Motivazioni. Produrre pagine “al volo” in base alle esigenze dell’utente e da contenuti strutturati (p.e. database) Scripting & componenti client-side non bastano Soluzioni: Architetture per produrre contenuti dinamici a lato-server. Web Server: estensioni. - PowerPoint PPT Presentation

Transcript of Database Access from Web Servers

Page 1: Database Access from Web Servers

Database Access from Web Servers

Page 2: 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

Page 3: Database Access from Web Servers

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

Page 4: Database Access from Web Servers

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

Page 5: Database Access from Web Servers

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

Page 6: Database Access from Web Servers

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*&£$

Page 7: Database Access from Web Servers

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

Page 8: Database Access from Web Servers

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

Page 9: Database Access from Web Servers

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$&*£

Page 10: Database Access from Web Servers

April 22, 2023 - slide 10Nome dell’evento

EsecuzioneEsecuzione

3.3. Il server lancia in esecuzione l’applicazione richiesta

#^@@P$&*£

Page 11: Database Access from Web Servers

April 22, 2023 - slide 11Nome dell’evento

EsecuzioneEsecuzione

4.4. L L’applicazione stampa la sua risposta sullo standard output

Page 12: Database Access from Web Servers

April 22, 2023 - slide 12Nome dell’evento

EsecuzioneEsecuzione

5.5. Il server ridireziona lo standard output sulla rete e quindi verso il client

Page 13: Database Access from Web Servers

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

Page 14: Database Access from Web Servers

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>

Page 15: Database Access from Web Servers

April 22, 2023 - slide 15Nome dell’evento

FORM HTMLFORM HTML

Page 16: Database Access from Web Servers

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”

Page 17: Database Access from Web Servers

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?

Page 18: Database Access from Web Servers

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

Page 19: Database Access from Web Servers

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)

Page 20: Database Access from Web Servers

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

Page 21: Database Access from Web Servers

April 22, 2023 - slide 32Nome dell’evento

Architetture “application server”Architetture “application server”

ClientClientWebWeb

serverserverApplicationApplication

serverserver

ApplicazioniApplicazioni

Base diBase didatidati

App.App.

ServersServers

Page 22: Database Access from Web Servers

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

Page 23: Database Access from Web Servers

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>"); }

}

Page 24: Database Access from Web Servers

April 22, 2023 - slide 35Nome dell’evento

Risultato

Page 25: Database Access from Web Servers

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(),..

Page 26: Database Access from Web Servers

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

Page 27: Database Access from Web Servers

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

Page 28: Database Access from Web Servers

April 22, 2023 - slide 39Nome dell’evento

Active server page – ASP + ADO

Page 29: Database Access from Web Servers

April 22, 2023 - slide 40Nome dell’evento

ADO and WEB

Page 30: Database Access from Web Servers

April 22, 2023 - slide 41Nome dell’evento

Active Server Page - ASP

Page 31: Database Access from Web Servers

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

Page 32: Database Access from Web Servers

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

Page 33: Database Access from Web Servers

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

Page 34: Database Access from Web Servers

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)

Page 35: Database Access from Web Servers

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

Page 36: Database Access from Web Servers

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

Page 37: Database Access from Web Servers

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

Page 38: Database Access from Web Servers

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

Page 39: Database Access from Web Servers

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

Page 40: Database Access from Web Servers

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

Page 41: Database Access from Web Servers

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>

Page 42: Database Access from Web Servers

April 22, 2023 - slide 53Nome dell’evento

Risultato

Page 43: Database Access from Web Servers

ASP .NET

Page 44: Database Access from Web Servers

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

Page 45: Database Access from Web Servers

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

Page 46: Database Access from Web Servers

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

Page 47: Database Access from Web Servers

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”]

Page 48: Database Access from Web Servers

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

Page 49: Database Access from Web Servers

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/