Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
1
Teh
nolo
gii
Web
Teh
nolo
gii
Web
20
07
20
07
Programare WebProgramare WebDe la CGI la servere de De la CGI la servere de
aplicatiiaplicatii
Dr. Sabin-Corneliu BuragaFacultatea de Informatica
Universitatea “A.I.Cuza” – Iasi, Romania
http://www.infoiasi.ro/~busaco/
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
2
Teh
nolo
gii
Web
Teh
nolo
gii
Web
20
07
20
07
• Standardul CGI • Alternative• Caracteristici comune
ale serverelor de aplicatii Web
cuprinscuprins
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
3
Teh
nolo
gii
Web
Teh
nolo
gii
Web
20
07
20
07
• Standardul CGI – Caracterizare– Variabile de mediu– Invocarea scripturilor CGI– SSI (Server Side Includes)
cuprinscuprins
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
4
Teh
nolo
gii
Web
Teh
nolo
gii
Web
20
07
20
07
• Standard de facto pentru interactiunea programatica a clientilor cu serverele Web – CGI/1.1
• Scop: generarea dinamica pe server de reprezentari ale unor resurse solicitate de un client Web
• Un program (script) CGI se invoca pe server, in mod implicit sau explicit (i.e., preluarea informatiilor dintr-un formular)
• Scripturile CGI pot fi concepute in orice limbaj disponibil pe server– Limbaje interpretate:
bash, Perl (modulul CGI), Python, Pike, Ruby,...– Limbaje compilate: C, C++,...
cgi | caracterizarecgi | caracterizare
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
5
Teh
nolo
gii
Web
Teh
nolo
gii
Web
20
07
20
07
• Un script CGI scrie datele la iesirea standard (stdout)
• Un script CGI genereaza/foloseste anteturi HTTP, utilizind standardul MIME – exemplu: Content-type: text/html
• Unui program CGI, datele de procesat i se vor trimite la intrarea standard sau prin intermediul unor variabile de mediu
• Detalii: http://hoohoo.ncsa.uiuc.edu/cgi
cgi | programecgi | programe
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
6
Teh
nolo
gii
Web
Teh
nolo
gii
Web
20
07
20
07
• Interactiunea dintre clientul si serverul Web
cgi | programecgi | programe
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
7
Teh
nolo
gii
Web
Teh
nolo
gii
Web
20
07
20
07
• Un program CGI are acces la variabilele de mediu:– Independente de cerere:
SERVER_NAME, GATEWAY_INTERFACE– Specifice cererilor transmise spre script-ul
CGI:SERVER_PROTOCOL, REQUEST_METHOD, QUERY_STRING, REMOTE_HOST, REMOTE_ADDR, CONTENT_TYPE, CONTENT_LENGTH
cgi | variabile/1cgi | variabile/1
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
8
Teh
nolo
gii
Web
Teh
nolo
gii
Web
20
07
20
07
• Variabile suplimentare (generate de serverul Web): HTTP_ACCEPT, HTTP_USER_AGENT,...
• Script CGI care afiseaza variabilele de mediu:
#!/usr/bin/perl # Afiseaza mediul print "Content-type: text/plainContent-type: text/plain\n\n"; print "Environment:\n\n"; foreach $key (keys %ENV) { printf "%16s = %s\n", $key, $ENV{$key}; }
variabile.cgi
cu drepturi de citire & executie
cgi | variabile/2cgi | variabile/2
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
9
Teh
nolo
gii
Web
Teh
nolo
gii
Web
20
07
20
07
#!/bin/bash
echo “echo “Content-type: text/htmlContent-type: text/html””echoechoecho “<p>Salut din CGI!</p>”
• Invocare directa (prin GET):http://domeniu/~utilizator/cale/salut.cgi
salut.cgi
stocat in ~/html/cale
cgi | invocare/1cgi | invocare/1 De experimentat si
alte tipuri MIME(text/plain, text/xml)
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
10
Teh
nolo
gii
Web
Teh
nolo
gii
Web
20
07
20
07
<form action="http://www.infoiasi.ro/cgi-bin/max.cgi" method="GET"> <p>Va rugam, introduceti doua numere: <input type="text" name="nr1" size="5" /> <input type="text" name="nr2" size="5" /> </p> <p><input type="submit" value="Afla maximul" /></p></form>
• Invocare dintr-un formular interactiv (GET sau POST)
cgi | invocare/2cgi | invocare/2
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
11
Teh
nolo
gii
Web
Teh
nolo
gii
Web
20
07
20
07
URL special (cazul GET)
cgi | invocare/3cgi | invocare/3
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
12
Teh
nolo
gii
Web
Teh
nolo
gii
Web
20
07
20
07
• Pentru fiecare cimp al formularului, se genereaza o pereche nume_cimp=valoare delimitata de & care va fi adaugata URL-ului unde este stocat programul CGI:http://www.infoiasi.ro/cgi-bin/max.cgi?nr1=7&nr2=4
• Acest URL este codificat (%hexa, spatiul devine +) – URL encoding (vezi cursul anterior)
• Serverul va invoca scriptul CGI pasindu-i datele la intrarea standard sau via variabile de mediu
cgi | invocare/4cgi | invocare/4
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
13
Teh
nolo
gii
Web
Teh
nolo
gii
Web
20
07
20
07
• Procesarea datelor prin metoda GET– Datele vor fi disponibile in variabila
QUERY_STRING
printf (“Content-type: text/html\n\n”);…data = getenv (“QUERY_STRING”); /* preia variabila de mediu */sscanf (data, “nr1=%ld&nr2=%ld”, &nr1, &nr2);…printf (“<p>Maximul dintre %ld si %ld este …</p>”,…);
cgi | invocare/5cgi | invocare/5
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
14
Teh
nolo
gii
Web
Teh
nolo
gii
Web
20
07
20
07
• Procesarea datelor prin metoda POST– Datele vor fi accesate de la intrarea
standard (stdin), lungimea in octeti a datelor primite fiind stocata in variabila CONTENT_LENGTH
printf (“Content-type: text/html\n\n”);…lenstr = getenv (“CONTENT_LENGTH”);sscanf (lenstr, “%ld”, &len);fgets (data, len+1, stdin); /* citim de la intrarea standard */…printf (“<p>Maximul dintre %ld si %ld este …</p>”,…);
cgi | invocare/6cgi | invocare/6
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
15
Teh
nolo
gii
Web
Teh
nolo
gii
Web
20
07
20
07
• Metoda GET se foloseste pentru generarea de reprezentari ale resurselor cerute (starea serverului nu trebuie sa se modifice)
• Metoda POST se utilizeaza atunci cind datele transmise serverului au dimensiuni mari (continut de fisiere) sau sint “delicate” (e.g., parole); de asemenea, cind invocarea scriptului poate conduce la modificari ale starii pe server (adaugarea unei inregistrari, alterarea unui fisier,...)
• Folosind GET, se poate stabili un “bookmark” pentru acces ulterior la o resursa Web
cgi | GET cgi | GET vs.vs. POST POST
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
16
Teh
nolo
gii
Web
Teh
nolo
gii
Web
20
07
20
07
• Scop: posibilitatea executiei scripturilor CGI si a altor actiuni, direct din pagina Web
• Comenzi (directive) SSI: <!--#directiva --> • Fisierele continind directive SSI in mod
uzual au extensia .shtml
server side includesserver side includes
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
17
Teh
nolo
gii
Web
Teh
nolo
gii
Web
20
07
20
07
• Comenzi uzuale:– echo – afiseaza valoarea anumitor variabile
<p>Data si timpul: <!--#echo var="DATE_LOCAL"--></p><p>Legătura prin care s-a ajuns aici este <!--#echo var="HTTP_REFERER" --></p><p>Numele acestui document este <!--#echo var="DOCUMENT_NAME" --></p>
– fsize – furnizeaza marimea unui fisier<!--#fsize file="index.html" -->
server side includesserver side includes
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
18
Teh
nolo
gii
Web
Teh
nolo
gii
Web
20
07
20
07
• Comenzi uzuale:– flastmod – ofera data ultimei modificari
a unui fisier (aflat pe serverul Web)<p>Ultima modificare: <!--#flastmod file="web.html" --></p>
– exec – executa un script CGI (nu-i permisa la IIS)<!--#exec cgi="citat.pl.cgi" -->
– include – include un fisier<!--#include file="antet.html.inc" -->
server side includesserver side includes
Atentie la problemele de securitate ce pot aparea!
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
19
Teh
nolo
gii
Web
Teh
nolo
gii
Web
20
07
20
07
• Folosirea altor interfete de programare Web pe partea de server – mod_perl (Apache)– NSAPI (Netscape Server API)– ISAPI (Microsoft Internet Services API)– Servere de aplicatii Web – reprezentative:
•ASP (Active Server Pages) .NET• JSP (Java Server Pages) •PHP (PHP: Hypertext Preprocessor)•Ruby on Rails
alternativealternative
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
20
Teh
nolo
gii
Web
Teh
nolo
gii
Web
20
07
20
07
• Caracteristici comune ale serverelor de aplicatii Web– Caracterizare– Comparatii privind facilitatile
oferite
cuprinscuprins
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
21
Teh
nolo
gii
Web
Teh
nolo
gii
Web
20
07
20
07
• Ofera posibilitatea de a include cod (script) direct in cadrul documentelor Web, cod invocat pe server generarea de continut dinamic pe partea de server
• Maniera de includere depinde de serverul de aplicatii Web:– <% ... %> pentru ASP / ASP.NET– <% ... %> pentru JSP (Java Server Pages)– <?php ... ?> pentru PHP– Mai general: <script language=“...”>...</script>
servere de aplicatiiservere de aplicatii
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
22
Teh
nolo
gii
Web
Teh
nolo
gii
Web
20
07
20
07
• Beneficiaza de facilitatile oferite de cadrul de lucru pus la dispozitie de serverul de aplicatii– Limbaj(e) de programare– API-ul de baza– Suport pentru baze de date– Suport pentru interactiunea Web– Suport pentru cookie-uri & sesiuni – Suport pentru procesari speciale (e.g., XML)– Medii de dezvoltare– Alte facilitati particulare
servere de aplicatiiservere de aplicatii
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
23
Teh
nolo
gii
Web
Teh
nolo
gii
Web
20
07
20
07
• Beneficiaza de facilitatile oferite de cadrul de lucru pus la dispozitie de serverul de aplicatii– Limbaj(e) de programare
• VBScript & JScript (ASP)• limbajele .NET (ASP.NET)
ASP.NET este independent de limbaj, fiind parte a .NET Framework
• Java (servlet-uri, JSP)• Python (Zope)• Ruby (Ruby on Rails)• altele
servere de aplicatiiservere de aplicatii
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
24
Teh
nolo
gii
Web
Teh
nolo
gii
Web
20
07
20
07
• Beneficiaza de facilitatile oferite de cadrul de lucru pus la dispozitie de serverul de aplicatii– Limbaj(e) de programare
• Strong typed vs. weak typed (ASP.NET/JSP vs. ASP/PHP)
• Utilizare de spatii de nume si instante de clase• Raportare de erori (ASP, PHP4) vs.
exceptii (ASP.NET, JSP, PHP5)• Pur obiectuale (ASP.NET, JSP) sau nu (PHP)• Interpretate sau compilate (de cele mai multe ori,
se prefera generarea de cod intermediar – IL)
servere de aplicatiiservere de aplicatii
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
25
Teh
nolo
gii
Web
Teh
nolo
gii
Web
20
07
20
07
• Beneficiaza de facilitatile oferite de cadrul de lucru pus la dispozitie de serverul de aplicatii– API-ul de baza
• Utilizarea “puterii” limbajului si framework-ului (functii/clase predefinite) migrare facila de la aplicatii clasice la cele Web securitate, consistenta, acces la resursele mediului
• Se poate asigura si independenta de platforma• PHP Built-in functions vs. ASP.NET CLR (Common
Language Runtime) – aceeasi comparatie si la JSP• Functionalitatile incluse in API-ul de baza
nu necesita recompilarea serverului de aplicatii
servere de aplicatiiservere de aplicatii
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
26
Teh
nolo
gii
Web
Teh
nolo
gii
Web
20
07
20
07
• Beneficiaza de facilitatile oferite de cadrul de lucru pus la dispozitie de serverul de aplicatii– Suport pentru baze de date
• Acces robust la servere de baze de date• ADO.NET pentru ASP.NET• JDBC (Java DataBase Connectivity) pentru JSP• Functii PHP predefinite pentru o pleiada de RDBMS,
via biblioteci incorporate (SQLite si mysqli in PHP5) sau extensii; se poate utiliza si interfata ODBC
• “Legarea” datelor de program (data binding) este realizata automat (ASP.NET) sau manual (PHP)
• Eventual, se pot folosi framework-uri aditionale (e.g., Hibernate – Java)
servere de aplicatiiservere de aplicatii
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
27
Teh
nolo
gii
Web
Teh
nolo
gii
Web
20
07
20
07
• Beneficiaza de facilitatile oferite de cadrul de lucru pus la dispozitie de serverul de aplicatii– Suport pentru interactiunea Web
• Controale Web disponibile pe server, fie emulind cimpurile din formularele (X)HTML, fie oferind controale noi (e.g., calendar) generarea de cod HTML (+JavaScript) in functie de client
– ASP.NET (<asp:control>), PHP 5 via PRADO– similar, pentru platforma Java
• Procesarea evenimentelor provenind de la client (ASP.NET) – event driven Web applications
• Transferuri asincrone prin AJAX (module/clase aditionale)
servere de aplicatiiservere de aplicatii
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
28
Teh
nolo
gii
Web
Teh
nolo
gii
Web
20
07
20
07
• Beneficiaza de facilitatile oferite de cadrul de lucru pus la dispozitie de serverul de aplicatii– Medii de dezvoltare
• Unele, foarte sofisticate• Comerciale (Delphi, Visual Studio .NET, JBuilder,
Zend,...), gratuite (Kylix, IBM Eclipse, WebMatrix), de evaluare/educationale (Visual Studio Express,...)
• Depanatoare, optimizatoare de cod (e.g., Zend Optimizer), profilers etc.
• Facilitati pentru dezvoltatorii de servicii Web• Clase/componente/biblioteci aditionale
(comerciale ori gratuite)
servere de aplicatiiservere de aplicatii
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
29
Teh
nolo
gii
Web
Teh
nolo
gii
Web
20
07
20
07
• Beneficiaza de facilitatile oferite de cadrul de lucru pus la dispozitie de serverul de aplicatii– Suport acordat inginerilor software
• Aplicatii N-tier• Unele framework-uri incurajeaza folosirea
sabloanelor de proiectare (design patterns): MVC (Model-View-Controller) – e.g., Ruby on Rails
• Unitati de testare automata (JUnit, PHP Unit,...)• Generarea automata de documentatii,
in diverse formate• Suport pentru versioning (CVS, Subversion,…)• Pot folosi o paradigma (e.g., agile programming)
servere de aplicatiiservere de aplicatii
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
30
Teh
nolo
gii
Web
Teh
nolo
gii
Web
20
07
20
07
• Beneficiaza de facilitatile oferite de cadrul de lucru pus la dispozitie de serverul de aplicatii– Alte facilitati
•Suport pentru dezvoltarea de aplicatii Web complexe
– Aplicatiile Web pot folosi containere de componente
– Arhitecturi orientate spre servicii (SOA – Service Oriented Architecture)
•Suport pentru arhitecturi/platforme avansate de tip enterprise (e.g., Grid)
servere de aplicatiiservere de aplicatii
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
31
Teh
nolo
gii
Web
Teh
nolo
gii
Web
20
07
20
07
• Standardul CGI • Alternative• Caracteristici comune
ale serverelor de aplicatii Web
rezumatrezumat
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
32
Teh
nolo
gii
Web
Teh
nolo
gii
Web
20
07
20
07
Intrebari…?