Tehnologii de baza pentru SD bazate pe Web - …software.ucv.ro/~cbadica/dadr/cap4.pdf · – gazda...

Post on 21-Aug-2018

215 views 0 download

transcript

2013

Tehnologii de baza pentru SD bazate

pe Web

Capitolul 4

2013

World Wide Web – Web sau WWW

• Web-ul este un sistem hipermedia distribuit. Se bazeaza

pe un model de structurare a documentelor ce foloseste

trei concepte:

– Multimedia – se refera la integrarea mai multor tipuri de

media in cadrul aceluiasi model de document: text, grafica,

imagine, video, etc.

– Hiperdocument – se refera la crearea de legaturi intre

documente, folosind un mecanism propriu modelului de

document.

– Documente distribuite – se refera la documente care contin

legaturi la documente stocate pe alte calculatoare din cadrul

unei retele.

2013

Web: documente hipermedia distribuite

• Web-ul foloseste un model de documente hipermedia distribuite. Hipermedia inglobeaza

– Multimedia

– Hiperdocument.

• Fiecare autor care creaza o resursa informationala (engl.information resource) in Web o considera ca fiind un document separat.

• La nivel global, multimea tuturor resurselor informationale din Web formeaza un unic document hipermedia distribuit. Din acest punct de vedere, termenul de resursa informationala este mai potrivit decat document.

• Exista trei nivele de distribuire a resurselor informationale in Web:

– acelasi fisier

– fisiere separate pe acelasi calculator

– fisiere separate pe calculatoare diferite.

2013

Portiune din Web

Internet

BrowsersWeb servers

www.google.com

www.cdk3.net

www.w3c.org

Protocols

Activity.html

http://www.w3c.org/Protocols/Activity.html

http://www.google.comlsearch?q=kindberg

http://www.cdk3.net/

File system ofwww.w3c.org

2013

Standarde Web

• Sunt specificatii formale si tehnice non-proprietare ale diverselor aspecte ale Web-ului.

• Ele sunt definite si promovate de comitete de standardizare (engl. standardization body) :– World Wide Web Consortium (W3C)

– Internet Engineering Task Force (IETF)

– International Organization for Standardization (ISO)

– European Computer Manufacturers Association (ECMA international)

• Specificatiile W3C pot avea constrangeri diverse: – recomandari (definitive, candidate, propuse)

– documente de lucru (engl. working draft)

2013

Arhitectura Web-ului

• Este o arhitectura client/server tipica.

– Un server Web are sarcina de a gestiona o multime de

documente din cadrul Web. Aceste documente se numesc si

pagini Web.

– Un client generic de Web este un program care emite cereri

catre un server Web pentru accesarea paginilor Web

gestionate de acel server. Exemple de clienti sunt:

• Un navigator WWW care permite regasirea si afisarea paginilor

WWW in scopul vizualizarii continutului lor de catre un agent

uman.

• Un program de tip softbot care localizeaza diverse pagini WWW

in scopul crearii unui index. Indexul poate fi utilizat ulterior de un

motor de cautare.

2013

Web – concepte de baza

• Conceptele de baza ale Web-ului:

– Schema de numire a resurselor (engl.uniform resource locator) URL

– Protocolul de transfer al documentelor (engl. hypertext transfer protocol) HTTP

– Limbajul de reprezentare a continutului paginilor Web (engl.hypertext markup language) HTML

2013

Identificarea resurselor in Web

• Pentru identificarea resurselor Web se foloseste un URL (engl. Uniform Resource Locator). Un URL este un identificator simbolic al resursei si este compus din doua parti:– Schema, care indica modalitatea folosita pentru denumirea resurselor. Spre

exemplu, schema poate fi numele unui proocol: ftp, http, etc

– Partea specifica schemei, care indica cum se adreseaza resursa in cadrul schemei

• Sintaxa URL este schema “:” parte-specifica-schemei. Partea specifica schemei are sintaxa “//” [utilizator [“:” parola] “@” ] gazda [ “:” port] “/” cale– utilizator si parola sunt optionale si se aplica doar cu schemele care au sens (de

exemplu ftp).

– gazda indica numele calculatorului pe care se afla resursa, sau adresa sa de IP.

– port reprezinta numarul portului pe care se face conexiunea. Este optional, deoarece acest numar este predefinit pentru serviciile standard. Pentru HTTP portul predefinit este 80.

– cale reprezinta calea de acces la resursa din cadrul calculatorului specificat. In general este o cale fizica existenta in sistemul de fisiere de pe calculatorul gazda.

2013

URN

• URN (engl. uniform resource name) reprezinta un numesimbolic unic atasat unei resurse Web.

• Un exemplu de URN in afara contextului Web este ISBN-ulunei carti:

ISBN 0-486-27557-4 (urn:isbn:0-486-27557-4)

• Un exemplu in Web este DOI (engl. digital object identifier). El este un identificator pentru identificarea unica a unuidocument electronic (articol sau carte). Este folosit de bibliotecile digitale online.

• Un exemplu de DOI in web este:

doi:10.1000/182

• El se poate transforma intr-un URL prin adaugarea unui prefix Web, astfel:

– http://dx.doi.org/10.1000/182

2013

Istoric HTTP

• Este protocolul de comunicare intre clientii si serverele Web. Specifica cererile care pot fi adresate de clienti si raspunsurile care pot fi generate de servere. Specificatia defineste structura si formatul (sintaxa) acestora.

• HTTP/0.9 (versiunea initiala), inainte de raspandirea WWW, foarte limitata. Singura cerere admisa este GET, la care serverul raspunde cu documentul cerut.

• HTTP/1.0 (1992), este un document informativ, nu un standard. Foloseste conceptul de tip media (MIME). S-au introdus noi cereri, de exemplu cererea POST pentru trimiterea de date de la client catre server.

• HTTP/1.1 (1997). Inlatura problemele versiunii anterioare: i) modelul interactiunii unice cerere/raspuns pe conexiune TCP/IP, model care are performante slabe. Aceasta versiune introduce conexiunile persistente; ii) lipsa de suport pentru gazdele virtuale non-IP. Conceptul de gazda virtuala (engl.virtual host) permite unui server WWW sa deserveasca cereri catre mai multe calculatoare gazda. In HTTP/1.1 este posibil sa se specifice explicit in cererea HTTP calculatorul gazda careia ea ii este adresata rezultand astfel conceptul de gazda virtuala non-IP.

2013

HTTP – protocol cerere-raspuns

• HTTP = protocol de aplicatie de tip cerere-raspuns (engl.request-reply).

• Protocoalele de aplicatie faciliteaza comunicatia intre componentele unei aplicatii distribuite. Exemple: SMTP, IMAP, POP3, etc.

• Conform modelului cerere-raspuns, un proces client emite cereri catre un proces server. Procesul server proceseaza cererea si intoarce un raspuns.

• Se mai numeste model pull, prin contrast cu un model push in care clientul este instiintat automat de schimbarile de stare ale serverului.

• Cererile si raspunsurile HTTP se mai numesc si mesaje. Un mesaj este un sir de caractere ce contine: linia de start (engl.start line), zero sau mai multe campuri antet (engl.message header field) si optional un camp corp (engl.message body field).

• Cererile contin informatii de identificare a tipului entitatilor. Se foloseste formatul MIME (Multipurose Internet Mail Extensions). Untip MIME specifica un tip si un subtip, de exemplu: text/plain, text/html, image/jpeg, etc.

2013

Cereri si raspunsuri HTTP I

