Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Programare Web De la CGI la servere de aplicatii Dr. Sabin-Corneliu Buraga Facultatea de Informatica Universitatea “A.I.Cu...
<ul><li>Standardul CGI  </li></ul><ul><li>Alternative </li></ul><ul><li>Caracteristici comune  ale serverelor de aplicatii...
<ul><li>Standardul CGI   </li></ul><ul><ul><li>Caracterizare </li></ul></ul><ul><ul><li>Variabile de mediu </li></ul></ul>...
<ul><li>Standard de facto pentru interactiunea programatica a clientilor cu serverele Web –  CGI/1.1 </li></ul><ul><li>Sco...
<ul><li>Un script CGI scrie datele  la iesirea standard ( stdout ) </li></ul><ul><li>Un  script  CGI genereaza/foloseste a...
<ul><li>Interactiunea dintre clientul si serverul Web </li></ul>cgi | programe
<ul><li>Un program CGI are acces  la variabilele de mediu: </li></ul><ul><ul><li>Independente de cerere: SERVER_NAME ,  GA...
<ul><li>Variabile suplimentare (generate de serverul Web):  HTTP_ACCEPT ,  HTTP_USER_AGENT ,...  </li></ul><ul><li>Script ...
<ul><li>#!/bin/bash </li></ul><ul><li>echo “ Content-type: text/html ” </li></ul><ul><li>echo </li></ul><ul><li>echo “<p>S...
<ul><li>< form   action =&quot; http://www.infoiasi.ro/ cgi-bin/max.cgi &quot; </li></ul><ul><li>method =&quot;GET&quot; >...
cgi | invocare/3 URL special (cazul GET)
<ul><li>Pentru fiecare cimp al formularului, se genereaza  o pereche  nume_cimp=valoare  delimitata de  &   care va fi ada...
<ul><li>Procesarea datelor prin metoda GET </li></ul><ul><ul><li>Datele vor fi disponibile in variabila  QUERY_STRING </li...
<ul><li>Procesarea datelor prin metoda POST </li></ul><ul><ul><li>Datele vor fi accesate de la intrarea standard ( stdin )...
<ul><li>Metoda GET se foloseste pentru generarea de  reprezentari ale resurselor cerute  (starea serverului nu trebuie sa ...
<ul><li>Scop: posibilitatea executiei scripturilor CGI  si a altor actiuni, direct din pagina Web </li></ul><ul><li>Comenz...
<ul><li>Comenzi uzuale: </li></ul><ul><ul><li>echo  – afiseaza valoarea anumitor variabile   <p>Data si timpul:    <!--# e...
<ul><li>Comenzi uzuale: </li></ul><ul><ul><li>flastmod  – ofera data ultimei modificari  a unui fisier (aflat pe serverul ...
<ul><li>Folosirea altor interfete de programare Web pe partea de server  </li></ul><ul><ul><li>mod_perl  (Apache) </li></u...
<ul><li>Caracteristici comune  ale serverelor de aplicatii Web </li></ul><ul><ul><li>Caracterizare </li></ul></ul><ul><ul>...
<ul><li>Ofera posibilitatea de a include cod ( script ) direct in cadrul documentelor Web, cod invocat pe server    gener...
<ul><li>Beneficiaza de facilitatile oferite de cadrul de lucru pus la dispozitie de serverul de aplicatii </li></ul><ul><u...
<ul><li>Beneficiaza de facilitatile oferite de cadrul de lucru pus la dispozitie de serverul de aplicatii </li></ul><ul><u...
<ul><li>Beneficiaza de facilitatile oferite de cadrul de lucru pus la dispozitie de serverul de aplicatii </li></ul><ul><u...
<ul><li>Beneficiaza de facilitatile oferite de cadrul de lucru pus la dispozitie de serverul de aplicatii </li></ul><ul><u...
<ul><li>Beneficiaza de facilitatile oferite de cadrul de lucru pus la dispozitie de serverul de aplicatii </li></ul><ul><u...
<ul><li>Beneficiaza de facilitatile oferite de cadrul de lucru pus la dispozitie de serverul de aplicatii </li></ul><ul><u...
<ul><li>Beneficiaza de facilitatile oferite de cadrul de lucru pus la dispozitie de serverul de aplicatii </li></ul><ul><u...
<ul><li>Beneficiaza de facilitatile oferite de cadrul de lucru pus la dispozitie de serverul de aplicatii </li></ul><ul><u...
<ul><li>Beneficiaza de facilitatile oferite de cadrul de lucru pus la dispozitie de serverul de aplicatii </li></ul><ul><u...
<ul><li>Standardul CGI  </li></ul><ul><li>Alternative </li></ul><ul><li>Caracteristici comune  ale serverelor de aplicatii...
<ul><li>Intrebari…? </li></ul>
Upcoming SlideShare
Loading in …5
×

Programare Web - De la CGI la servere de aplicatii

4,995 views

Published on

Short presentation of CGI standard and an overview regarding characteristics of Web application servers and frameworks.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Programare Web - De la CGI la servere de aplicatii

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

×