1 / 49

Database Access from Web Servers

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.

stian
Download Presentation

Database Access from Web Servers

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Database Access from Web Servers

  2. 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

  3. Web Server: estensioni • CGI (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

  4. Web Server: estensioni • ISAPI (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

  5. ? ? Common Gateway Interface • Interfaccia che consente al Web Server di eseguire applicazioni esterne in grado di creare pagine dinamicamente

  6. %&£$$ pp*&£$ Caratteristiche di CGI • Non e’: • un linguaggio di programmazione • un protocollo di comunicazione • Definisce solo un insieme di variabili di ambiente utili alla applicazione (ad es. parametri inviati dal client)

  7. http://mio.server.web/cgi-bin/xyz.exe ? root cgi-bin xyz.exe Invocazione • 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)

  8. http://mio.server.web/cgi-bin/xyz.exe ? Esecuzione 1.Il server riconosce dall’URl che la risorsa richiesta dal cliente e’ un eseguibile

  9. http://mio.server.web/cgi-bin/xyz.exe?#^@@ ? #^@@ P$&*£ Esecuzione • 2.Il server decodifica i parametri inviati dal cliente e riempie le variabili d’ambiente • es: request_method, query_string, content_length, content_type

  10. #^@@ P$&*£ Esecuzione 3.Il server lancia in esecuzione l’applicazione richiesta

  11. Esecuzione 4. L’applicazione stampa la sua risposta sullo standard output

  12. Esecuzione 5.Il server ridireziona lo standard output sulla rete e quindi verso il client

  13. Invio di parametri a un programma CGI • 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

  14. FORM 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: <inputtype=text name=“chisei” ></p> <inputtype=submit > </form>

  15. FORM HTML

  16. stampa codice HTML Struttura di un programma CGI leggi le variabili d’ambiente elabora stampa intestazione MIME “Content-type: text/html”

  17. Valore? GET POST leggi la variabile Query_string leggi la variabile content_length leggi content_length caratteri da standard input Decodifica dei parametri leggi la variabile Request_method

  18. Revisione critica di HTTP HTTP non prevede metodi per identificare l’utente Ogni richiesta è trattata come un evento isolato Una nuova richiesta non ricorda nulla della precedente Non esiste il concetto di sessione interattiva dell’utente Impossibile fare applicazioni personalizzate

  19. Revisione critica di CGI • Il web server genera un nuovo processo cgi ad ogni richiesta • Il processo viene terminato alla fine del computo della risposta • Altissimo sovraccarico di esecuzione per la creazione e distruzione di processi • Impossibile: • 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)

  20. Obiettivi delle architetture server side Migliori prestazioni: creare processi solo in fase di inizializzazione del sistema e riusare un pool di processi pronti Mantenimento 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

  21. Applicazioni Base didati App. Servers Client Web server Application server Architetture “application server”

  22. JVM Servlet container Applicazioni (servlets) Java Servlet http://java.sun.com/products/servlet/index.html HTTP Request parametri risposta HTTP Response Browser Servlet container: un programma Java che fornisce un ambiente persistente di esecuzione per applicazioni Web ed espone le caratteristiche del Web server come oggetti Java Servlet: l’analogo di uno script CGI nel mondo Java

  23. import 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>"); } } Esempio di servlet

  24. Risultato

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

  26. Valutazione • Astrazione 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 dinamici • La presentazione HTML è mescolata al codice applicativo • Esigenza: serve una soluzione più semplice per produrre pagine in modo dinamico a lato server

  27. <HTML> <BODY> …. </BODY> </HTML> <HTML> …. </HTML> <%> …... </%> Web server + Esecutore script Template: testo+script da interpretare sul server Server-side scripting • Idea: inserire istruzioni per il calcolo dei contenuti dinamici all’interno della pagina HTML • Il codice è interpretato dal server • Il browser riceve HTML puro

  28. Active server page – ASP + ADO

  29. ADO and WEB

  30. Active Server Page - ASP

  31. ASP Server Framework • ASP 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

  32. 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

  33. An example of data access -DEMO • An MDB file (MS – Access) • No registration, no DSN definition, no declaration • Only two components (plus the browser) Middle tier User tier Data tier Data Access Run Query Data Base Multi scroll Call SP

  34. Java Server Pages (JSP) • 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 Beans • Cronologia: • 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

  35. File JSP • Un file .asp contiene una combinazione di: • Testo • Tag HTML • Istruzioni di server-sidescripting • E’ necessario disporre di un ambiente di compilazione apposito (ad es. Tomcat di Apache Jakarta)

  36. 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 Procedure ed espressioni

  37. Direttive • 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%>)

  38. 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: la stessa pagina computata dal servlet mostrato in precedenza

  39. Compilazione 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

  40. Valutazione • Indipendenza dal tipo di browser utilizzato • Il browser vede solamente pagine HTML • All’utente non sono necessari programmi proprietari o estensioni del browser • Maggior facilità di apprendimento e utilizzo rispetto a servlet • Oggetti di utilità • Nasconde la presenza di programmi script agli utenti e ad eventuali hacker • Resta però codice (anche se poco) frammisto a markup HTML

  41. Tag eseguiti a lato server • Obiettivo: togliere il codice dai template di pagina • Soluzione: nascondere il codice “dietro” tag “magici”, eseguiti dal server <%@ tagliburi="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>

  42. Risultato

  43. ASP .NET

  44. Overview • Originally 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

  45. Stateless web paradigm • Client may return to any page at any time in any state • State 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

  46. Code behind pages • Binds HTML page to a code file written in a .NET language • HTML 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 objects • Scripts in HTML page may call code behind functions • Everything will eventually end up as HTML

  47. Response and Request objects • Response • 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”]

  48. Session and Application variables • Session 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

  49. Riferimenti • CGI: http://hoohoo.ncsa.uiuc.edu/cgi/ • Java Servlethttp://java.sun.com/products/servlet/index.html • JSP: http://java.sun.com/products/jsp/index.html • .NET: http://samples.gotdotnet.com/quickstart/aspplus/

More Related