• Antetele unui mesaj pot fi: antete generale (engl.general header) – se refera la mesaj, nu la entitatea transmisa; antete de entitate (engl.entity header) – se refera la entitatea transmisa sau referita; antete raspuns (engl.response header) –serverul comunica clientului informatii care nu au fost incluse in linia de start.

• Se pot transmite manual cereri catre un server de Web folosind telnet.

• Cereri – Linia de start se numeste linie de cerere (engl.request line) si are structura:

metoda spatiu url_resursa spatiu versiune_http sfarsit_linieGET /staff/badica/index.html HTTP/1.1

Connection: Keep-Alive

Host: www.dcs.kcl.ac.uk

Accept: text/html

2013

Cereri si raspunsuri HTTP II

• Raspunsuri – Linia de start se numeste linie de stare(engl.status line). HTTP/1.1 200 OK

Date: Thu, 01 Aug 2002 16:03:06 GMT

Server: Apache/1.3.20 (Unix) PHP/4.0.3pl1 mod_perl/1.26

Keep-Alive: timeout=15, max=100

Connection: Keep-Alive

Transfer-Encoding: chunked

Content-Type: text/html

2d8

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">

<html>

....

</html>

2013

Sintaxa formala a unei cereri HTTP

• HTTP 1.0 este descris la nivel informativ in documentul RFC 1945.

• HTTP 1.1 este descris in propunerea de standard RFC 2068.

• O cerere HTTP are structura urmatoare ([...] specifica un element optional si * specifica 0 sau mai multe repetitii ale unui element):

cerere = linie-de-cerere

(antet-general | antet-cerere | antet-entitate)*

sfarsit-de-linie

[corp-mesaj]

linie-de-cerere = metoda spatiu uri spatiu versiune-http sfarsit-de-linie

metoda =OPTIONS | GET | HEAD | POST | PUT | DELETE |

TRACE | CONNECT | metoda-extensie

uri = * | uri-absolut | cale-absoluta

2013

Sintaxa formala a unui raspuns HTTP

Un raspuns HTTP are structura urmatoare:

raspuns =

linie-de-stare

(antet-general | antet-raspuns | antet-entitate)*

sfarsit-de-linie

[corp-mesaj]

linie-de-stare = versiune-http spatiu cod-stare spatiu fraza-motiv sfarsit-de-linie

cod-stare = cod-succes | redirectare |

eroare-client | eroare-server | ...

cod-succes = ok | creat | acceptat | ...

ok = 200

creat = 201

acceptat = 202

redirectare = mutat-permanent | mutat-temporar

| ...

mutat-permanent = 301

mutat-temporar = 302

eroare-client = cerere-gresita | neautorizat |

plata-necesara | interzis |

resursa-inexistenta | metoda-nepermisa | ...

cerere-gresita = 400

neautorizat = 401

plata-necesara = 402

interzis = 403

resursa-inexistenta = 404

metoda-nepermisa = 405

eroare-server = eroare-interna | nu-este-

implementata | ...

eroare-interna = 500

nu-este-implementata = 501

2013

Cookies

• HTTP este un protocol fara stare (engl.stateless). HTTP nu dispune de un mecanism propriu care sa permita unui server Web sa poata pastra informatii despre starea clientului.

• Termenul de cookie se refera la mecansimul prin care o aplicatie Web pe partea de server poate stoca si regasi informatii despre starea unui client.

• Serverul specifica clientului ca vrea sa stocheze un cookie prin antetul Set-Cookie, in maniera urmatoare:

Set-Cookie: Nume=Valoare

• Ulterior, clientul va include cookie-ul intr-un antet al unei cereri sub forma:

Cookie: Nume=Valoare

• Suplimentar, antetul Set-Cookie mai poate contine urmatoarele informatii:

– domain: specifica domeniul in care se aplica cookie-ul

– expires: specifica data de expirare a cookie-ului

– path: specifica URL-urile la care clientul va returna cookie-ul in cererea HTTP

– secure: specifica faptul ca cookie-ul va fi returnat de client numai daca conexiunea este sigura.

Ex: Set-Cookie: Credit=111; secure; expires=Thursday, 07-Dec-2000, 10:00:00 GMT; domains=.comp-craiova.ro; path=/

2013

HTML – Concepte

• Lingua franca pentru hipertext in Web.

• HTML este inspirat din SGML. SGML a fost inventat in 1986 (mult inainte de aparitia Web).

• SGML este un limbaj de meta-marcare (engl.meta-markup). In esenta el permite definirea de noi tipuri de documente printr-o definitie de tip de document – DTD. Unui tip ii corespunde un limbaj de marcare specific (ex. HTML). El descrie continutul si structura unui document. Un document scris intr-un limbaj de marcare contine:

– Date = continutul propriuzis al documentului.

– Marcaje = informatii referitoare la structura documentului. Se numesc si metadate.

• XML este un limbaj de meta-marcare inspirat tot de SGML.

2013

HTML – Istoric

• HTML 2.0, standardul fiind fost propus in 1995 cu scopul de a colecta intr-un unic document toate capabilitatile HTML existente in practicainainte de 1994.

• HTML 3.2, descris intr-o recomandare W3C din 1997 cu scopul de a prezenta consenul privind facilitatile HTML existente pana in 1996. Extinde HTML 2.0 cu noi facilitati ca: tabele, miniaplicatii (engl.applet), mixarea armonioasa a textului si imaginii, etc., pastrandu-se in acelasi timp compatibilitatea inapoi.

• HTML 4.0, descris intr-o recomandare W3C de la sfarsitul din 1997, revizuita la inceputul lui 1998. Extinde HTML 3.2 cu noi facilitati pentru multimedia, scripting, foi de stiluri (engl.style sheets), internationalizare, acces pentru utilizatorii cu dizabilitati, etc. HTML 4.0 a fost inlocuit la sfarsitul lui 1999 cu HTML 4.01.

• XHTML 1.0, este o reformulare a HTML 4.01 ca aplicatie XML intr-o recomandare W3C de la inceputul lui 2000. La inceputul lui 2001 XHTML 1.1 extinde XHTML 1.0 cu facilitati pentru modularizare.

• HTML 5.0 este succesorul lui HTML 4.01 si XHTML 1.1.

2013

HTML 4.0

• Pentru a sprijini si versiunile mai vechi de HTML, versiunea 4.0 defineste 3 tipuri de documente HTML:

– Documente tranzitionale: acest tip se va folosi doar pentru verificarea documentelor HTML, in nici un caz pentru generarea de noi documente. Astfel, elemente ca BASEFONT, FONT, CENTER, S, STRIKE sau U sunt

doar parte a documentelor tranzitionale. Ele sunt folosite pentru formatare. In viitor formatarea se va face cu foi de stiluri CSS.

– Documente stricte: acest tip nu include elementele prezente in documentele tranzitionale pentru compatibilitate cu versiunile anterioare de HTML.

– Documente tip colectii de pagini

• Tipul de document se defineste printr-o definitie de tip (concept preluat din SGML). Definitia de tip se specifica optional la inceputul unui document HTML astfel:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"

"http://www.w3c.org/TR/REC-html40/strict.dtd">

2013

Structura unui document HTML

• Un document HTML contine date si marcaje (engl.tag). Marcajele contin informatia de formatare, iar datele reprezinta continutul efectiv al documentului. Marcajele sunt interpretate de catre programul navigator, ele determinand modul in care vor fi afisate datele. Marcajele pot fi: marcaje de inceput (engl.start tag) si marcaje de sfarsit (engl.end tag).

