Tecnologie server-side - I Principali tecnologie per costruire applicazioni web: Client-side • Javascript (e jQuery) Approcci ibridi • AJAX (jQuery) Server-side • PHP • JSP e Java Servlet Inoltre: ASP.NET Ruby, Python e Perl (Javascript) rispetto p alle distinzioni viste pprima,, qqueste soluzioni: utilizzano linguaggi di programmazione alcune sono tecnologie client-side (il codice è elaborato sul client, dal browser), altre sono server-side (il codice è elaborato sul server), altre sono miste a.a. 2016/17 Tecnologie Web 1 Tecnologie server-side - II Le tecnologie server-side servono principalmente per: 1. acquisire informazioni dal client, per es: dati inseriti dall'utente in un modulo online; dati contenuti in un link [1] 2 inserire dati in un database (per es. 2. es i dati di registrazione di un utente) o leggere dati da un database (per es. per verificare username e password di un utente) [2] Per far funzionare una tecnologia server-side è necessario che il Web Server la "supporti" cosa significa?!? Dipende dalla specifica tecnologia... Inoltre, siccome tipicamente le tecnologie server-side interagiscono con un database è necessario che sul "server" ci sia un DBMS[2] che supporti l'interazione con il database prescelto a.a. 2016/17 Tecnologie Web 2 1 Tecnologie server-side - III nome = maria eta = 18-25 insert.php ... [1] HTTP request q Web Server Come ti chiami? maria Quanti da 18 a 25 annii hai? h i? invia … Ciao Maria! Ho inserito i tuoi dati... "supporto" (x es. interprete PHP) ... HTTP response [2] <?php $nome=$_POST["nome"]; $eta=$_POST["eta"]; ... //inserimento nel DB ?> a.a. 2016/17 INSERT INTO utenti VALUES ($nome, $eta) DBMS (es: MySQL Server) DB Tecnologie Web [1] 3 Inviare dati al Web Server - I I dati da inviare al Web Server possono derivare da: • moduli online (form) • link con parametri Il client invia i dati al Web Server inserendoli nell nell'HTTP HTTP request Esistono due modi per codificare i dati nell'HTTP request: • metodo GET La conoscenza di HTML • metodo POST (e quindi dei form) è un prerequisito; qui vediamo gli vediamo: aspetti che legano i form alle 1. moduli online (form) tecnologie server-side... 2. link con parametri 3. contenuto di HTTP request 4. differenza tra i metodi GET e POST a.a. 2016/17 Tecnologie Web 4 2 [1] Inviare dati al Web Server - II Moduli online (form) [www.html.it/guide/guida-html/, lez. 44-50] In HTML HTML... <FORM METHOD="POST" ACTION="id.php" > Login: <INPUT TYPE="text" NAME="login"/> Password: <INPUT TYPE="password" NAME="pwd"/> <INPUT TYPE="Submit" VALUE="OK"/> </FORM> ... un modulo online (form) contiene: a. campi di input (tag <INPUT...> e altri) b. metodo (attributo METHOD del tag <FORM...>) c. azione (attributo ACTION del tag <FORM...>) a.a. 2016/17 [1] a. Tecnologie Web 5 Inviare dati al Web Server - III campi di input = elementi attraverso cui l'utente fornisce dei dati, per es: tra i campi di input c'è anche il pulsante di invio! b. metodo = modo in cui vengono codificati i dati da inviare al server (HTTP: POST o GET) c. azione = script programma server-side che "raccoglie" ed "elabora" i dati contenuti nel form NB i dati inseriti dall'utente dei vari campi assumono la forma di coppie <nome, valore>, in cui: nome = valore dell'attributo name nel tag HTML (NAME="login") valore = ciò che l'utente ha scritto (o selezionato) a.a. 2016/17 Tecnologie Web 6 3 [1] Inviare dati al Web Server - IV Contenuto di HTTP request Cosa succede quando l'utente fa click sul pulsante di invio? Viene costruita una HTTP request che contiene: indicazione della risorsa server server-side side (script o • ll'indicazione programma) che "gestirà" i dati, ricavata dall'attributo ACTION, per es: ACTION="id.php" • i dati, nella forma di coppie <nome, valore>, ricavati dai campi di input riempiti/selezionati dall'utente Per es: HTTP request: risorsa = identif.php g admin> dati: <login, <pwd, pippo> All'interno di HTTP request i dati (parametri) possono essere codificati in due modi, a seconda dell'indicazione contenuta nell'attributo METHOD del tag <FORM...>... a.a. 2016/17 Tecnologie Web [1] 7 Inviare dati al Web Server - V Differenza tra i metodi GET e POST (di HTTP) • metodo GET (richiesta di una risorsa): eventuali dati, cioè le coppie <nome, valore>, sono scritti in coda alla risorsa richiesta saranno quindi visibili nell'URL (nella barra degli indirizzi del HTTP header browser) risorsa = identif.php?login=admin&pwd=pippo ... Per es: HTTP body ... • metodo POST (invio di dati al server + indicazione della risorsa che li deve elaborare): ) i dati (p (parametri), ) cioè le coppie pp <nome, valore>, sono scritti all'interno HTTP header del corpo (body) di HTTP request risorsa = identif.php ... non saranno quindi HTTP body visibili nella barra degli dati: <login, admin> indirizzi del browser Per es: a.a. 2016/17 Tecnologie Web ... <pwd, pippo> 8 4 Inviare dati al Web Server - VI [1] Link con parametri In HTML... <A HREF="param.php?risposta=alan">Alan</A> <BR> <A HREF="param.php?risposta=kit">Kit</A> <BR> <A HREF="param.php?risposta=john">John</A> Cosa succede quando l'utente fa click sul un link? Viene costruita una HTTP request che contiene: HTTP header risorsa = param.php param php ?risposta ?risposta=kit kit ... HTTP body ... NB l'indicazione della risorsa server-side (script o programma) è nel link (attributo HREF), insieme ai dati il metodo usato nell'HTTP request per la codifica dei dati è GET! a.a. 2016/17 [1] Tecnologie Web 9 Inviare dati al Web Server - VII Vi ricordate l'URL rewriting, utilizzato per gestire la sessione se i cookies sono stati disattivati? Avevamo detto che il Web Server scrive il session-id come parametro degli URL presenti nella pagina... Ora siamo in grado di capire cosa vuol dire: quando il client deve costruire un'HTTP request (per es. quando l'utente clicca su un link), all'URL (risorsa) indicata nell'HTTP request viene aggiuto il session-id; per es: <A HREF="adduser.php"> diventa: <A HREF="adduser.php?PHPSESSID=68cf093a2ec5aa4f6cb60"> a.a. 2016/17 Tecnologie Web 10 5 [2] Salvare i dati in un database - I • I database ci permettono di salvare dati in modo strutturato • Esistono diverse tipologie di database, basate su principi di strutturazione diversi: database relazionali, database ad gg , ... oggetti, • I tipi di database più utilizzati sono i database relazionali • La struttura di un database relazionale (quali tipi di informazioni contiene, quali relazioni hanno le informazioni tra loro, ...) può essere definita a vari livelli: vista 1 vista 2 vista n Una conoscenza di base dei database e dei DBMS è un prerequisito; qui facciamo un rapidissimo e non esaustivo ripasso... livello concettuale livello logico livello fisico a.a. 2016/17 Tecnologie Web [2] Salvare 11 i dati in un database - II Livello logico: rappresentazione tabellare dei dati Esempio: Tabella: LIBRI NumInv Autore riga/record (rappresenta un "oggetto", x es. un libro) Titolo colonna/campo (rappresenta un attributo, x es. il titolo) Anno_ed Editore cella Quando vogliamo costruire una tabella, dobbiamo innanzitutto definire la sua struttura: i nomi dei campi (colonne) e i tipi di dati in essi contenuti a.a. 2016/17 Tecnologie Web 12 6 [2] Salvare i dati in un database - III Interazione con un database (tramite una User Interface, o uno script/programma server-side): • interrogazione (leggo da DB) • manipolazione di dati: inserimento di dati (scrivo nel DB) cancellazione di dati ("scrivo" nel DB) aggiornamento (scrivo nel DB) • modifiche strutturali (creazione User Interface tabelle, ecc.) • modifiche dei permessi di accesso database a.a. 2016/17 [2] Salvare Tecnologie Web Script/programma (server-side) <? $c=mysql_connect("localhost“,"root",""); mysql_select_db("bacheca"); $sql="SELECT * FROM ut WHERE co='Rossi'"; $ris = mysql_query($sql) ... ?> 13 i dati in un database - IV Ogni interazione con la base di dati: • viene interpretata, analizzata ed eseguita dal DBMS (DataBase Management System) • costituisce una query, espressa in SQL (Structured Query Language), per es: interrogazione SELECT * FROM libri WHERE Editore='Feltrinelli' manipolazione INSERT INTO utenti (nome,eta) VALUES ('lia',23) DELETE FROM libri WHERE NumInv='123-ab' modifiche strutturali DROP TABLE utenti modifiche dei permessi GRANT ALL ON myDB.* TO 'anna'@'localhost' a.a. 2016/17 Tecnologie Web 14 7 [2] Salvare i dati in un database - V • se è un'interrogazione (SQL SELECT), restituisce come risultato un insieme di record (recordset), es: n.inv autore titolo 123 456 789 casa_ed Feltrinelli lt i lli All d E Allende Eva L Luna F Benni Terra Feltrinelli Feltrinelli Voltolini 10 • se è una manipolazione di dati (SQL INSERT, DELETE, UPDATE) o di elementi strutturali del DB (SQL DROP TABLE libri), o di permessi di accesso, restituisce un'indicazione di successo o errore (tipicamente rispettivamente true e false) a.a. 2016/17 [2] Salvare Tecnologie Web 15 i dati in un database - VI Esempio di interazione con un DB attraverso una User Interface: Un esempio di interazione con un DB attraverso uno script server-side la vediamo tra breve... a.a. 2016/17 Tecnologie Web 16 8 PHP - I Principali tecnologie per costruire applicazioni web: Client-side • Javascript (e jQuery) Approcci ibridi • AJAX (jQuery) Server-side • PHP • JSP e Java Servlet Inoltre: ASP.NET Ruby, Python e Perl (Javascript) rispetto p alle distinzioni viste pprima,, qqueste soluzioni: utilizzano linguaggi di programmazione alcune sono tecnologie client-side (il codice è elaborato sul client, dal browser), altre sono server-side (il codice è elaborato sul server), altre sono miste a.a. 2016/17 Tecnologie Web 17 PHP - II Es: http://www.di.unito.it/goy/dida.php PHP [php.net] è: • un linguaggio di programmazione "ad alto livello" • pensato per il web, cioè in grado di – leggere il contenuto della HTTP request proveniente dal client (browser) – scrivere all'interno della HTTP response che verrà inviata al client (browser) • interpretato (da un interprete PHP) • server-side (cioè interpretato ed eseguito sul server) • Open Source, cioè l'interprete PHP è distribuito secondo la filosofia Open Source[*] a.a. 2016/17 Tecnologie Web 18 9 PHP - III Applicazione web scritta in PHP = insieme di "pagine web", cioè file di testo, con estensione .php, che contengono: – Codice HTML (+ eventualmente Javascript client-side) – Codice PHP = programma (script) server server-side side Esempio: [h] [p] [h] <H1> PHP: esempio </H1> HTML: interpretato dal browser <?php programmma $id = $_POST["login"]; $pwd = $_POST["password"]; (script) PHP: if ($id == "admin" && $pwd == "pippo") { interpretato echo "<P>Benvenuto P Benvenuto amministratore! amministratore!</P>";} /P ;} d ll'i t dall'interprete t else { echo "<P>Buongiorno ".$id."</P>";} PHP, sul server ?> <P> HTML: interpretato Questa è una pagina web dinamica dal browser </P> a.a. 2016/17 Tecnologie Web 19 PHP - IV Cosa succede quando il browser invia una HTTP request al server basata su un URL del tipo: http://www.di.unito.it/dida.php? • Il Web Server si accorge, grazie all'estensione del file indicato g PHP ((dida.php) p p) nell'URL, che la risorsa richiesta è una ppagina gira l'HTTP request all'interprete PHP • l'interprete PHP interpreta (ed esegue) gli script [p] contenuti nella pagina indicata nell'HTTP request; tipicamente, alcune istruzioni PHP gli diranno di: – leggere i dati (parametri) contenuti nell'HTTP request (accodati all'URL: identif.php?login=admin&pwd=pippo, oppure contenuti t ti nell body); b d ) per es: $id = $_GET["username"]; opp $id = $_POST["username"]; – connettersi ad un database (per leggere o scrivere dati); per es: $r = $db->query("SELECT * from libri WHERE titolo = '$tit'"); a.a. 2016/17 Tecnologie Web 20 10 PHP - V • L'esecuzione dello script PHP produce un risultato, tipicamente del testo o del codice HTML, che viene inserito nella pagina al posto dello script pagina g risultante, composta p dall'HTML originario g [h] + il • La p risultato dell'esecuzione dello script, viene inviata al browser Vediamo un altro esempio di HTML + PHP: <?php $p = "Everything"; ?> <p> The answer to the ultimate question of Life, the U i Universe and d <?= <? $ $p ?> is i <?= <? 6*7 ?> </p> The answer to the ultimate question of Life, the Universe and Everything is 42 shortcut per dire: scrivi il contenuto di $p a.a. 2016/17 shortcut per dire: scrivi il risultato di 6*7 Tecnologie Web 21 PHP - VI nome = maria eta = 18-25 insert.php ... HTTP request q Web Server Come ti chiami? maria Quanti da 18 a 25 annii hai? h i? invia … Ciao Maria! Ho inserito i tuoi dati... interprete PHP ... HTTP response INSERT INTO utenti VALUES ($nome, $eta) <?php $nome=$_POST["nome"]; $eta=$_POST["eta"]; //inserimento nel DB echo "ho inserito i tuoi dati"; ?> a.a. 2016/17 DBMS (es: MySQL Server) Tecnologie Web DB 22 11 PHP - VII Tipicamente: sistema web server DBMS interprete script operativo server-side Linux Apache p MySQL/MariaDB y Q PHP L. A. M. Linux (www.linuxfoundation.org) Apache (www.apache.org) MySQL (www.mysql.com) opp Maria DB (mariadb.org) PHP (www.php.net) P. tutte tecnologie Open Source[*] NB: sono possibili combinazioni diverse... per es: Windows + Apache + MySQL/MariaDB + PHP = W.A.M.P. Mac OS + Apache + MySQL/MariaDB + PHP = M.A.M.P. a.a. 2016/17 Tecnologie Web 23 PHP - VIII XAMPP = pacchetto multi-piattaforma (X = qualunque S.O.) contenente Apache, MySQL/MariaDB, PHP e Perl [www.apachefriends.org] a.a. 2016/17 Tecnologie Web 24 12 [2] Salvare i dati in un database - VII Esempio di interazione con un DB attraverso uno script PHP: <h1>I miei film</h1> host (su cui gira il DBMS, <ul> DBMS DB che è un... server!) <?php ?p p $db = new PDO("mysql:dbname=myMovies;host=localhost", username "anna", "annaPwd"); password $rows = $db->query("SELECT * FROM movies WHERE year = 2015); foreach ($rows as $row) ?> <li><?= $rows["name"] ?> stelle: <?= $rows["stars"] ?></li> <?php ?> </ul> a.a. 2016/17 Tecnologie Web [*] Digressione: 25 Open Source - I Breve parentesi sull'open source [www.opensource.org] Open Source Initiative (OSI) = associazione no-profit che ha ll'obiettivo obiettivo di gestire e promuovere la produzione di software open source Il software open source (o software libero) deve rispettare una serie di criteri: • • • • • a.a. 2016/17 Il codice sorgente del programma deve essere disponibile Il software può essere modificato e distribuito (con un nome diverso) alle stesse condizioni La licenza del software deve consentire a chiunque di ridistribuire il software secondo le stesse modalità Chiunque può partecipare allo sviluppo del software Il software deve essere distribuito gratuitamente (senza diritti d'autore o profitti) Tecnologie Web 26 13 [*] Digressione: Open Source - II L'idea che sta alla base dell'Open Source Initiative è la seguente: quando i programmatori hanno la possibilità di leggere, modificare e ridistribuire il codice sorgente di un programma quel software si evolve programma, evolve. La gente lo migliora, migliora lo adatta, lo corregge. E tutto questo può avvenire con una rapidità che appare impressionante a chi è abituato ai ritmi lenti dello sviluppo del software convenzionale. La comunità dell'open source ha imparato che questo rapido processo evolutivo produce software migliore rispetto al tradizionale modello chiuso, nel quale solo pochissimi hi i i programmatorii hanno h accesso all codice di sorgente e tutti gli altri devono avere a che fare con un imperscrutabile e oscuro blocco di bit. [da www.opensource.org] a.a. 2016/17 Tecnologie Web 27 JSP e Java Servlet Principali tecnologie per costruire applicazioni web: Client-side • Javascript (e jQuery) Approcci ibridi • AJAX (jQuery) Server-side • PHP • JSP e Java Servlet Inoltre: ASP.NET Ruby, Python e Perl (Javascript) rispetto p alle distinzioni viste pprima,, qqueste soluzioni: utilizzano linguaggi di programmazione alcune sono tecnologie client-side (il codice è elaborato sul client, dal browser), altre sono server-side (il codice è elaborato sul server), altre sono miste a.a. 2016/17 Tecnologie Web 28 14 Java Servlet - I Es: http://www.di.unito.it/goy/didaManager Le Java Servlet (www.oracle.com/technetwork/java/index-jsp135475.html) sono dei programmi Java pensati per la p g programmazione web sever-side • li si deve poter invocare tramite un URL (= "richiesta di esecuzione"), per es: http://www.di.unito.it/goy/didaManager • devono essere in grado di manipolare HTTP request e HTTP response); in particolare: il Web Server deve poter passare al programma la HTTP request proveniente dal client (browser) contenente i dati, affinché ffi hé la l Servlet S l t possa leggerne l il contenuto t t quando la Servlet ha elaborato il risultato (per es. un frammento di codice HTML), lo deve poter inserire nell'HTTP response che verrà inviata al client (browser) dal Web Server a.a. 2016/17 Tecnologie Web 29 Java Servlet - II Java [www.java.com] è: • un linguaggio di programmazione "ad alto livello" (orientato agli oggetti) • per la traduzione dei sorgenti in linguaggio macchina utilizza un approccio misto: il sorgente scritto in Java (myProgram.java) viene compilato (dal un compilatore Java) che genera un file scritto in bytecode (myProgram.class), il quale viene interpretato (ed eseguito) da un interprete Java (generalmente chiamato Java Virtual Machine: JVM o Java Runtime Environment: JRE) NB il compilatore e il bytecode sono indipendenti dalla macchina, la JVM dovendo tradurre in linguaggi macchina specifici dipende dalla macchina (S.O. + CPU) • server-side, cioè il file contenente il programma tradotto in bytecode dal compilatore (myProgram.class) viene interpretato ed eseguito sul server (la JVM risiede sul server) a.a. 2016/17 Tecnologie Web 30 15 Java Servlet - III Esempio (semplificato) di Java Servlet (sorgente): public class GeoMgr extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String param = request.getParameter( request getParameter("par"); par ); response.setContentType("text/html;charset=UTF-8"); try (PrintWriter resp = response.getWriter()) { resp.print("Parametro: "+param); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); p yp ( / ; ); try (PrintWriter resp = response.getWriter()) { String geoMgrResponse = ""; ... resp.print(geoMgrResponse); } } } a.a. 2016/17 Tecnologie Web 31 Java Servlet - IV Cosa succede quando il browser invia una HTTP request al server basata su un URL del tipo: http://www.di.unito.it/didaManager? 1) al posto dell'interprete PHP, sul server devono essere installate due cose: un Servlet S l Container C i (o Web Container o Servlet Engine) che: h "carica" le Servlet nel processo del Web Server (alla prima invocazione della Servlet) supporta il protocollo HTTP (per gestire il flusso HTTP request/HTTP response) gestisce al suo interno più applicazioni, ognuna identificata da un servlet context (nome univoco, x es: didaManager) una Java Virtual Machine (o JRE: Java Runtime Environment), cioè un interprete Java che interpreti ed esegua la Servlet (bytecode) 2) il programmatore deve aver compilato il sorgente Java e caricato sul server il file bytecode (myProgram.class) a.a. 2016/17 Tecnologie Web 32 16 Java Servlet - V • Il Web Server vede che la risorsa richiesta è una Java Servlet (didaManager) gira l'HTTP request al Servlet Container • il Servlet Container cerca tra i suoi "contesti" (servlet context) il pprogramma g corrispondente p (es: ( myProgram.class) y g ) e chiede all'interprete Java (JVM/JRE) di interpretare (ed eseguire) il programma • come nel caso di PHP, tipicamente, alcune istruzioni gli diranno di: – leggere i dati (parametri) contenuti nell'HTTP request (accodati all'URL: identif.php?login=admin&pwd=pippo, oppure contenuti nel body); per es: request.getParameter("par"); – connettersi ad un database (per leggere o scrivere dati); per es: Statement stm = connection.createStatement(); ResultSet rs = stm.executeQuery("SELECT * from libri"); a.a. 2016/17 Tecnologie Web 33 Java Servlet - VI • l'esecuzione della Java Servlet produce un risultato, tipicamente del testo o del codice HTML, che viene generalmente inserito nel body dell'HTTP response: response.setContentType("text/html;charset=UTF-8"); try (PrintWriter resp = response response.getWriter()) getWriter()) { String geoMgrResponse = ""; ... resp.print(geoMgrResponse); • l'HTTP response viene passata dal Servlet Container al Web Server ed inviata al browser a.a. 2016/17 Tecnologie Web 34 17 Java Servlet - VII nome = maria eta = 18-25 inserisci ... HTTP request Web Server Come ti chiami? maria Quanti da 18 a 25 anni hai? invia … Ciao Maria! Ho inserito i tuoi dati... interprete bytecode Java (JVM/JRE) Servlet Container ... HTTP response INSERT INTO utenti VALUES ($nome, $eta) DBMS SERVLET inserisci print("Ciao,"+nome); ... //inserimento nel DB /*invia ris in HTTPresponse*/ a.a. 2016/17 (es: Oracle DB) DB Tecnologie Web 35 Java Servlet - VIII Tipicamente si utilizzano dei Web Server che includono un Servlet Container (e la JVM/JRE), per es: Tomcat (tomcat.apache.org) Tomcat è un Web server open source, sviluppato dalla Apache Software Foundation, che include un Servlet Container (e la JVM/JRE) Glassfish (glassfish.java.net) GlassFish è un Application Server[*] open source, sviluppato inizialmente dalla Sun Microsystems e attualmente gestito dalla Oracle; include un Web Server e un Servlet Container (e la JVM/JRE) [*] Application Server = software che comprende diverse funzionalità per la gestione di applicazioni complesse; tipicamente, include un Web Server a.a. 2016/17 Tecnologie Web 36 18 JSP - I Es: http://www.di.unito.it/goy/dida.jsp Applicazione web basata sulle JSP (Java Server Pages) = insieme di "pagine web", cioè file di testo, con estensione .jsp, che contengono: – Codice HTML (+ eventualmente Javascript client-side) client side) – Codice Java, oppure tag JSTL (JSP Standard Tag Library = libreria di tag che corrispondono ad istruzioni Java) Esempio: [h] <H1> PHP: esempio </H1> HTML (interpretato dal browser) istruzioni [p] <% connection = DriverManager.getConnection(cStr); Java: Statement stm = connection connection.createStatement(); createStatement(); compilate compilate, ResultSet rs = stm.executeQuery("SELECT * FROM interpretate products WHERE price > 100"); ed eseguite %> sul server [h] <P> Questa è una pagina web dinamica HTML (interpretato </P> dal browser) a.a. 2016/17 Tecnologie Web 37 JSP - II Oppure... [h] [p] [h] <H1> JSP: esempio </H1> HTML: interpretato dal browser <sql:setDataSource driver="com.mysql.jdbc.Driver" JSTL tags: url="jdbc:mysql://localhost/database_name" tradotti (sul var="localSource" user="database_user" ... /> server) se ve ) in <sql:query l d dataSource="${localSource}" t S "${l lS }" istruzioni sql="SELECT * FROM products WHERE price > 100" Java var="result" /> <P> Questa è una pagina web dinamica HTML: interpretato dal browser </P> NB: i tag JSTL sembrano tag di un linguaggio di mark-up... ma lo sono solo in apparenza! Vengono infatti tradotti in istruzioni Java (quindi in istruzioni di un linguaggio di programmazione) a.a. 2016/17 Tecnologie Web 38 19 JSP - III Cosa succede quando il browser invia una HTTP request al server basata su un URL del tipo: http://www.di.unito.it/dida.jsp? • Il Web Server si accorge, grazie all'estensione del file indicato j p) nell'URL, che la risorsa richiesta è una JSP ((dida.jsp) gira l'HTTP request al... Servlet Container! • se è la prima volta che quella JSP viene richiesta (o se è stata modificata) – il Servlet Container invoca il JSP Engine (chiamato talvolta "compilatore JSP", pur non essendo un vero compilatore :-( ) – il JSP Engine g trasforma la ppagina g ((HTML + JSTL tags/istruzioni Java) in una Java Servlet (NB in un sorgente, scritto in Java!); in particolare: a.a. 2016/17 Tecnologie Web 39 JSP - IV o trasforma i tag HTML (e le eventuali istruzioni Javascript) in istruzioni Java che scrivono nel body della HTTP response (quindi sulla pagina che sarà visualizzata dal browser); per es: <H1>JSP: esempio</H1> <H1>JSP i </H1> PrintWriter pw; pw = httpResponse.getWriter(); pw.print("<H1>JSP: esempio</H1>"); o o o o se la JSP contiene direttamente codice Java, lo include nella Servlet se la JSP contiene tag JSTL, li traduce in istruzioni Java e le include nella Servlet compila la Servlet, invocando il compilatore Javae producendo la versione in bytecode della Servlet invoca l'interprete Java (JVM/JRE), che interpreta ed esegue la Servlet a.a. 2016/17 Tecnologie Web 40 20 JSP - V • se invece la Servlet (compilata) è già disponibile (perché non è la prima volta che quella JSP viene richiesta), il Servlet Container invoca semplicemente l'interprete Java (JVM/JRE), che interpreta ed esegue la Servlet • tipicamente, alcune istruzioni nella Servlet (derivanti da istruzioni incluse dal programmatore nella JSP) diranno di: – leggere i dati (parametri) contenuti nell'HTTP request (accodati all'URL: identif.php?login=admin&pwd=pippo, oppure contenuti nel body); per es: request.getParameter("par"); – connettersi ad un database (per leggere o scrivere dati); per es: Statement stm = connection.createStatement(); ResultSet rs = stm.executeQuery("SELECT * from libri"); a.a. 2016/17 Tecnologie Web 41 JSP - VI A questo punto il caso è stato ricondotto a quello di una "normale" Servlet... • l'esecuzione della Java Servlet produce un risultato, tipicamente del testo o del codice HTML, che viene ggeneralmente inserito nel body dell'HTTP response: response.setContentType("text/html;charset=UTF-8"); try (PrintWriter resp = response.getWriter()) { String geoMgrResponse = ""; ... resp.print(geoMgrResponse); • l'HTTP response viene passata dal Servlet Container al Web Server ed inviata al browser a.a. 2016/17 Tecnologie Web 42 21 JSP - VII nome = maria eta = 18-25 inserisci ... HTTP request Web Server Ciao Maria! solo la prima volta interprete bytecode Java (JVM/JRE) Come ti chiami? maria Quanti da 18 a 25 anni hai? invia … JSP Engine Engine Servlet HTTP Container response SERVLET generata automaticamente a partire dalla JSP print("Ciao,"+nome); ... //inserimento nel DB a.a. 2016/17HTTPresp*/ /*invia Ho inserito i tuoi dati... ... INSERT INTO utenti VALUES ($nome, $eta) DBMS (es: Oracle DB) Tecnologie Web DB 43 JSP - VIII per far funzionare le JSP è necessaria, sul server, la stessa tecnologia che si usa per le Java Servlet: • un Servlet Container che contenga anche un JSP Engine (che a sua volta contiene il compilatore Java) • l'interprete Java (JVM/JRE) i già menzionati Tomcat (tomcat.apache.org) e Glassfish (glassfish.java.net) a.a. 2016/17 Tecnologie Web 44 22 ASP.NET - I Principali tecnologie per costruire applicazioni web: Client-side • Javascript (e jQuery) Approcci ibridi • AJAX (jQuery) Server-side • PHP • JSP e Java Servlet Inoltre: ASP.NET Ruby, Python e Perl (Javascript) rispetto p alle distinzioni viste pprima,, qqueste soluzioni: utilizzano linguaggi di programmazione alcune sono tecnologie client-side (il codice è elaborato sul client, dal browser), altre sono server-side (il codice è elaborato sul server), altre sono miste a.a. 2016/17 Tecnologie Web 45 ASP.NET - II • ASP.NET = framework (gratuito) che supporta la costruzione di applicazioni Web (pagine Web con estensione .aspx) server-side • nel framework .NET possono essere utilizzi diversi linguaggi di programmazione: i il più iù usato t è Vi Visuall C# • Visual Studio = ambiente di sviluppo integrato (IDE) di Microsoft per sviluppare applicazioni Web, mobile e Windows in ambiente .NET comprende: – .NET Framework – IIS (Web Server) – SQL Server (DBMS) • Visual Studio include anche delle librerie client-side (per inserire script Javascript, AJAX, jQuery, ...) • Visual Studio Express = versione gratuita per sviluppare app. Web (scaricabile da www.asp.net, Get Started) a.a. 2016/17 Tecnologie Web 46 23 Ruby, Python e Perl Principali tecnologie per costruire applicazioni web: Client-side • Javascript (e jQuery) Approcci ibridi • AJAX (jQuery) Server-side • PHP • JSP e Java Servlet Inoltre: ASP.NET Ruby, Python e Perl (Javascript) rispetto p alle distinzioni viste pprima,, qqueste soluzioni: utilizzano linguaggi di programmazione alcune sono tecnologie client-side (il codice è elaborato sul client, dal browser), altre sono server-side (il codice è elaborato sul server), altre sono miste a.a. 2016/17 Tecnologie Web 47 Common Gateway Interface (CGI) - I Per capire come funzionano Ruby, Python, Perl dobbiamo introdurre un "vecchio" concetto: gli script CGI • CGI = Common Gateway Interface = standard che definisce la comunicazione tra un Web Server e un programma, programma che risiede sul file system del server • I linguaggi di programmazione più usati sono Perl, Python, C e C++ • RISORSE: www.tutorialspoint.com/perl/perl_cgi.htm openskill.info/infobox.php?ID=538 p p p telemat.det.unifi.it/book/Unix/Unix/relaz/cgi.htm it.wikipedia.org/wiki/Common_Gateway_Interface a.a. 2016/17 Tecnologie Web 48 24 Common Gateway Interface (CGI) - II Come funziona un programma (spesso chiamato "script") CGI? Il Web Server... 1. riceve dal browser (Web Client), tramite URL (es: p y g yp g ) la richiesta di http://myserver.it/cgi-bin/myprogram), (esecuzione di) un programma (myprogram) 2. attraverso l'interfaccia CGI[*], passa al programma gli eventuali dati (parametri) ricevuti nell'HTTP request 3. sempre attraverso l'interfaccia CGI[*], manda in esecuzione il programma richiesto, tipicamente invocando l'opportuno interprete (che interpreta ed esegue il programma) 4. riceve dal programma dell'elaborazione (sempre tramite l'interfaccia CGI) il risultato 5. invia al browser (Web Client) il risultato (nel body dell'HTTP response) a.a. 2016/17 Tecnologie Web 49 Common Gateway Interface (CGI) - III nome = maria eta = 18-25 inserisci ... HTTP request Web Server config x CGI script CGI HTTP response Come ti chiami? maria Quanti da 18 a 25 anni hai? invia … Ciao Maria! Ho inserito i tuoi dati... ... CGI INSERT INTO utenti VALUES ($nome, $eta) interprete programma (es. Python) inserisci print("Ciao,"+nome); ... #inserimento nel DB #invia ris in a.a.#HTTPresponse 2016/17 DBMS (es: MySQL Server) Tecnologie Web DB 50 25 Common Gateway Interface (CGI) - IV [*] In cosa consiste un'interfaccia CGI? (1) Configurazione del Web Server (a cui si dicono varie cose, di cui la più importante è dove percorso nel file system si trovano gli script CGI: generalmente cartella cgi-bin) (2) Uno script (programma) CGI contiene, tipicamente, istruzioni che corrispondono a comandi del sistema operativo (per es. l'indicazione dell'interprete da usare!) e/o istruzioni in un linguaggio di programmazione (es. Perl, Python, C e C++); per es (Perl): il Web Server, quando #!/usr/bin/perl –Tw "Content-Type:text/html\n\n"; riceve una HTTP request, print print "<html><head>...</head>"; riconosce che si tratta della ... richiesta di esecuzione di uno script CGI se è stato opportunamente configurato e se lo script è presente nella cartella apposita (generalmente cgi-bin) lo script CGI viene eseguito (utilizzando l'interprete di solito indicato nella prima riga dello script; per es: #!/usr/bin/perl –Tw a.a. 2016/17 Tecnologie Web 51 Ruby - I Ruby (www.ruby-lang.org) è linguaggio di programmazione molto utilizzato sul web, creato in Giappone all'inizio degli anni '90; Ruby è: • server-side (cioè eseguito sul server) • interpretato (da un interprete Ruby) • Open Source, cioè l'interprete Ruby è distribuito secondo la filosofia Open Source • Sul web può essere usato a) per scrivere programmi invocabili tramite CGI (www.html.it/pag/17448/cgi www html it/pag/17448/cgi), ) oppure b) all'interno delle pagine HTML (con estensione .rhtml) grazie a embedded Ruby (eRuby/ERb): www.html.it/pag/17450/embedded-ruby Una guida: www.techotopia.com/index.php/Ruby_Essentials a.a. 2016/17 Tecnologie Web 52 26 Ruby - II a) con CGI nome = maria eta = 18-25 inserisci ... HTTP request Web Server config x CGI script CGI HTTP response Come ti chiami? maria Quanti da 18 a 25 anni hai? invia … Ciao Maria! Ho inserito i tuoi dati... ... CGI INSERT INTO utenti VALUES ($nome, $eta) interprete Ruby DBMS programma Ruby inserisci (es: MySQL Server) puts "Ciao,"+nome ... #inserimento nel DB #invia ris in a.a.#HTTPresponse 2016/17 DB Tecnologie Web 53 Ruby – III b) nelle pagine HTML nome = maria eta = 18-25 ins.rhtml ... HTTP request q Web Server Come ti chiami? maria Quanti da 18 a 25 annii hai? h i? invia … Ciao Maria! Ho inserito i tuoi dati... interprete Ruby ... HTTP response INSERT INTO utenti VALUES ($nome, $eta) <% nome=params[:nome] eta=params[:eta] ... #inserimento nel DB %> a.a. 2016/17 DBMS (es: MySQL Server) Tecnologie Web DB 54 27 Python - I Python (www.python.org) è linguaggio di programmazione molto utilizzato sul web: • è server-side (cioè eseguito sul server) • utilizza un approccio "misto" (come Java): il codice sorgente viene compilato in un linguaggio intermedio (bytecode), specifico di Python, il quale viene poi interpretato ed eseguito dall'interprete (Virtual Machine) • la sua implementazione di base (CPython, reference implementation) è open source ed è gestita dalla Python Software Foundation (www.python.org/psf www python org/psf) • sul web può essere usato per scrivere programmi invocabili tramite CGI (docs.python.org/2/library/cgi.html) Una guida: www.erweb.it/pub/tecnologie_python.php a.a. 2016/17 Tecnologie Web 55 Python - II • E' uno dei 4 linguaggi utilizzati da Google (insieme a Javascript, Java e C++), è il principale linguaggio con cui è implementato YouTube, è usato al CERN e alla NASA, ... • Nel download di Python (che comprende nome = maria compilatore il e = 18-25 HTTP interprete) è incluso eta inserisci request ... anche un ambiente Web di sviluppo (un IDE: Server vedi prox slide) config x CGI chiamato HTTP script CGI response IDLE Come ti chiami? maria Quanti da 18 a 25 anni hai? invia … CGI Ciao Maria! Ciao Maria! Ho inserito i tuoi dati... ... … interprete bytecode Python programma Python inserisci a.a. 2016/17 print("Ciao,"+nome); ... #inserimento nel DB #invia ris in #HTTPresponseTecnologie Web DBMS (es: MySQL Server) DB INSERT INTO utenti VALUES (nome, eta) 56 28 Perl - I Perl (https://www.perl.org) è linguaggio di programmazione utilizzato anche sul web (server-side), creato nel 1987 da Larry Wall; Perl è: • server-side (cioè eseguito sul server) • interpretato (da un interprete Perl) • Open Source, cioè l'interprete Perl è distribuito secondo la filosofia Open Source • Sul web può essere usato per scrivere programmi invocabili tramite CGI (www.tutorialspoint.com/perl/perl_cgi.htm) U guida: Una id www.erweb.it/pub/tecnologie_perl.php b it/ b/t l i l h a.a. 2016/17 Tecnologie Web 57 Perl - II nome = maria eta = 18-25 inserisci ... HTTP request Web Server config x CGI script CGI HTTP response Come ti chiami? maria Quanti da 18 a 25 anni hai? invia … Ciao Maria! Ho inserito i tuoi dati... ... CGI INSERT INTO utenti VALUES ($nome, $eta) interprete Perl programma Perl inserisci print "Ciao,"+nome; ... #inserimento nel DB #invia ris in a.a.#HTTPresponse 2016/17 DBMS (es: MySQL Server) Tecnologie Web DB 58 29 Applicazioni web: strumenti Principali tipi di strumenti a supporto del lavoro del programmatore di applicazioni web: IDE = Integrated Development Environment Framework e librerie a.a. 2016/17 Tecnologie Web 59 Integrated Development Environments (IDE) • IDE = Integrated Development Environment = strumento software che offre diverse funzionalità integrate a supporto della programmzione [it.wikipedia.org/wiki/Integrated_development_environment it.wikipedia.org/wiki/Integrated development environment] • Tipicamente include: – un editor per scrivere/modificare il codice sorgente – compilatori/interpreti e strumenti per la corretta creazione dell'applicazione finale (es. file di configurazione, ecc.) – strumenti per il "debugging" debugging , cioè per la ricerca e la correzione degli errori ("bug" = errore nel software) • Alcuni IDE sono dedicati ad un singolo linguaggio di programmazione, altri supportano più linguaggi a.a. 2016/17 Tecnologie Web 60 30 IDE: NetBeans • NetBeans (https://netbeans.org/) nasce alla Sun Microsystems ed è ora della Oracle • NetBeans nasce come IDE per Java, ma è stato poi esteso per supportare vari altri linguaggi per sviluppare applicazioni W b tra cuii Javascript, Web, J i PHP a.a. 2016/17 Tecnologie Web 61 IDE: Eclipse • Eclipse (www.eclipse.org) è un IDE open source, multilinguaggio, molto utilizzato per sviluppare applicazioni (Web) Java • Può essere esteso per supportare diversi linguaggi (per es. PHP, P ht Ruby, Pyhton, R b Javascript) J i t) e tipi ti i di applicazioni li i i (es. ( applicazioni li i i per smartphone) con l'aggiunta di opportuni plug-in a.a. 2016/17 Tecnologie Web 62 31 Software frameworks - I • Software framework (o semplicemente framework) = o ambiente software, generalmente un insieme di librerie[*] o che offre dei template (("modelli") modelli ) astratti di codice che implementano funzionalità generiche e che possono essere modificati dal programmatore aggiungendo codice specifico, così da implementare funzionalità specifiche o generalmente un framework comprende anche compilatori/interpreti • Web Application Framework (WAF) = software framework per lo svuiluppo di applicazioni Web Generalmente un WAF comprende librerie per l'accesso a database, la gestione delle sessioni, ecc. [it.wikipedia.org/wiki/Framework] a.a. 2016/17 Tecnologie Web 63 Software frameworks - II [*] libreria = insieme di funzioni (o strutture dati) predefinite, utilizzabili all'interno di un programma; lo sviluppo di librerie ha lo scopo di fornire al programmatore funzionalità "già pronte", evitandogli Es: in NetBeans... di dover riscrivere ogni volta le stesse funzioni (es. accesso a database, manipola manipolaz. di dati in formati particolari, ecc.) a.a. 2016/17 Tecnologie Web 64 32 Software frameworks - III • Una delle principali caratteristiche dei framework è che generalmente offrono la possibilità di sviluppare applicazioni multi-piattaforma (o cross-platform): il codice sorgente viene scritto una sola volta e poi distribuito su più piattaforme il framework si occuperà di ricompilare il codice in modo che si adatti automaticamente a sistemi operativi diversi Questo aspetto è molto importante per lo sviluppo di applicazioni per mobile (come vedremo...) • Come scegliere un framework: iquii.com/2014/03/07/comescegliere-il-framework-giusto-per-sviluppare-le-applicazioni-webe-mobile/ a.a. 2016/17 Tecnologie Web 65 Software frameworks - IV Frameworks (WAF) per PHP • Esistono molti framework per PHP • Uno dei più famosi è Zend Framework (framework.zend.com) • Un articolo comparativo: p www.html.it/articoli/framework-php-una-comparazione-1/ • Vedi anche: www.phpframeworks.com Frameworks (WAF) per Python • Esistono diversi framework per Python • Il più famoso è Django (www.djangoproject.com/) • Un elenco: https://wiki.python.org/moin/WebFrameworks p py g Frameworks (WAF) per Ruby • Esistono diversi framework per Ruby • Il più famoso è sicuramete Ruby on Rails, o Rails (rubyonrails.org) a.a. 2016/17 Tecnologie Web 66 33 Tecnologie Web: come scegliere? Ma come si fa a scegliere quale tecnologia usare?!? Generalmente si tiene conto di diversi fattori... per es: – tipo di applicazione da sviluppare (semplice/complessa, multimediale, con molti dati, con molti utenti, molto interattiva, ...) – competenze dei programmatori coinvolti (la tecnolgia è già conosciuta? quanto è facile da apprendere? ) – Sistema Operativo e Web Server (quale S.O./Web Server ho ha disposizione? quali tecnologie sono supportate?) – documentazione disponibile – supporto (comunità di sviluppatori o supporto del produttore) – librerie, moduli e template (esistono librerie e moduli per realizzare u o a tà particolari pa t co a – es. archivi, a c v , photogallery, p otoga e y, ...? funzionalità – popolarità – costo (è free o a pagamento? che tipo di licenze offre?) Un articolo (www.redchar.net/?x=entry:entry120709-002739) e un esempio di discussione sul tema (www2.mokabyte.it/cms/article.run?articleId=VHB-FQD2BD-2HH_7f000001_18359738_5ed22ebf) a.a. 2016/17 Tecnologie Web 67 Suggerimenti bibliografici • Innanzi tutto i link segnalati nelle slide !!! • V. Roberto, M. Frailis, A. Gugliotta, P. Omero, Introduzione alle Tecnologie Web, McGraw-Hill, 2005 [NB: fate "attenzione" perché è un po' vecchiotto...!] Frammenti suggeriti: – Cap. 5 (La programmazione nel web): sez. da 5.1 a 5.5 + da 5.8 a 5.10 • V. Della Mea, L. Di Gaspero, I. Scagnetto, Programmazione Web Lato Server (seconda edizione aggiornata), Apogeo, 2011 Disponibile e-book (PDF) nella collana Apogeo Spicchi: è possibile acquistare singoli capitoli [www.apogeonline.com/libri/9788850314799/scheda] F Frammenti ti suggeriti: iti – – – – – Cap. 2 (siti web dinamici): sez. 2.3 e 2.4 Cap. 3 (Il linguaggio di scripting PHP): sez. 3.1 e 3.2 Cap. 4 (JSP: Java Server Pages): sez. 4.1 e 4.2 Cap. 5 (Java Enterprise Edition): sez. 5.1 e 5.2 (solo intro + 5.2.1 e 5.2.2) Appendice A (basi di dati): sez. A.1 e A.2 a.a. 2016/17 Tecnologie Web 68 34