• Un marcaj de inceput poate contine optional atribute cu valori si se scrie astfel:

<marcaj atribut = ”valoare” atribut = ”valoare”…>

Ex: <img src= ”logo.gif” alt=”home page” >

• Un marcaj de sfarsit se scrie astfel:

</marcaj>

Ex: </img>

• Teoretic marcajele trebuie inchise corect, exact ca parantezele dintr-o expresie matematica. In practica insa, deseori, marcajele de sfarsit se omit, ambiguitatile fiind rezolvate prin metode ad-hoc de programul navigator. Acesta este in general un lucru rau.Din acest motiv la ora actuala HTML a devenit XHTML, bazat pe XML. In XML un document este bine-format (engl.well-formed), adica un document in care marcajele sunt inchise corect.

• In principiu un document HTML contine un antet (engl.header) si un corp (engl.body) intre marcajele <html> si </html>. html se numeste si element radacina al

documentului.

2013

Clasificarea elementelor HTML

• Elemente nivel bloc (engl.block-level). Ex: P, H, UL, OL, PRE, TABLE, FORM, ...

• Elemente incluse (engl.inline). Ex: I, B, U, EM, STRONG, A, IMG, ...

• Diferentele exista pe 3 coordonate: continut, formatare si directionalitate.

• Continut: – Un element de nivel bloc poate contine elemente incluse si elemente de nivel bloc.

– Un element inclus poate contine numai elemente incluse si date.

– Aceasta distinctie sugereaza ca elementele de nivel bloc pot crea structuri mai bogate decat elementele incluse.

• Formatare:– Elementele de nivel bloc sunt formatate intotdeauna incepand cu o linie noua, in timp

ce elementele incluse nu.

– Elementele incluse pot fi despartite pe mai multe linii (la fel cum textul unui paragraf se desparte in linii), in timp ce elementele de nivel bloc nu.

• Directionalitate (se refera la directia in care este scris textul):– Elementele de nivel bloc mostenesc directionalitatea de la elementul cuprinzator, in

timp ce elementele incluse nu.

2013

<HTML>

<HEAD>

<TITLE> Un exemplu simplu de pagina WWW </TITLE>

</HEAD>

<BODY>

<H1> Costin Badica despre HTML </H1>

Un document HTML contine:

<UL>

<LI> marcaje - marcajele pot fi:</LI>

<UL>

<LI>marcaje de inceput</LI>

<LI>marcaje de sfarsit</LI>

</UL>

<LI> date </LI>

</UL>

si este compus din:

<UL>

<LI> un antet </LI>

<LI> un corp </LI>

</UL>

</BODY>

</HTML>

Un exemplu de document HTML

html

head body

title h1 ... ul ul...

...

Structura interna a unui document HTML are

forma unui arbore. Nodurile arborelui se numesc

elemente.

2013

Formatarea textului in HTML

• Textul HTML poate fi simplu sau structurat.

• Textul simplu este format din paragrafe (p), separate de linii libere (br) sau titluri (engl.headings, h1, h2,…, h6). Textul poate avea stiluri (ex. bold b, italic i, etc), fonturi (font, basefont)

• Textul structurat cuprinde liste si tabele.

• Listele sunt: liste neordonate (ul, li) cu elementele indicate cu simboluri nenumerice (engl.bullet), liste ordonate (ol, li) cu elementele numerotate, si liste de definitii (dl, dd) cu simbolurile elementelor definite de utilizator.

• Tabelele (table) permit structurarea textului in linii si coloane. In principiuun tabel contine unul sau mai multe corpuri de tabel (engl.table body, tbody). Un corp de tabel contine una sau mai multe linii (engl.row, tr). O linie este formata din celule. Acestea pot fi celule antet (engl.header cell, th) sau celule de date (engl.data cell, td).

• Pentru tabele exista si alte elemente si atribute optionale care specifica titlul tabelului (caption), alinierea celulelor (align), stilul conturului (border), formatarea textului in celule, etc. Spre exemplu stilul (grosimea) conturului se specifca astfel: <table border=”1”>.

2013

<TABLE BORDER ="2">

<CAPTION>Tabelul</CAPTION>

<TBODY>

<TR>

<TH>1</TH>

<TH>2</TH>

</TR>

<TR>

<TD>1</TD>

<TD>2</TD>

</TR>

<TR>

<TD>Linie</TD>

<TD>Linie</TD>

</TR>

</TBODY>

<TBODY>

<TR>

<TD>Alta linie</TD>

</TR>

</TBODY>

</TABLE>

Un exemplu de tabel HTML

2013

Legaturi HTML

• Se bazeaza pe folosirea de ancore (engl.anchor) cu elementul a. Exista doua tipuri de ancore: ancore sursa si ancore destinatie.

• Ancorele sursa au forma

<a href=”url”>text</a>

si reprezinta originea unei legaturi. url reprezinta resursa destinatie a

legaturii. text este textul afisat in zona sensibila a legaturii.

• Ancorele destinatie au forma

<a name=”nume”></a>

si reprezinta destinatia unei legaturi. Numele unei ancore destinatie

poate fi specificat intr-o ancora sursa prin #nume pe post de url.

Ancorele destinatie se pot specifica si cu atributul id in cadrul

elementului referit, in acest caz numai fiind nevoie sa se foloseasca

elementul a.

2013

Paginile Web statice si dinamice

• Paginile Web pot fi statice si dinamice.

• Paginile statice sunt stocate pe server si returnate clientilor ca raspuns la cereri GET.

• Paginile dinamice sunt generate dinamic de server,

nefiind stocate explicit. Este posibil ca aceste pagini sa

fie configurate pe baza unor date trimise de la client

catre server. Astfel de date pot fi de exemplu criterii de

cautare intr-o baza de date, paginile generate dinamic

fiind in acest caz rapoartele rezultate in urma cautarii.

2013

Trimiterea de date catre un server Web

• Exista doua metode de a transmite date de la client la server:

– Folosind metoda GET, datele sunt atasate URL-ului sub forma unor perechi variabila-valoare. In acest caz URL-ul reprezinta un program aflat pe server si datele sunt transmise acestui program in mediul sau de executie (engl.environment). La URL se adauga un sir de forma:

?nume1=valoare1&nume2=valoare2& … &numen=valoaren Un caracter special printr-un cod hexa precedat de ’%’. Ex. ?cale=%2Fweb%2

semnifica valoarea /web/ pentru variabila cale.

– Folosind metoda POST, datele sunt atasate in corpul cererii, spre deosebire de cazulanterior, unde sunt atasate URL-ului, in antet. Ele sunt transmise programului prin intrarea standard.

• Serverul preia datele de la programul invocat prin iesirea standard si le returneaza clientului. Tehnica de a extinde functionalitatea serveruluiWeb pentru generarea dinamica de pagini se numeste Common Gateway Interface (CGI).

2013

Formulare HTML• Formularele (engl.form) furnizeaza interactivitate paginilor Web. Ele se

specifica cu elementul form ce accepta atributele: action ce indica programul de prelucrare a datelor formularului, method ce specifica metoda HTTP folosita la transferul datelor catre server (GET sau POST), target pentru a specifica fereastra ce contine formularul, etc.

• In interiorul elementului form se introduc elemente pentru descrierea

controalelor de interactivitate. Acestea pot fi:– input, un element general cu tipul descris prin atributul type. Acesta poate fi: text pentru o caseta de editare, password pentru o caseta de editare a unei parole, checkbox pentru o caseta de validare, radio pentru un buton de selectie exclusiva (engl.radio button), submit pentru un buton de trimitere a datelor catre

server, etc.

– select, pentru definirea unui meniu. Optiunile meniului se descriu cu elementele option si optgroup. Meniul este cu selectie simpla sau multipla (multiple)

– textarea, pentru definirea unei camp de editare multilinie.

• Pentru vizualizarea datelor trimise la server se va implementa formularul cu metoda GET si se va vizualiza URL-ul generat in campul de adresa al

navigatorului Web.

2013

Un exemplu de formular HTML (I)<HTML>

<HEAD><TITLE> Un exemplu de formular </TITLE></HEAD>

<BODY>

<FORM METHOD ="GET">

<INPUT TYPE="TEXT" NAME="Nume" SIZE="15"></INPUT><P/>

<INPUT TYPE="PASSWORD" NAME="Parola" SIZE="6"></INPUT><P/>

<INPUT TYPE="CHECKBOX" NAME="Validare" CHECKED="on"></INPUT><P/>

<INPUT TYPE="RADIO" NAME="Grup" VALUE="1" CHECKED>1</INPUT>

<INPUT TYPE="RADIO" NAME="Grup" VALUE="2">2</INPUT><P/>

<INPUT TYPE="SUBMIT" NAME="Trimite" VALUE="Trimite"></INPUT><P/>

<INPUT TYPE="FILE" NAME="Poza" ACCEPT="image/gif" MAXLENGTH="40"

SIZE="12"></INPUT><P/>

<INPUT TYPE="HIDDEN" NAME="Secret" VALUE="Secret"></INPUT><P/>

<INPUT TYPE="BUTTON" NAME="Actiune" VALUE="Actiune"></INPUT><P/>

<INPUT TYPE="IMAGE" NAME="Imagine" VALUE="Imagine" SRC="tiny.jpg"></INPUT><P/>

<INPUT TYPE="RESET" NAME="Initializare" VALUE="Initializare"></INPUT><P/>

<TEXTAREA NAME="COMENTARIU" ROWS="6" COLS="10"></TEXTAREA><P/>

<SELECT NAME="OPTIUNI" SIZE="1">

<OPTION VALUE="Valoarea 1">Valoarea 1</OPTION>

<OPTION VALUE="Valoarea 2">Valoarea 2</OPTION>

</SELECT>

</FORM>

</BODY>

</HTML>

2013

Un exemplu de formular HTML (II)

2013

Un exemplu de formular HTML (III)

• Datele transmise de client serverului (partea de dupa ’?’ din URL)

pentru un scenariu de folosire a formularului prezentat arata astfel:

Nume=abc&

Parola=12ab&

Validare=on&

Grup=2&

Trimite=Trimite&

Poza=C%3A%5Cbackup%5Cpersonal%5CDarrelInceBook%5CCd+

Book%5Cindex.htm&

Secret=Secret&

COMENTARIU=comentariu&

OPTIUNI=Valoarea+2

• %3A este ’:’

• %5C este ’\’

• ’+’ este ’ ’

2013

Comunicarea cu un server de Web

• Se considera o aplicatie pentru comunicarea cu un server de Web.

• Presupunem ca ne intereseaza doar simpla descarcare a unei pagini de la o adresa data.

• Aplicatia va rula pe rol de client, asemanator cu un navigator de Web.

• Aplicatia realizeaza urmatorii pasi:– Construieste un soclu conectat la URL-ul server-ului si portul corespunzator. Implicit

un server de Web asculta pe portul 80, dar se poate specifica si un alt port.

– Construieste o cerere GET de forma GET cale_resursa, unde cale_resursa reprezinta numele resursei in sistemul de fisiere al serverului, relativ la o radacina implcita si o transmite serverului.

– Receptioneaza raspunsul si il afiseaza (in cazul nostru afisarea se face la iseirea standard).

– Inchide conexiunea prin inchiderea fluxurilor asociate conexiunii si a soclului asociat conexiunii.

• Aceasta aplicatie va putea fi testata in doua ipostaze:– Folosind unul dintre serverele disponibile in Web

– Folosind un server de Web de test, pe care il vom crea ulterior.

2013

Implementarea unui client simplu de HTTP - I

import java.io.*;

import java.net.*;

public class WebRetriever {

Socket soc;

OutputStream os; InputStream is;

WebRetriever(String server, int port) throws IOException, UnknownHostException {

soc = new Socket(server, port);

os = soc.getOutputStream();

is = soc.getInputStream();

}

void request(String path) {

try {

String message = "GET " + path + "\n\n";

os.write(message.getBytes());

os.flush();

} catch (IOException e) {

System.err.println("Error in HTTP request");

}

}

2013

Implementarea unui client simplu de HTTP - II

void getResponse() {

int c;

try {

while ((c = is.read()) != -1)

System.out.print((char) c);

} catch (IOException e) {

System.err.println("IOException in reading from Web server: “

+ e.getMessage());

}

}

public void close() {

try {

is.close();

os.close();

soc.close();

} catch (IOException e) {

System.err.println("IOException in closing connection");

}

}

2013

Implementarea unui client simplu de HTTP - III

public static void main(String[] args) {

try {

// WebRetriever w = new WebRetriever("www.nus.edu.sg", 80);

// w.request("/NUSinfo/UG/ug.html");

// Din broswer: http://127.0.0.1:8080/exemplu.html

WebRetriever w = new WebRetriever("localhost", 8080);

w.request("/exemplu.html");

w.getResponse();

w.close();

} catch (UnknownHostException h) {

System.err.println("Hostname Unknown");

} catch (IOException i) {

System.err.println("IOException in connecting to Host");

}

}

}

2013

Utilizarea clientului de HTTP

• Clientul se poate rula considerand sintaxa simplificata a metodei GET:GET /~badica_costin/proiecte/hiperproc/index_e.html

• si apoi considerand sintaxa completa:GET /~badica_costin/proiecte/hiperproc/index_e.html HTTP/1.1

Connection: Keep-Alive

Host: software.ucv.ro

Accept: text/html

• Se observa ca in primul se livreaza direct continutul HTML al resursei.

• In al doilea caz apare un raspuns detaliat conform sintaxei raspunsurilor HTTP:HTTP/1.1 200 OK

Date: Mon, 31 Mar 2008 15:50:50 GMT

Server: Apache/1.3.37 (Unix) mod_ssl/2.8.28 OpenSSL/0.9.8b PHP/4.4.4

Last-Modified: Thu, 23 Feb 2006 09:54:23 GMT

ETag: "9f41-1c78-43fd864f"

Accept-Ranges: bytes

Content-Length: 7288

Keep-Alive: timeout=15, max=100

Connection: Keep-Alive

Content-Type: text/html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">

<html>

2013

Implementarea unui server de Web - I

• Se considera un server de Web foarte simplu ce recunoaste doar comenzi GET.

• Presupunem ca serverul determina resursa prin cautarea caii specificate in comanda GET, relativ la directorul curent.

• Aplicatia va rula pe rol de server, similar cu un server de Web. Ne putem conecta la server atat folosind un navigator Web, cat si aplicatia client prezentata anterior.

• Serverul realizeaza urmatorii pasi:

– Construieste un soclu de ascultare conectat la un port local, fie acesta portul 8080. Implicit un server de Web asculta pe portul 80, dar se poate specifica si un alt port. In cazul folosirii pe post de client.a unui navigator Web, portul trebuie specificat explicit in URL.

– Intr-o bucla infinita realizeaza pasii:

• Se accepta o conexiune de la un client.

• Se preia o cerere si se determina calea catre resursa. Cererea se considera incheiata la intalnirea unei linii vide.

• Se returneaza resursa catre client.

• Se inchide conexiunea.

• Serverul se va putea fi testata in doua ipostaze:

– Folosind un navigator de Web. In acest caz trebuie specificat explicit portul 8080 in URL, astfel: http://localhost:8080/exemplu.html sau http://127.0.0.1:8080/exemplu.html

– Folosind clientul creat anterior.

2013

Implementarea unui server de Web - IIimport java.io.*;

public class WebServer {

Socket soc;

OutputStream os; BufferedReader is;

String resource;

void getRequest() {

try {

String message;

while ((message = is.readLine()) != null) {

if (message.equals(""))

break; // end of command block

System.out.println(message);

StringTokenizer t = new StringTokenizer(message);

String token = t.nextToken(); // get first token

if (token.equals("GET")) { // if token is ”GET”

resource = t.nextToken(); // get second token

System.out.println(resource);

}

}

} catch (IOException e) {

System.err.println("Error receiving Web request");

}

}

2013

Implementarea unui server de Web - IIIvoid returnResponse() {

int c;

try {

FileInputStream f = new FileInputStream("."+resource);

while ((c = f.read()) != -1)

os.write(c) ;

f.close();

} catch (IOException e) {

System.err.println("IOException in reading in Web server");

}

}

public static void main(String args[]) {

try {

ServerSocket s = new ServerSocket(8080);

for (;;) {

WebServer w = new WebServer(s.accept());

w.getRequest();

w.returnResponse();

w.close();

}

} catch (IOException i) {

System.err.println("IOException in Server");

}

}

2013

Implementarea unui server de Web - IV

public void close() {

try {

is.close(); os.close(); soc.close();

} catch (IOException e) {

System.err.println("IOException in closing connection");

}

}

WebServer(Socket s) throws IOException {

soc = s;

os = soc.getOutputStream();

is = new BufferedReader(

new InputStreamReader(soc.getInputStream()));

}

}

2013

Servere Web

• Server Web = un program cu rol de server care este capabil sa raspunda la cereri HTTP.

• Modul de functionare al unui server Web este foarte important pentru infrastructura si aplicatiile Web, desi in acelasi timp este ascuns utilizatorilor uzuali ai Web.

• Probleme importante referitoare la serverele Web sunt:

– Performanta

– Configurarea si administrarea

– Extensia si programarea

• Exemple de servere Web:

– Apache Tomcat (disponibil liber in domeniul public este) httpd

– MS Internet Information Services-IIS

2013

Functii de baza ale serverelor Web

2013

Performanta serverelor Web

• Parametrii de baza ai performantei unui server Web:

– Numar de cereri / secunda (in functie de tipul de cerere)

– Latenta = timp de raspuns in milisecunde pentru fiecare conexiune sau cerere noua

– Rata de transfer (engl. throughput) in numar de octeti / secunda in functie de dimensiunea paginilor, caching-ul continutului, latimea de banda a retelei (engl. network bandwidth).

• Instrumente pentru evaluarea performantei serverelor Web:

– ApacheBench: http://en.wikipedia.org/wiki/ApacheBench

– http://en.wikipedia.org/wiki/Web_server_benchmarking

2013

Configuratii de servere Web

• Optiunile de configurare ale unui server Web se refera

in general la:

– Modul in care se va executa serverul pe masina care il

gazduieste:

• la cerere

• permanenta

– Daca serverul deserveste mai multe domenii folosind un

singur calculator si o singura adresa de IP. Aceste domenii

se numesc gazde virtuale (engl.virtual host).

– Modul de lucru:

• server de origine

• proxy

2013

Executia la cerere a serverelor Web

• Este o metoda mai veche. Presupune existenta unui

superserver care asculta toate cererile pe o multime de

porturi si pentru fiecare in parte activeaza si executa

serverul corespunzator. In UNIX acest superserver se

numeste inetd.

• Aceasta metoda are marele dezavantaj ca necesita

prea multe resurse sistem de fiecare data cand se

incarca serverul in memorie si se creaza procesul

aferent.

• Este utila pentru servicii care functioneaza la un nivel

scazut de incarcare.

2013

Executia permanenta a serverelor Web

• Serverul este pornit manual de utilizator sau automat

la pornirea sistemului si se executa in permanenta.

Dupa pornire serverul asculta cererile HTTP pe portul

pe care a fost configurat.

– Pornirea manuala este recomandata intr-un mediu de

dezvoltare a unei aplicatii Web.

– Pornirea automata este recomandata dupa ce aplicatia Web

a fost instalata (engl.deployed).

• Serverul poate fi pornit:

– de la linia de comanda sau

– instalat ca serviciu al sistemului de operare.

2013

Gazde virtuale

• Un server Web poate deservi unul sau mai multe domenii numite gazde

virtuale.

• Gazdele virtuale usureaza activitatea de administrare a serverului

deoarece: exista o singura instanta a serverului, exista o singura

configuratie a serverului, se monitorizeaza executia unui singur server.

• Exista doua tipuri de gazde virtuale: gazde virtuale IP si gazde virtuale

non-IP.

• Gazde virtuale IP:

– Fiecare gazda virtuala este o gazda IP avand o adresa de IP distincta care apare ca

intrare in DNS.

– Se asigneaza toate adresele de IP ale gazdelor virtuale deservite masinii pe care

ruleaza serverul Web.

– Metoda este simpla dar are doua dezavantaje: i) este nevoie de o adresa de IP

distincta pentru fiecare gazda virtuala; ii) asignarea mai multor adrese de IP unei

singure masini poate crea probleme retelei.

2013

Gazdelor virtuale non-IP

• Gazde virtuale non-IP (sau bazata pe nume, engl. name-based):

– Se bazeaza pe un suport special oferit de protocolul HTTP. Acestsuport pentru deservirea gazdelor virtuale non-IP este disponibil numai in HTTP/1.1.

– HTTP/1.1 a introdus in cadrul unei cereri HTTP antetul special HOST. Acest camp antet este obligatoriu. El contine numele gazdei careia ii este adresata cererea.

– Configurarea gazdelor virtuale deservite se face analog cu cazulanterior. Singura diferenta este ca intrarile DNS ale gazdelor virtuale vor contine acum aceeasi adresa de IP.

– Metoda are doua avantaje: i) este nevoie de o singura adresa de IP pentru deservirea tuturor gazdelor virtuale; ii) crearea unei noi gazde virtuale non-IP se poate face mai usor decat in cazul gazdelor virtuale IP. Metoda are un dezavantaj: se poate aplica numai pentru versiunile HTTP ulterioare HTTP/1.1 (nu mai este o problema la ora actuala).

2013

Servere de origine

• Majoritatea serverelor Web sunt configurate ca servere de origine. In acest caz cerrile HTTP sunt tratate local de server.

• O problema importanta este localizarea resurselor, cu alte cuvinte maparea URL-ului intr-o adresa a unei resurse din cadrul sistemului local de fisiere. Resursele sunt de doua tipuri: statice (stocate fizic) si dinamice (generate de programe externe).

• Spatiul Web al unui utilizator specific se refera in URL prin caracterul ~urmat de numele utilizatorului. Spatiul Web al utilizatorilor se poate organiza in doua moduri:– Crearea unui spatiu Web central pentru toti utilizatorii. Unui utilizator ii va revni un

director in acest spatiu: webhome/name/.

– Crearea unui director special pentru fiecare utilizator in cadrul directorului personal: /home/name/WWW/.

Client Server de origine

1: Cerere catre server

2: Raspuns catre client

2013

Servere proxy

• Un server proxy accepta cereri pentru resurse si fie le rezolva din memoria cache locala, fie prin inaintarea cererii catre serverul de origine.

• Un server proxy actioneaza astfel ca un intermediar intre client si serverul de origine. Scopul intermedierii pote fi filtrarea cererilor sau trecerea de la un protocol nesigur la un protocol sigur, de exemplu HTTPS.

Client Proxy

1: Cerere catre proxy

4: Raspuns catre client

Server de origine

2: Cerere catre

server

3: Raspuns catre

proxy

2013

Tehnologii server pentru continut dinamic interactiv

• SSI

– Mecanism propriu serverului Web. Se refera la abilitatea de a modifica dinamic continutul unei pagini folosind directive de preprocesare adresate serverului. Ofera insa flexibilitate limitata.

• CGI

– Standard de comunicare intre un server de Web si un program extern. Acest program extern poate fi scris in C, Perl, Python, etc.

• Miniserveri si JSP

– Extensii ale unui server Web bazate pe tehnologiile Java.

• ISAPI si ASP

– Extensii ale unui server de Web bazate pe tehnologiile Microsoft.

• PHP

– Limbaj de scripting pentru partea de server inspirat din Perl si C.

2013

Servere de aplicatii

• Aplicatiile de comert electronic au o parte semnificativa pe partea de server. Pentru a descrie aceasta parte se foloseste frecvent termenul de aplicatie Web = extensia dinamica a unui server Web.

• Aplicatiile Web sunt in general de doua tipuri:– Aplcatii orientate pe prezentare. Contin pagini Web interactive si sunt capabile sa

genereze continut dinamic ca raspuns la cererile clientilor.

– Aplicatii orientate pe serviciu. Implementeaza un punct terminal pentru un serviciu Web. Serviciu Web = un serviciu oferit de o aplicatie altor aplicatii, prin intermediul platformei Web.

• Aplicatiile Web contin componente Web. Acestea sunt caramizile cu care se poate extinde dinamic functionalitatea unui server Web. In tehnologia Java, componentele Web sunt miniservere sau pagini JSP.

• Componentele Web sunt gazduite de o platforma speciale de executie numita container Web. Containerul furnizeaza servicii ca: dispecerizarea cererilor, securitate, concurenta, gestiunea ciclului de viata, etc.

• O aplicatie Web consta in general din: componente Web, fisiere de resurse statice si clase/biblioteci de ajutor (engl.helper).

2013

SSI

• SSI (engl.Server Side Include) este o tehnologie ce permite includerea de informatii intr-o pagina Web inainte de trimiterea paginii la client.

• O pagina care foloseste SSI contine instructiuni speciale. Aceste instructiuni sunt interpretate de server ori de cate ori pagina este ceruta de un client. Instructiunile pot specifica: includerea unor documente in pagina curenta (de exemplu un header sau un footer), a datei curente, a valorii unui contor de acces, etc.

• Avantajul SSI fata de CGI este ca este o tehnologie mult mai simpla si ca nu implica apelul nici unui program extern.

• Nu exista un standard de SSI si de aceea fiecare server are o sintaxa si functionalitate proprie pentru SSI. Pentru serverul Apache instructiunile SSI sunt de forma unor comentarii HTML/XML cu structura urmatoare:

<!-- #comanda atribut1=valoare1 atribut2=valoare2 ... -->

• Un exemplu este urmatorul:

<!--#include virtual="/header.html" -->

• Apache permite folosirea si a unor facilitati SSI avansate desemnate prin acronimul XSSI. Un exemplu este posibilitatea definirii unui flux de control ca in programarea procedurala prin comenzile if, elif, else si endif.

2013

Extensia functionalitatii serverelor Web

• Functionalitatea standard oferita de un server Web este insuficienta pentru programarea aplicatiilor.

• O aplicatie are o arhitectura multi-nivel (engl.n-tier), numarul de niveluri fiind de obicei minim 3: client, server Web, server de baze de date.

• Pe langa serverul Web mai exista obiectele din domeniul problemei (engl.business objects). Impreuna ele formeaza nivelul intermediar al unei arhitecturi tipice pentru o aplicatie de comert electronic.

• O varianta a extinderii functionalitatii unui server Web este folosirea interfetei CGI, insa ea prezinta dezavantaje:– Pentru fiecare cerere HTTP trebuie startat un proces separat.

– Interfata dintre serverul Web si scriptul CGI este nesatisfacatoare.

• O abordare eleganta o constituie solutia Java pentru extinderea functionalitatii unui server Web, si anume miniserverele Java (engl.Java servlet). Aceasta solutie are urmatoarele avantaje:– Portabilitate

– Miniserverele sunt rezidente si starea este persistenta intre cereri succesive

– Beneficierea de avantajele tehnologiei Java: orientare pe obiect, modelul de securitate Java, integrarea relativ usoara cu tehnologii ca RMI si CORBA

2013

CGI

• CGI (engl.Common Gateway Interface) defineste o interfata pentru comunicarea dintre un server de informatii (cum este cazul unui server Web) si un program de aplicatie.

• CGI este o interfata independenta de limbaj. Este posibil sa se implementeze o aplicatie CGI (numita si script CGI) in orice limbaj care suporta comunicarea standard intre procese prin intermediul intrarii si iesirii standard si a variabilelor de mediu. Pentru scripturile CGI se foloseste deseori unul dintre limbajele: Perl, Python sau Tcl. Se pot folosi insa si limbaje gen C/C++.

• Procesul de comunicare decurge astfel:

– Dupa primirea cererii HTTP si inaintea pornirii scriptului CGI, serverul initializeaza o multime de variabile de mediu (engl.environment variables). Aceste variabile vor fi mostenite de procesul corespunzator lansarii scriptului CGI. Existe variabile independente de cerere si variabile dependente de cerere. Pe langa aceste variabile de mediu, daca protocolul este HTTP, se creaza cate o variabila de mediu ce incepe cu prefixul HTTP pentru fiecare linie din antetul cererii (de exemplu HTTP_ACCEPT).

– Daca cererea contine informatii aditionale dupa antetul cererii, atunci informatia este trimisa scripului CGI la intrarea standard. Se trimite un numar de octeti egal cu valoarea variabilei de mediu CONTENT_LENGTH.

– Scriptul genereaza datele de iesire la iesirea standard. Pentru generearea raspunsului catre client, serverul fie interpreteaza si prelucreaza aceste date, fie le inainteaza nealterate. El indica acest acest lucru serverului prin antete speciale.

2013

Arhitectura CGI

Server HTTPClient Aplicatie

Date in cererea HTTP

Inainteaza datele aplicatiei

Rezultate pentru server

Returneaza rezultatele clientului

HTTP CGI

Server

2013

Miniservere

• Miniserverele (engl.servlet) sunt programe asemanatoare cu programele CGI ce ruleaza pe partea de server in cadrul unui mediu special de executie (engl. run-time) numit container.

• In principiu un miniserver:

– Preia date de la client

– Genereaza un raspuns, posibil interactionand cu fisiere si/sau baze de date

– Trimite rezultatul inapoi clientului

• Intr-o arhitectura multi-nivel miniserverele realizeaza interfata dintre nivelul de prezentare si nivelul de logica a aplicatiei.

2013

Functionarea miniserverelor

• Presupune urmatorii pasi:

– Un program client emite o cerere HTTP catre un server WWW.

– Serverul interpreteaza cererea si executa o secventa de program careia ii transmite parametrii cererii.

– Programul apelat interpreteaza parametrii cererii si executa o portiune de cod care genereaza dinamic o pagina HTML.

• Prelucrarile executate de miniserver pot duce la:

– Generarea unei pagini WWW statice.

– Generarea unei pagini WWW actualizata dinamic.

– Configurarea unei pagini WWW pe baza parametrilor cererii HTTP. Parametrii sunt preluati de la utilizator printr-un formular HTML.

• In general miniserverele sunt potrivite pentru aplicatiile orientate pe serviciu sau pentru controlul aplicatiilor orientate pe prezentare.

2013

Instalarea miniserverelor

• Se instaleaza Tomcat (implementarea de referinta pentru miniservere).

• Se porneste serverul cu comanda startup.

• Se verifica instalarea prin introducerea URL-ului: http://localhost:8080

• Aplicatia Web se instaleaza in directorul webapps al serverului. Pentru fiecare aplicatie exista cate un subdirector. Se poate folosi ca exemplu aplicatia ROOT.

• Se creaza directorul noi aplicatii, fie el mywebapp.

• Acest director va contine un subdirector WEB-INF/classes unde se vor instala clasele miniserverelor.

• In radacina directorului WEB-INF se creaza descriptorul de instalare a aplicatiei (engl.deployment descriptor). Acesta este un fisier cu numele web.xml. El va defini miniserverele din cadrul aplicatiei.

• Se creaza un fisier HTML index.html care permite invocarea miniserverului. Acest fisier se poate plasa in radacina aplicatiei. El poate fi afisat in programul navigator folosind URL-ul: http://localhost:8080/mywebapp/index.html

2013

Descriptorul de instalare

• Miniserverul se descrie cu marcajele servlet si servlet-mapping.

<?xml version="1.0" encoding="ISO-8859-1" ?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">

<servlet>

<servlet-name>FirstServlet</servlet-name>

<servlet-class>FirstServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>FirstServlet</servlet-name>

<url-pattern>/FirstServlet</url-pattern>

</servlet-mapping>

</web-app>

2013

Fisierul HTML de invocare

• Fisier HTML pentru invocarea miniserverului cu un buton de activare:<HTML>

<HEAD>

<TITLE>A First Servlet</TITLE>

</HEAD>

<BODY>

<BR><BR><BR>

<CENTER>

<FORM METHOD=GET ACTION="FirstServlet">

<INPUT TYPE="Submit" VALUE = "Click me!">

</FORM>

</CENTER>

</BODY>

</HTML>

• Miniserverul se poate invoca direct cu urmatorul URL:http://localhost:8080/<WebAppName>/<ServletName>

http://localhost:8080/mywebapp/FirstServlet

2013

Interfata implementata de un miniserver

• La fel ca si o miniaplicatie, un miniserver nu contine o functie main(). El va fi invocat de catre containerul de miniserveri la receptionarea unei cereri HTTP de catre serverul WWW. Pentru aceasta un miniserver trebuie sa implementeze o interfata javax.servlet.HttpServlet

• Dezvoltarea unui minserver presupune extinderea clasei javax.servlet.HttpServlet si redefinerea metodelor sale. Interfata cuprinde metodele service(), init() si destroy().

• La executarea unei cereri catre un miniserver au loc urmatoarele: i) daca miniserverul nu exista atunci containerul de miniserveri incarca clasa corespunzatoare miniserverului, creaza o instanta a acestei clase si apeleaza metoda init(); ii) se apeleaza metoda service(). In functie de tipul cererii, ea va apela o metoda doYYY() unde YYY identifica cererea HTTP, de exemplu doGet() sau doPost().

• Cand containerul trebuie sa descarce miniserverul din memorie el va apela metoda destroy().

• Metodele init() si destroy() se refera la ciclul de viata al miniserverului

(la fel ca la miniaplicatii). Aceste operatii se executa mult mai rar decat service().

2013

Prelucrarile din cadrul unui miniserver

• In cadrul metodelor init() si destroy() se implementeaza acele prelucrari care

asigura persistenta informatiei stocate de miniserver.

• In metodele service() sau doYYY() se implementeaza prelucrarile legate de tratarea cererilor primite de la client. Acestea presupun de obicei urmatoarele:

– Setarea tipului continutului in obiectul raspuns HTTP, de tip javax.servlet.http.HttpServletResponse:

raspuns.setContentType("text/html");

– Obtinerea unui flux de iesire la nivel de octet (OutputStream obtinut din raspuns cu getOutputStream()) sau la nivel de caracter (PrintWriter obtinut din raspuns cu getWriter()):

PrintWriter iesire = raspuns.getWriter();

– Obtinerea valorilor parametrilor cererii setati de client in formularul HTML, din obiectul cerere de tip javax.servlet.http.HttpServletResponse, cu getParameter(). Daca numele parametrilor este necunoscut atunci se poate obtine lista numelor parametrilor cu getParameterNames().

– Construirea raspunsului prin scrierea in fluxul de iesire a unor enunturi HTML.

• Pentru aflarea de informatii de configurare se foloseste metoda getServletConfig() care intoarce un obiect SevletConfig. Din el se pot extrage parametrii de initializare ai miniserverului cu getInitParameter() si getInitParameterNames().

2013

Exemplu de miniserver

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class FirstServlet 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>Simple Servlet</TITLE>");

out.println("</HEAD>");

out.println("<BODY>");

out.println("<BR><BR><BR>");

out.println("<CENTER><H1>A Simple Servlet</H1></CENTER>");

out.println("</BODY>");

out.println("</HTML>");

out.flush();

}

}

2013

Invocare miniserver cu parametrii

<FORM METHOD=GET ACTION="PersonalServlet">

Enter your first name:

<INPUT TYPE="Text" NAME="FirstName" VALUE="">

<BR><BR>

<INPUT TYPE="Submit" VALUE="Submit">

</FORM>

• Se poate invoca si direct cu URL-ul:http://localhost:8080/mywebapp/PersonalServlet?FirstName=<v

aloare>

• Preluarea parametrilor se face cu metodele clasei HttpServletRequest:String getParameter(String <name>) – Determina valoarea unui parametru

trimis prin GET si POST

Enumeration getParameterNames() – Returneaza numele tuturor

parametrilor trimisi prin POST

String[] getParameterValues(String <name>) – Returneaza valorile

unui parametru care poate avea mai mult de o valoare.

2013

Miniserver cu parametrii

import javax.servlet.http.*;

public class PersonalServlet 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>Simple Servlet</TITLE>");

out.println("</HEAD>");

out.println("<BODY>");

out.println("<BR><BR><BR>");

String name = request.getParameter("FirstName");

out.println("<CENTER><H1> A Simple Servlet for ");

out.println(name + "</H1></CENTER>");

out.println("</BODY>");

out.println("</HTML>");

out.flush();

}

}

2013

Obiecte partajate

• Componentele Web in general si miniserverele in particular folosesc de obicei si alte obiecte pentru a-si indeplini sarcinile. Astfel: i) pot folosi obiecte private; ii) pot folosi obiecte publice – atribute ale unui domeniu standard; iii) pot accesa baze de date; iv) pot accesa alte resurse Web.

• Componentele Web cooperante pot partaja informatii sub forma unor obiecte definite ca atribute ale unui domeniu standard: context Web (aplicatie), sesiune, cerere HTTP si respectiv pagina JSP.

• Pentru reprezentarea acestor patru domenii, in pachetul javax.servlet sunt definite patru clase: ServletContext, HttpSession, ServletRequest si JspContext.

• Accesul la aceste obiecte se face prin metode de tip [get|set]Attribute.

2013

Sesiuni

• HTTP este un protocol fara stare (engl. stateless). Acest lucru inseamna ca orice pereche cerere-rapsuns reprezinta o tranzactie (conversatie) separata.

• Uneori este insa nevoie ca datele achizionate sa se pastreze intre interactiuni. Un exemplu: un cos electronic de cumparaturitrebuie actualizat astfel incat sa reflecte multiumea tuturor optiunilor de cumparare ale utilizatorului.

• Din acest motiv miniserverele implementeaza conceptul de sesiune ce reprezinta un container pentru datele privind activitatile unui client sunt stocate si eventual accesate de toate miniserverele care au acces la obiectul respectiv.

• O sesiune expira automat dupa o perioada de timp prestabilita (implicit 30 s) sau daca este invalidata explicit de miniserver (metoda invalidate()).

2013

Accesul la un obiect sesiune

• Crearea unei sesiuni (varianta fara parametrii sau cea cu parametrul create= true fie intoarce sesiunea curenta, daca exista, fie creaza o sesiune noua si o returneaza):HttpSession getSession()

HttpSession getSession(boolean create)

• Un obiect sesiune contine o multime de perechi atribut-valoare. Fiecare nume este String si fiecare valoare este Object. Valorile trebuie sa fie obiecte serializabile.

• Adaugarea de informatie la sesiune se face prin:void setAttribute(String <name>, Object <value>)

• Eliminarea unui valori se face cu metoda:Object removeAttribute(String <name>)

• Regasirea unei valori se face cu metoda:Object getAttribute(String <name>)

• Determinarea tuturor numelor se face cu:String[] getAttributeNames()

2013

Cookies

• Cookies ofera o alta modalitate de a pastra datele utilizatorului

in timpul cat acesta foloseste o aplicatie Web.

• Sesiunile pastreaza datele doar pe durata unei vizite a aplicatiei.

cookies pastreaza datele si intre vizite succesive. Sesiunile se

bazeaza tot pe cookies.

• Un cookie este o pereche nume-valoare care asociaza o valoare

cu un atribut. Este posibil sa se pastreze o sesiune pentru durata

unei sesiuni, ea putand fi pastrata pe calculatorul clientului

pentru utilizari viitoare.

• O cookie se pastreaza intr-un fisier trimis de server clientului.

Fisierul este retransmis catre server la fiecare vizita ulterioara a

acestuia a aplicatiei de pe server.

2013

Folosirea cookies

• O cookies se reprezinta cu clasa Cookie.

• Constructorul este:Cookie(String <name>, String <value>)

• Adaugarea unui cookie la un obiect HttpServletResponse:void addCookie(Cookie <cookie>)

• Determinarea cookie-urilor dintr-o cerere HttpServletRequest:Cookie[] getCookies()

• Alte metode utile ale clasei Cookie:void setComment(String <value>)

String getComment()

String getName()

String getValue()

void setValue(String <value>)

int getMaxAge()

2013

Fire multiple in miniservere

• Containerul de miniserveri utilizeaza fire de executie separate pentru tratarea cererilor. Pentru aceasta containerul are o rezerva (engl.pool) de fire de executie. Fiecarei cereri i se aloca un fir.

• Deoarece este teoretic posibil sa se execute cereri simultane pentru un acelasi miniserver, se pune problema gestionarii corecte a resurselor miniserverului ce sunt partajate de aceste cereri multiple. Resursele partajate pot fi: atribute ale domeniilor standard, variabile membre ale clasei miniserverului, fisiere, baze de date, conexiuni de retea, etc.

• Din acest motiv controlul accesului la resursele partajate se va realiza folosind tehnici de sincronizare.

• Variante:

– Cea mai simpla solutie este ca metoda service() sa se implementeze cu synchornized.

– Daca insa sectiunea critica din cadrul acestei functii se executa conditionat, atunci este mai eficient sa se foloseasca synchronized doar pentru portiunea de cod

corespunzatoare acelei sectiuni critice.

– Se poate crea o clasa pentru accesul la resursa partajata, metodele de acces fiind declarate synchronized.

2013

JSP

• JSP (engl.JavaServer Pages) este o tehnologie pentru generarea de pagini dinamice bazata pe ideea mixarii de cod Java cu cod HTML in paginile Web. Este recomandata pentru aplicatiile Web orientate pe prezentare.

• JSP functioneaza peste o arhitectura de miniservere.

• Arhitectura JSP poate fi descrisa ca o abstractizare de nivel inalt a miniserverelor Java.

• La incarcarea unui JSP, se genereaza automat codul javapentru miniserverul corespunzator si apoi acesta este compilat si incarcat in containerul de miniserveri. Acest proces se repeta ori de cate ori codul JSP este modificat.

• JSP Standard Tag Library (JSTL) este o colectie de bibliotecide tag-uri ce implementeaza functionalitati de baza necesareaplicatiilor Web.

2013

PHP

• Este o tehnologie bazata pe un limbaj de scripting pe partea de server, inspirat din C si Perl.

• Ofera un acces facil la o varietate de baze de date bazate pe SQL: mySQL, Oracle, PostgresSQL, ODBC, dBASE, Informix, etc si se poate folosi impreuna cu o varietate de servere Web incluzand Apache si MS IIS.

• Limbajul PHP a fost creat in 1995 de Rasmus Lerdorf (danez cu cetatenie canadiana).

• http://en.wikipedia.org/wiki/PHP

• Versiunea curenta este PHP 5.4

• http://www.php.net/

2013

ASP

• ASP (Active Server Pages) este o tehnologie a firmei Microsoft pentru realizarea paginilor de WWW dinamice si interactive, aparuta in 1996.

• ASP se bazeaza pe o interfata de programare oferita de un server Web, numita si ISAPI – Internet Server Application Programming Interface.

• ASP se bazeaza pe limbaje de scripting (la fel ca JSP si PHP) si pe un motor de scripting. Un astfel de motor este inclus in MS IIS.

• Interpretoarele incorporate in motorul ASP se bazeaza pe tehnologia COM. Motorul curent suporta limbajele de scripting JScript (versiunea JavaScript promovata de Microsoft) si VBScript.

• Noua generatie ASP este denumita ASP+ si ruleaza sub platforma Windows .NET. Ea suporta nativ si limbajul C#. Spre deosebire de ASP, scripturile ASP+ sunt compilate, fapt ce contribuie la cresterea vitezei de prelucrare.

2013

Serverul de aplicatii ZOPE

• ZOPE – Z Object Publishing Environment este un server de

aplicatii Web disponibil liber si dezvoltat pornind de la ideea

abstractizarii interfetei dintre serverul Web si cel de aplicatie.

• ZOPE (www.zope.org) ofera:

– Un server Web

– Un model obiectual de dezvoltare a aplicatiilor bazat pe limbajul

Python incluzand: tipare pentru generarea de pagini dinamice, un

limbaj de scripting propriu – DTML, un model obiectual al datelor.

– O multime de componente dezvoltate de comunitatea utilizatorilor

ZOPE si disponibile liber.

• Folosind ZOPE se pot dezvolta aplicatii puternice si complete,

ignorand complet asa-numitele tehnologii “la moda”: Java,

ASP sau PHP.