Sunteți pe pagina 1din 142

Ciprian-Danie!

NEAGU, Daniela NEAGU


-
o Filme lli secvente de tip Macromedia Flash/Shockwave sunt
fo!osite pentru prezentari ce combina textul, grafica,
secventele audio ~ i video pentru realizarea aplicatiilor
interactive (figura 3-21, http://wVv.W.macromedia.com).
Figura 3-22. Web site-ul consortiufui VRML
o VRML (Virtual Reality Make-up Language) este 0 extensie a
HTML. Aceasta permite 0 realizare analoga HTML In s p a ~ i u l
3D (figura 3-22). Pentru vizualizare, se folosesc browser-e
speciale VRML sau browsere HTML cu un plug-in VRML.
Figura 3-23. Legatura catre adresa unei apficatii plug-in, in
pagini cu atribute speciale.
70
un
Ciprian-Daniel NEAGU. Daniela NEAGU
Pornind de la structura HTML de baza descrisa in sectiunea
precedenta, vom parcurge urmatoarele etape pentru a 1mbog<W
propria pagina Web folosind (preferabi!) informaiii personaiizate.
HTML ofera ase nivele de titluri (headings) implicite, numerotate
de la 1 la 6 (cea mai mare dimensiune este 1). Titlurile sunt afi:;;ate
cu caractere mai mari i eventual lntarite (figura 4-5). Etichetarea
unui titlu pe nivelul x folosete secventa: <Hx> ... </Hx> , x
avand valori de la 1 la 6.
Heading 1
Heading 2
HeadingS
Heading 4
HeadingS
Normaltexl
Figura 4-5. Tipurile implicite de tit/uri Tn HTML.
Obs: daca nu doriti sa aveti comportari anormale ale textului, nu
sariti peste nivele in document! Spre exempiu, daca incepeti cu un
titlu level-one, nu continuati cu un titlu level-three!'
Spre deosebire de editoarele de text, in fiierele HTML nu sunt
semnificative carriage returns, spatH/e, trecerile la finie noua
(Iinefeeds), deoarece sunt comprimate 'intr-un singur spatiu, de
catre browser, la a f i ~ a r e a documentului HTML. Prin urmare, nu
conteaz8 lungimea textului editat din documentul HTML.
74
Ciprian-Daniel NEAGU, Daniela NEAGU
Un exemplu de lista de definitii
NCSA
NCSA, the Natior.al Center for Supercomputing Applicallons. is located on the campus of
the University of Illinois at Urbana-Champaign.
Cornell Theory Center
CTC is located on the campus of Cornell University in Ithaca, New York.
Figura 4-9. 0 !isla de defini(ii.
Intranle <DT> ~ i <DD> pot contine mai multe paragrafe sau alte
informal;i referitoare la defini\ie (inclusiv alte liste). Atributul
COMPACT poate fi folosit (figura 4-10) pentru termeni definiti in
cateva cuvinte (care se pot gasi pe aceeai linie cu termenul
definit):
<DL COMPACT>
<DT>-i
<DD>invokes NCSA Mosaic for Microsoft
using the initialization file defined in
<DT>-k
Windows
the path
<DD>invokes NCSA Mosaic for Microsoft Windows in
kiosk mode
</DL>
Un exemplu de lista compacta de definitii
-i invokes NCSA Mosaic for Nhcrosoft Windows using the initializallOn file defined in the
path
-k invokes NCSA Mosaic for Nhcrosoft Windows in kiosk mode
Figura 4-10. 0 /ista compacta de definifii.
78

Ciprian-Daniel NEAGU. Daniela NEAGU

Figura 4-14. Un exemplu de pagina personata hyperlext.
Pot exista legaturi catre anumite parti componente ale aceleai
pagini, caz In care trebuie inserate ancore' (targets) In respectiva
pagina. Ancorele sunt introduse prin tip de eticheta spec if
hypertextului, iar trimiterea respecta regulile de adresare reiativ8,
numele ancorei urmand numelui paginii delimitatorului #:
<html>
<head>
<title>My Home Page</title>
</head>
<body bgeolor="#COCOCO">
<a NAME="top"></a><eenter>
<hl>Weleome to my Page!</hl></center>
<center><font color="#FFOOOO">
<font size=+3>Hypertext</font></font>
<br>Un exemplu de legaturi HTML.</eenter>
<p>O pagina anterioara este ...
<a href="ex9.html">Pagina 9</a>
<center>
<a href= .. http://www.altavista.digital.com .. >Cauta
eu Altavista</a>
<br><a href="#top">Inceput de pagina</a></center>
</body>
</html>
Legaturile relative considera parcurgerea drumului Tntre
documentul cu hyperlegatura l?i destinatie, respctand convenlia
ca, in cazul in care trebuie sa se parcurga un folder superior
ierarhic, fiecare urcare in ierarhie sa fie semnalizata de 0 secventa
.. I .
82
63
Ciprian-Daniel NEAGU, Daniela NEAGU
-------------------------
Tabelele permit distribuirea aranjata a datelor (text, imagini,
legaturi, forme, alte tabele etc.) in fanduri ~ i coloane de eelule.
Sunt utile in general pentru aranjarea in pagina, d e ~ i tendinta
aetuala este aeeea de a folos! stiluri predefinite (style sheets).
Folosirea tabelelor poate erea probleme In eazul vizualizarii tn
sisteme ne-grafiee.
Tabelele pot contine 0 prima etieheta optionala caption, urmata
de unul sau mai multe randuri (rows). <tr> ... </tr>
Fiecare rand este format din una sau mai multe celule (cells) de tip
header <th> .. </th> sau date (data cells) <td> .. <ltd>
Celulele pot fi unite de-a lungul rfmdurilor sau coloanelor. Acest
model furnizeaz8 un mod limitat de control asupra formatului
paginii (spre exemplu, alinierea orizontala sau verticaia a
continutufui celulelor, stilului chenaru!ui: borders etc.)
<Table border=2 align=right>
<caption>
Un Exemplu
</caption>
<tr>
<th> a </th> <th> b </th>
</tr>
<th> C </th> <td> d <ltd>
</tr>
</Table>
Rezultatul unui astfel de cod este:
Un
Exemplu
Parametrii etichetei de definire a tabelelor:
84
o introducere prac:tica in HTML
Un exemplu de tabel cu diferite organizari ale liniilor i coloanelor,
inclusiv reuniri ale acestora (figura 4-16):
<HTML>
<HEAD>
<TITLE>Exemplu de tabel</TITLE>
</HEAD>
<BODY>
<CENTER><H1>Un exemplu de tabel</H1>
<TABLE BORDER=2>
<CAPTION > Titlul tabelului </CAPTION>
<TR><TD ROWSPAN=2></TD><TH COLSPAN=2>Medie
</TH></TR>
<TR><TH>Inaltime</TH><TH> Greutate </TH></TR>
<TR><TD>Barbati</TD>
<TD ALIGN=CENTER> 69 </TD>
<TD ALIGN=CENTER> 150 </TD></TR>
<TR>
<TD> Femei </TD>
<TD ALIGN=CENTER> 64 </TD>
<TD ALIGN=CENTER> 130 </TD></TR>
</TABLE>
</BODY>
</HTML>
85
Ciprian-Daniel NEAGU, Daniela ________ _
</font>
</BODY>
</HTML>
Observafie: elementele care, Tn mod normal, pot
apare in sectiunea BODY nu trebuie introduse in fata
primufui element FRAMESET, in caz contrar elementul
FRAMESET fUnd ignorat.
Cadrele nu sunt intotdeauna 0 solu1ie agreata de utilizatori,
deoarece:
necesita incarcarea informatiei specifice mai multor documente,
ceea ce impune un timp de afiare mai mare, in special clientilor
ce folosesc dial-up; . ,
conduc la reducerea de afiare a continutului de
detaliu;
pot impune dificultati de navigare prin aglomerarea spa1iului
vizualizat, In special in cazul utilizarii prea multor cadre in aceeai
fereastra.
Cadrele permit impartirea ferestrei de navigare in mici ferestre,
fiecare afiand 0 anumita pagina Web. Aceasta metoda poate fi
lnsa folositoare:
in cazul navigarii 1ntr-un site Web, prin pastrarea continua a
unei referinte constante (un index sau 0 tabla de materii) intr-o
sec\iune a fereastrei pe ecran, in timp ce se parcurg diferite pagini
ale site-ului in alt cadru;
pentru pastrarea continua a unor anunturi (reclame, mesaje de
ajutor etc.) pe ecran,in timpul navigarii pe un site.
o caracteristica unica a cadrelor HTML este aceea ca necesita un
fiier HTML complet separat. Introducerea cadrelor in HTML a
condus la doua tipuri distincte de documente HTML:
,. documente frameset (layout): sunt fiiere HTML care contin
doar informatia asupra modului de impartire a ferestrei de
navigare. Nu conlin nici 0 informa,ie despre conlinutul fiecarei
ferestre: text, desene, hyperlegaturi etc.
.. documente body: sunt documentele HTML obinuite, ce con,in
toata informalia despre pagina Web, folosind etichete HTML
obinuite. Fiecare cadru are propriul body document, care produce
pagina Web vizibila Yn cadrul respectiv. in acest sens, cadrele
reprezinta 0 modalitate de a vizualiza mai multe pagini Web pe
ecran in acela; timp.
Ambele tipuri de documente (frameset i body) contin header-e
care descriu titlul paginii Web. Diferenta dintre ele este data de
88
o introducere practica in HTML
restul docurnentelor, continute In etichetele body tags sau
framesaf tags.
Sa consideram cu trei cadre. Codul ce produce 0 pagina
impaf\ita este descris de:
documentul frameset, care se "a.html";
documentele body, ce descriu continutu! fiecarui cadru, 9i se
numesc "x.html", ny.html" si "z.html".
Fil;derul a.html:
<html>
<head>
<title> A </title>
</head>
<frameset rows == *,*>
<frame sre == "x.html"
<frameset eols = *,*>
<frame sre "y.html"
<frame sre == "z.html"
</frameset>
</frameset>
</htrnl>
name == "upper">
name "lower left">
name "lower_right">
Formatul documentului frameset este similar unui body document.
Acesta incepe i se termina cu etichetele <html> </html>
contine header i title. Tn schimb, in timp ce Tn body
document, codul ce descrie continutul paginii Web este plasat
intre etichetele <body> </body>, in documentul frameset,
informalia este plasata intre etichetele drameset>
</frameset> (ce pot fi imbricate: incluse unele Tn altele).
Etichetele <frameset> declara imparlirea cadrelor, iar etichetele
<frame> sunt folosite pentru definirea cadrelor (etichetele
<frame> nu necesita perechea de inchidere </frame.
Etichetele de declarare <frameset> reprezinta primul pas in
crearea cadrelor descriu divizarea ferestrei in cadre mai mici.
Fiecare astfel de declaratie poate imparli fereastra 1n randuri sau
in dar nu in ambele in timp. Pentru oblinerea unei
ferestre , trebuie intal lmpartita fereastra in doua
randuri (top bottom), apoi randul bottom (de jos) este tmpartit in
doua coloane (loweUeft lower_right). Dimensionarea fiecarui
89
Ciprian-Daniel NEAGU, Daniela NEAGU
cadru poate fj realizata prin specificarea numarului de pixeii, prin
valoarea procentuala din dimensiunea ferestrei sau prin
dimensiuni relative.
Spre exemplu:
<frameset rows = 30, 33%, *, 2*>
divide fereastra in patru cadre orizontale, fiecare avand
dimensiunile enumerate in lista: primul rand are 30 pixeli Inaltime,
al doilea are 33% din lnaltimea totala a ferestrei. Folosirea
wildcard-ului n*n se refera la "restul ferestrei": deci restul ferestrei
este lmpartit in alte doua cadre, ultimul dintre Sle fiind de doua ori
mai mare decat primuL Figura 4-18 arata rezultatul acestei
declaralii (dimensiunea de 30 pixeli va fi caracterizata de marimea
ferestrei de navigare):
Figura 4-18. Un model de imparfire a unei ferestre fn cadre
orizonta/e.
Un rezultat asemanator poate fi oblinut prin utilizarea parametrului
eols = in lac de rows '" rezultand 0 fereastra descrisa ca In
figura 4-18, dar segmentata pe verticala. Oaca fereastra a fost
partajata incorect (mai ales prin specificarea dimensiunii In pixeli).
rezultatul va diferi de la browser la browser. Astfel. cel mai
avantajos mod de lucru este prin procentaj l?i eel putin un
specificator U*". in a. html spre exemplu, fereastra este
divizata 'in doua randuri egale prin rows =: * 1 * (similar cu "50% I
5 0 % 11 sau "50 % , * If ).
Observalie: fiecare cadru poate fi la randul sau lmparlit in coloane
sau randuri (daca fereastra a fost initial lmparlita in coloane,
fiecare cadru rezultat va fi imparlit apoi in randuri. Exista doua
modalitali de segmentare a cadrelor: fncuibare directa (direct
nesting) indirecta (indirect nesting).
incuibarea directa a cadrelor (direct nesting) presupune cadrele
divizate In acelal?i document, rezultand cadre distincte.
a . html descris anterior este un caz de incuibare directa.
90
>;'.
Ciprian-Daniel NEAGU, Daniela NEAGU
Spre exemplu, sa presupunem ca body documentul z. html
contine hyperlegatura:
<a href ;IIb.htmI" target="upper">Click here</a>
Cand se selecteaza hyperlegatura (figura 4-19) in cadrul din
dreapta (unde este localizat z. html). cadrul de sus se va
schimba din x. html in b. html. Deci, prin alegerea unei
hyperlegaturi Intr-un cadru, se poate actualiza un alt cadru fara
modificarea celorlalte. Analog, destinatia poate fi aleasa
"ioweUeft" sau "(ower_right" pentru actualizarea cadrelor din
partea de jos a ferestrei. Pentru modificarea tuturor cadrelor de jos
trebuie folosita Yncuibarea indirecta cu specificarea destina1iei
"lower".
target="upper" target="lower Jeft" target="'ower _right" target="lower"
Figura 4-19. Destinafii pentru b .htm!.
Unui frame i se poate da orice nume: 1n mod normal. se
evidentierea poziliei de pe ecran (ca mai sus) sau a functiei
("main", "contents" etc.). Exista l?i nume de ancore definite implicit,
care nu trebuie folosite in eticheta <frame> (ineep eu "_"):
"_self
ll
actualizeaza cadrul ce-l contine (este implicit daca nu
se specifica nici un target);
"yarent II actualizeaza cadrul parinte daca hyperlegatura
este intr-un cadru derivat (spre exemplu in cazul incuibarii
indirecte, "loweUeft" "lower_right" sunt cadre derivate ale
cadrului "lower");
" _top" actualizeaza intreaga fereastra, indiferent de modul de
partajare;
" blank" creaza 0 fereastra noua.
In interiorul etichetei <frameset ... > pot fi utilizate combinalij
intre parametrii:
rows = sizel, size2, ... , size n
Proprietatea fmparte fereastra sau cadruf parinte fn n
randuri. Dimensiunea poate fi specificata fn pixeJi,
procent din fnaltimea ferestrei (%), sau dimensiuni
relative (*).
eols = sizel, size2 I , size n
92
Ciprian-Daniel NEAGU, Daniela NEAGU
Daca un browser ce nu detecteaz8 cadre deschide 0 fereastra ce
declaratii frames, rezultatul este 0 pagina alba (versiunile
actuale ale browser-elor Netscape Navigator i internetExplorer nu
fac parte din aceasta categorie). Tn astfel de cazuri este
preferabila includerea etichetelor <noframes> .. </noframes>
(ignorate de celelalte browser-e). Unii proiectan1i Web folosesc
aceste etichete pentru apelarea unor copii ale site-ului ce nu
utilizeaza cadre este 0 varianta dificil de intretinut), in timp ce
In marea majoritate a cazurilor se insereaza un mesaj prin care se
ca se folosasc cadre sau sa faca 0 tegatura la body
documentul principal. Etichetale <noframes> sunt funclionaie
doar in cadrul creat de <frameset> l?i nu pot fi folosite "intr-un
body document.
Implementarea cea mal obil?nuita a acestei etichete Intr-un
frameset document aste urmatoarea:
<frameset ... >
<frame ... >
<noframes>
This document requires a frames-capable browser.
We apologize for the inconvenience!
</noframes>
</frameset>
Chiar daca nu a1i creat Inca forme Web, acestaa au putut deja fi
folosite ca utilizatori Web (In cazui c8utarilor pe Internet sunt
prev8zute, spre exemplu, forme care permit personalizarea cheilor
de c8utare; multe site-uri Web cer informatii de inregistrare; alte
site-uri au implementate linii chat). Formete Web (sau formele
HTML), reprezinta cel mai simplu mod de a transforma 0 pagina
Web, dintr-o publicatie on-line, Tntr-un instrument interactiv.
o forma HTML este 0 sectiune a unui document Web In care
utilizatorul poate introduce informatii. Acestea sunt trimise catre
serverul Web, unde pot fi inregistrate intr-o baza de date, pantru
utilizari ulterioare, sau pentru controlul informa\iilor returnata
utilizatorulul.
94
o introducere practica In HTML
Formele HTML pot realiza:
introducerea de text sau alegerea dintr-o paleta de optiuni;
colectarea mai multor elemente de informatie;
restrangerea raspunsurilor utilizatorului la un set de valori bine
definite;
structurarea informatiei furnizate de utilizator pentru procesarea
automata;
implementarea GUls (Graphical User Interfaces) pentru aplicatii
de retea sau pentru navigarea pe site-uri Web;
Formele HTML nu pot furniza 0 interfata utilizator complet
interactiva, ci doar construiesc 0 interogare sau un mesaj de
raspuns. Nu exista modalitati de a controla prin forme informalia
introdusa in Cmpurile text, ci doar de a furniza 0 modalitate de
introducere a textului utilizatorului. Manipularea informatiei
introduse de utilizator in forme necesita, in general, programe CGI
special concepute pentru a 0 procesa.
Se realizeaza prin etichete HTML (prin adaugarea i selectarea
proprietali1or unei forme, folosind un instrument de creare a
paginilor HTML, de tipul Netscape PageComposer sau Microsoft
FrontPage, sau chiar utilizand un simplu editor text).
[QI?!iXemplu de forma HTML =oJ
1ntr-o sursa HTML, 0 forma este semnalizata prin eticheta:
<FORM> .. <!FORM>. Daca avem un program ce va procesa
datele trimise, de forma (form handler, eel mai ades un
program CGI), se va adauga formei atributul ACTION"," uri"
pentru a indica pozi1ia programului i atributul METHOD=reqtype
pentru metoda de transmisie.
Observatie: Tn toate exemplele care urmeaza,
atribute/a optiona/e sunt semnalizate prin paranteze/e
patrate [ ] i se f%sese pentru a suplimenta
proprietafile unei forme.
Aproape toate forme/e trebuie sa fie descrise prin
atributu/ NAME (identificator a/ eomponentei formei).
Un exemplu de ereare a unei forme simple este dat in eele ee
urmeaza (figura 4-20):
<FORM ACTION="register.cgi" METHOD=POST>
95
Ciprian-Daniel NEAGU, Daniela NEAGU
<DL>
<DT>Your full name:
<DD><INPUT
JVlA_,,{LENGTH= 18 0 >
<DT>Your e-mail address:
<DD><INPUT TYPE=TEXT NAME="email"
MAXLENGTH=180>
</DL>
<P><INPUT TYPE=SUBMIT VALUE=HRegister">
</P></FORM>
SIZE=60
SIZE=60
Etichetele <FORM> </FORM> grupeaza campurife de
introducere impreuna cum unde vor fi procesate.
Etichetele specifice unei liste de definitie impun 0 mai buna
structurare a modului de i'mpartire a specificatiilor continutului
dialogului cu utilizatorul. Etichetele <P> .. </P> impun ca butonu!
submi t sa fie tratat ca buton separat.
Your full name:
Your e-mail address:
I
Figura 4-20. 0 simpla forma HTML.
Obsetvafie: Cele mai multe etichete HTML (ca <p>,
<PRE>, <BR> I <DL pot fi utilizate Intre <FORM> i
</FORM> pentru contro/ul aspectului formei.
Folosirea etichetelor <DT> i <DD> in interiorul unor
liste (marcate prin <DL> .. </DL conduce la 0 mai
clara identificare a asocierilor text de descriere a
forme/or. Tn general, Insa, se prefera etichete
<p> .. </P> pentru a grupa forme, i etichete <BR>
pentru a Ie separa.
Tn cadrul etichetelor <FORM> .. </FORM> sunt valabile urmatoarele
etichete HTML (HTML Form Tags: components ale formei):
96
o introducere practica In HTML
<INPUT [TYPE=TEXT] NAME = " text-identificator"
[SIZE=nn] [MAXLENGTH=l1n} [VALUE="default text
ll
]>
o eticheta INPUT cu atributul TYPE=TEXT furnizeaza utilizatorului
un prompt pentru 0 singura linie de text. Eticheta trebuie sa aiba
atributul NAME. Atributul SIZE se folosel1te pentru specificarea
numarului de caractere care sa caracterizeze dimensiunea
ferestrei de introducere. Atributul MAXLENGTH se folosete pentru
limitarea numarului de caractere de intrare. Daca valoarea
WvCLENGTH este rna; mare deceM valoarea SIZE, atunci browser-
ul va permite derulare (scroll) pe textul de intrare. Atributul VALUE
se pentru afil1area unui text de intrare implicit, ce va fi
afiat odata cu forma va putea fi modificat prin editare. Tn
exemplul anterior (figura 4-20) este ilustrat un caz de utilizare
INPUT TYPE=TEXT.
I INPUT TYPE=SUBMIT
<INPUT TYPE=SUBMIT [NAME= "buttol1-id"]
[VALUE="Button label text"]>
Eticheta INPUT cu parametrul TYPE=SUBMIT furnizeaza un buton
care trans mite informatia din forma completata catre adresa URL
data ca atribut ACTION in eticheta <FORM>. Informa1ia este
transmisa prin tipul de apel HTTP specificat de atributul METHOD al
formeL
o forma poate avea mai multe butoane SUBMIT, identificabile prin
valoareadin atributul optional NAME. Atributul NAME va fi transferat
prin datele forme; la apelul programului CGI pentru a permite
mecanismului de procesare a datelor formei sa determine ce
buton a fost folosit de utilizatof. Tn exemplul anterior (figura 4-20)
aste ilustrat un caz de utilizare a unui buton SUBMIT
[INPUT TYPE=RESET ._. __ ..

<INPUT TYPE=RESET [VALUE="Button label text"]>
o eticheta cu parametrul TYPE=RESET furnizeaza un buton care
terge forma seteaza con1inutul acesteia la valorile ini1iale.
Spre deosebire de cele mai mulfe etichete, In care
atributul NA. .. m este ob/igatoriu, in cazul INPUT
TYPE=SUBMIT acesta este optional, iar Tn cazul INPUT
TYPE=RESET nu exista.
Tn continuare vom exemplifica (fjgura 4-21) un simpiu buton de
reset.
97
Ciprian-Daniel NEAGU, Daniela N_E_A_G_U ____________ _
<FORM ACTION="choose.cgi" METHOD",POST>
<P>E-mail address: <INPUT TYPE=TEXT NAME = "email II
SIZE=60 </p>
<P>Please add me to the mailing list. </p>
<P> I am: </p>
<OL>
<LI><INPUT TYPE=RADIO NAJvIE="employer"
VALUE = "private " chECKED>Employed in the private
sector
<LI><INPUT TYPE=R)lJ)IO NP,ME="employer"
VALUE="public">Employed in the public sector
<LI><INPUT TYPE=RADIO NA.ME="employer"
VALUE="self">Self-employed
<LI><INPUT TYPE=RADIO NAME="employer"
VALUE="unemployed">Unemployed
</oL>
<P><INPUT TYPE=SUBMIT VALUE="Continue">
<INPUT TYPE=RESET VALUE="Clear form">
</p>
</FORM>
E-mail address:
Please add me to Ule mailing list.
lam:
1. r. Employed in the private sector
2. r Employed in the public sector
3 r Self-employed
4. r Unemployed
Figura 4-21. Exemplu de forma cu butoane radio.
----------------.. -- I
! INPUT TYPE=RADIO I
<INPUT TYPE=RADIO NAJv'lE="radio-set-id"
VALUE = "choice-id" [chECKED]>
98
o introducere practica Tn HTML
--------------._-------'-------
Este 0 forma ce permite utilizatorului sa aleaga dintr-un set de
alternative. Fiecare buton radio din setul de alternative din forma
are valoare a atributului. Evident, un singur buton radio
poate fi selectat 0 singura data (oPliune unica). Atributul VALUE
specifica datele transmise. Butoanele radio trebuie sa foloseasca
atribut NAME dar sa aiba diferite atributele VALUE. Atributul
CHECKED marcheaza un buton radio din lista, ca optiune implicita.
Tn exemplui anterior (fjgura 4-21) am folosirea
butoanelor radio ca seleclie de tipul 0 varianta din mai multe.
I INPUT TYPE=CHECKBOX
<INPUT TYPE=chECKBOX NA,,\1E=" box-set-id"
VALtJE="choice-id" [chECKED) >
o eticheta INPUT cu atributul TYPE=CHECKBOX of era utilizatoru/ui
posibilitatea de a alterna intre "on" "off". Este oarecum
similar butoanelor radio, cu ca, oricate componente
checkboxes pot fi selectate sau nu. Un checkbox selectat (" on ")
la transmiterea formei li va transmite propria valoare VALUE
pentru componenta respectiva. Mai multe componente
checkboxes pot fi grupate (ca butoanele radio), prin utilizarea
atribut NAME. Datele transmise in formaa sunt cele
specifice componentelor "on" (selectate), separate prin virgula.
Pentru 0 lista de checkbox, trebuie sa se includa pentru fiecare
op1iune un text care sa expliciteze semnificalia a!egerii.
Tn continuare vom exemplifica (figura 4-21) utilizarea
componentelor checkboxes.
<FORM ACTION="feedback.cgi" METHOD=POST>
<P> Please tell us what you thought of this Web
site. Select the checkboxes which you agree with:
</P>
<UL> <LI><INPUT TYPE=chECK.BOX NAt"lE="opinion"
VALUE = "understandable II >
The text was understandable.
<LI><INPUT TYPE=chECKBOX NAME = II opinion II
VALUE="navigable"> I found it easy to find my way
through the Web site.
<LI><INPUT TYPE=chECKBOX NAME = II opinion"
VALUE = " stylish" >
I was impressed by the style and presentation.
</UL>
<P><INPUT TYPE="HIDDEN" NAME="pages"
VALUE="brochure">Please add any other comments:
<TEXTAREA NAME="feedback" ROWS=5 COLS=40>
I think your brochure is:
99
Ciprian-Daniel NEAGU. Daniel_8_N_E_A_G_'_U _____ .
</TEXTAREA>
</P>
<P>
<INPUT TYPE=SUBMIT VALUE="Send comments">
<INPUT TYPE=RESET V}l..LUE= "Clear form" >
</p>
</FORM>
Please tell us what you thought of this Web site. Select the checkbozes which you agree wiih'
r The text was understandable.
r I found it easy to find my way through the Web site.
r I was impressed by the style and presentation,
II think your brochure is:
pre,." odd "'" ""'" ,--L
Figura 4-22. Un exemplu de utilizare a componente/or:
checkboxes, hidden fields, text area.
TYPE=IMAGE
<INPUT TYPE=IMAGE NAME="image-id" SRC="image--url"
[ALIGN=alignment] >
Eticheta de forma INPUT TYPE=ItFlAGE este similara etichetei
IMG. Folosirea ei are ea rezultat a f i ~ a r e a imaginii de la locatia SRC
cu optiunea ALIGN. 0 a stfe I de forma are doua caraGteristici ce 0
fac utMt
ia die pe image, date Ie formei completate sunt transmise
analog unei componente INPUT TYPE=SUBMIT;
permite utilizatorului sa aleaga 0 portiune din imagine.
Coordonatele in pixeli ale punctului ales de utilizator, identificatorii
image-id.x i image-id.y (abscisa este transmisa ca fiind continutul
atributului NAt'VJE. x iar ordonata ca NAME. y). sunt transmise
impreuna cu date!e formeL
100
______ O_i_llt_ro_ducere practica In HTML
Exemplul urmator ilustreaza folosirea unei componente INPUT
TYPE=IMAGE ca un buton Submit personaiizat (figura 4-23) dar,
In general, multe site-uri folosesc caracteristica referitoare la
coordonatele in pixeli pentru a prezenta meniuri grafice, tabele de
butoane sau Mrti de navigare in site. Comportarea este similara
etichetei referitoare la harta de imagini <IMG ISMAP>.
<FORM ACTION="select.cgi" METHOD=GET>
<H2>Choose which software to download:</H2>
<P><SELECT NAME="package" SIZE=3>
<OPTION VALUE="text" SELECTED>Text viewer
<OPTION VALUE="image">Image viewer
<OPTION VALUE="movie">Movie player
<OPTION VALLTE=" audio" >Sound player
<OPTION VALUE="editor">Media editor
</SELECT>
<SELECT NAME=" p latform">
<OPTION>IBM pc compatible
<OPTION>Macintosh (68000)
<OPTION>Macintosh {Power pc}
</sELECT>
<SELECT NAlVlE="options" MULTIPLE>
<OPTION>License
<OPTION>Media
<OPTION>Documentation
</SELECT>
</p>
<P>
<INPUT TYPE=" IMAGE" NAME="coords"
SRC="download.gif">
</p>
</FORM>
Figura 4-23. Cutii de selecfie i butoane imagini.
101
Ciprian-Daniel NEAGU, Daniela NEAGU
f!NPUT TYPE=HIDDEN
---------1
<INPUT TYPE=HIDDEN NAME="data-id" VALUE="hidden
form data" >
Eticheta INPUT TYPE=HIDDEN este 0 forma neuzuala, In sensu I
ca nu apare in forma HTML afil?ata, fiind 0 convenlie prin care
proiectantul trimite atributul VALUE ca data a formei, in special
daca programul de prelucrare este specificat In atributul ACTION
al mai multor forme.
Un exemplu (figura 4-24) al utilizarii componentei INPUT
TYPE=HIDDEN este i1ustrat in continuare:
<FORM ACTION="comments.cgi" METHOD=POST>
<P>In order that we may continue to provide a
high quality World Wide Web service, please take
the time to fill in this form.</P>
<DL>
<DT>Your surname (family name) :
<DD><INPUT NAME="surname" SIZE=20 MA,XLENGTH=60>
<DT>Your first name (given name) :
<DD><INPUT NAME="forename" SIZE=20 MAXLENGTH=60>
</DL>
<P>Your title:
[<INPUT
[<INPUT
[<INPUT
Mrs. ]
TYPE=RADIO NAME="title" VALUE="Mr"> Mr.]
TYPE=RADIO NAME="title" VALUE="Ms"> Ms.]
TYPE=RADIO NAME="title" VALUE="Mrs">
[<INPlJT TYPE=RADIO NAME="title" VALUE="Miss">
Miss. ]
[<INPUT TYPE=RADIO NAME="title" VALUE="Dr"> Dr.]
[<INPUT TYPE=RADIO NAME="title" VALUE",""> Other.]
</P>
<P>Please tell us what you thought of this Web
site. Select the checkboxes which you agree with:
</P>
<UL>
<LI><INPUT TYPE=chECKBOX
VALUE = "understandable " >
The text was understandable.
<LI><INPUT TYPE=chECKBOX
VALUE = " navigable " >
NAME="opinion"
NAME = "opinion"
I found it easy to find my way through the Web
site.
<LI><INPUT
VALUE="stylish">
TYPE=chECKBOX NAME = "opinion"
I was impressed by the style and presentation.
102
I
Ciprian-Daniel NEAGU, Daniela NEAGU
-----------------
TEXT A REA
<TEXTAREA NAME = "text-id" [COLS=nn) [ROWS=nn] >
default text</TEXTAREA>
Eticheta TEXTAREA prezinta 0 fereastra pentru editare de text pe
ma; multe linii (este un container HTML). Textul con,inut intre
etichetele <TEXTAREA> i </TEXTAREA> apare ca fiind un
continut implicit cazul prezentat In exemplul aferent figurii 4-22,
pentru care continutul implicit nu a fost inca modificat de utilizator).
Observatie: un container HTML este 0 pereche de
etichete, deschisa <AICl> 9i inchisa </AICI>, a care;
actiune se ap/ica textului cuprins intre etichete.
<SELECT NAME="select-id" [SIZE=nn) [MULTIPLE] >
<OPTION [VALUE="choice-id"] [SELECTED]>lst choice
<OPTION>2nd choice
<OPTION> ...
</SELECT>
Eticheta SELECT este 0 alternativa a butoanelor radio i
checkboxes, prezentand 0 lista de optiuni intr-o fereastra cu
defilare (scrolling window). Dad'! este folosit atributul MULTIPLE,
componenta SELECT este comparabila cu checkboxes, in sensu I
posibilita1ij selectarii mai multor variante. Atributu! SIZE specifica
numarul variantelor vizibile (controland deci dimensiunea ferestrei
de afiare). Atributul VALUE al fiecarei optiuni OPTION selectate
este transmis prin datele forme; pentru procesare (daca atributul
este omis, se transmite continutul optiunii selectate). Daca se
selecteaza mai multe optiuni, atributele VALUE sunt transmise
impreuna intr-o lista, separate prin virgula. In exemplul aferent
figurii 4-23 este tratat un caz al utilizarii etichetelor SELECT.
Formele HTML furnizeaza 0 modalitate simpla de a permite unui
utilizator de browser web sa transmita informatii catre site-ul Web
vizitat, sa caute eficient informa\ij l?i sa in Internet.
Toate acestea, cu observatia ca este absolut necesar, din partea
proiectantului Web, sa caute, sa aleaga i sa implementeze l?i
mijloace de securitate adecvate dimensiunii l?i functiunii
proiectului).
104
;:'-IHAL, S,) studiHm
de in IJrrnf:ttoap:o<J ,""'''' "'R"n,;;"
parfi a

" " - " " " " - " " - " - - - " - - - " - - - ~ - - - - - - - - - - - - - - - ~ ~ -
Aplicatii JavaScript pentru dinamizarea paginilor HTML
in scopul dinamizarii paginilor HTML la ac1iunile utilizatorului, ,
trebuie folosite tratarile de evenimente JavaScript, deoarece codul
JavaScript reactioneaza la evenimente.
Sa eonsideram urmatorul exemplu, care trateaza evenimentul
on Click:
<form>
<input type=="button" value="Click me"
onClick="alert('Yo')">
</form>
(a) (b)
Figura 5-2. Apelul unei functii alert JavaScript (b) prin
tratarea unui eveniment relativ fa un buton HTML (a).
in exemplul de mal sus, a fast dec/a rat ca element de forma HTML
un buton. Noutatea consta in apelul funcliei alert () in cadrul
etichetei <input>, la deteetarea evenimentului onClick. Acest
eveniment d e f i n e ~ t e acliunea care va fi executata daca butonul
este apasat. Functia alert permite deschiderea unei ferestre de
atenlionare (figura 5-2b). avand ca mesaj afiat, parametrul de
ape!.
Observafie: In aeest caz, apeluJ codului JavaScript
nu a fost realizat In interiorul etichete/or <script>,
cum se procedeaza In mod uzua/.
o atentie speciala trebuie acordata !ilhilimelelor folosite pentru
semnalizarea parametrului de tip text. In apelul funcliei alert apar
ghilimelele simple: 'Yo'. in schimb, la apelul functiei
document. wri te () , au fost folosite ghilimelele duble. De fa pt.
pot fi foiosite, pentru specificarea parametrilor de tip text, oricare
din cele doua tipuri de ghilimele. In interiorul funcliei alert apar
ghilimelele simple. deoarece aceasta este deja parametru apelului
onClick="alert ('Yo I) ", motiv pentru care au fost folosite de
fapt. imbricat, ambele tipuri.
107
Ciprian-Daniei NEAGU, Daniela NEAGU
Un apel care ar folosi doar un singur tip, de forma:
onClick="alert("Yo")", ar conduce la confuzii de
interpretare, in sensul identificarii parametrilor: spre exemplu,
unde incepe unde se termina parametrul de ape! al
evenimentului onClick. Acesta este motivul pentru care cele
doua tipuri de ghilimele trebuie sa alterneze, indiferent de ordinea
apariliei. Prin urmare, apelul: onClick= I alert ("Yo") , este la
fel de corect!
Marea majoritate a codurilor JavaScript inserate in documentele
HTML se bazeaza pe functii. Ideea este general valabita in cazul
functiilor: motivalia utilizarii functiilor este aceea de a grupa mai
multe comenzi, intr-o secvenla care sa fie folosita repetat, in mai
multe secliuni ale documentului.
Welcome to my homepage!
This is JavaScript!
Welcome to my homepage!
This is JavaScript!
Welcome to my homepage!
This is
Figura 5-3. Apelul repetat al unui segment de scriere
JavaScript.
Sa consideram exemplul urmator, care un anumit text de
trei on (figura 5-3):
<html>
<script language=",JavaScript II >
<!-- hide
document.write("Welcome to my homepage!<br>");
document.write(IIThis is JavaScript!<br>");
document.write(IIWelcome to my homepage!<br>") i
document.write("This is JavaScript!<br>") i
108
/ I
f /
i
Ciprian-Daniel NEAGU. Daniela NEAGU
Vorn eviden\ia in exernplul urrnator folosirea functiiior JavaScript
In cornbinatie cu diferite evenirnente (figura 5-4):
<html>
<head>
<script language="JavaScript">
<!-- hide
function calculation()
var x= 12;
var Y= 5;
var result= x +Yi
alert (result) ;
II -->
</script>
</head>
<body>
<form>
<input type=Hbutton" value="Calculate"
onClick="calculation()">
</form>
</body>
</html>
110
(a)
Figura 5-4. Apelul unei funcfii JavaScript de catcut.
Ciprian-Daniel NEAGU. Daniela NEA.G=-..::..U ___________ _
<center>
<img src="ruler.gif"
name="pic4"
height=15>
<p>
<a href=''http://www.stefan.org">My homepage</a>
</center>
</body>
</html>
images-{O]
elements[O]

Name: ...... !,
e-Mail: ,.\_ ...
f(Jrms[O}
elements{ lj
/images{l}
.............. .L.J . IJ .i ..I.]
My homepage -""linksfO]
Figura 5-5. Un exempfu de document HTML pentru ierarhia
JavaScript.
Documentul conline doua imagini, 0 hyperlegatura !1i 0 forma cu
doua text !1i un buton. Din punctul de vedere al ierarhizarii
JavaScript, fereastra browser-ului este un obiect window. Acest
obiect contine anumite elemente (de exemplu, bara de stare). Intr-
o astfel de fereastra, poate fi incarcata 0 pagina HTML. 0 astfel
de pagina este considerata un obiect document. Cu alte cuvinte,
obiectul document reprezinta documentul HTML curent, incarcat
de browser. Un obiect document este caracterizat de proprietati
specifice, spre exemplu culoarea de fundal a paginii. Toate
obiectele HTML (hyperlegaturi, forme, imagini inserate) sunt
considerate proprietali ale obiectului document. ierarhia
JavaScript creata pentru documentul descris anterior este
evidentiata in figura 5-6.
112
Aplica\ii JavaScript pentru dinamizarea paginilor HTML
docmnent
hiM!.- page
links[O]
th.link
elements[O]
Figura 5-6. lerarhia JavaScript a unui document HTML.
Din ierarhia prezentata in fjgura 5-6 putem identifica numele
implicit al obiectelor documentului HTML Spre exemplu,
adresarea imaginii din document se obtine astfel: plecand din
varful ierarhiei, primul document este document. Pentru a ajunge
la prima imagine a documentului, trebuie sa accesam vectorul
images, deci images[O]. Prin urmare, accesul prin cod JavaScript
a imaginii din document se realizeaza cu documenUmages[O}.
Pentru a putea folosi ce a introdus utilizatorul in primul element al
formei HTML. va trebui. similar, sa identificam calea de accesare a
acestui element, din ierarhie. Pornind sin va rfu I ieramiei, yom
urma calea catre primul element prin vectorul elements, prin
urmare: document.forms[O}.elements[O]. Ramane sa identificam
acea proprietate a unui element text al unei forme HTML care
conline valoarea lui: value. Tn concluzie, Iinia de cod care preia
valoarea introdusa de utilizator in elementul cu semnificatia Name
este:
name= document.forms[O] . elements [0] .value;
~ i r u l respectiv este memorat in variabila JavaScript name. Putem
sa folosim aceasta variabila in continuare, spre exemplu pentru a
returna 0 formula de salut: alert ("Hi " + name).
Cu toata simplitatea ~ i claritatea ierarhiei Javascript. ar putea fi
destul de greoi sa adresam prin indici numerici componentele unui
document HTML cu multe elemente, spre exemplu:
document.forms[3}.elements[17}. 0 astfel de problema se rezolva
prin atributul unic NAME al fiecarui obiect HTML, Spre exemplu, In
documentul considerat:
<form name="myForm">
Name:
<input type="text" name="name" value=""><br>
113
Clprian-Daniel NEAGU, Daniela NEAGU
Prin urmare, forms[O] poate fi accesata prin myForm. Putem
astfel sa inlocuim:
name= document.forms[O] . elements (0] .value;
cu:
name= document.myForm.name.valuei
Modalitatea de accesare devine astfel mai ul?oara 9i personalizata,
ma; ales in cazul paginilor cu multe obiecte, respectand insa cu
strictete denumirea atribuita obiectelor (nu se poate, spre
exemplu. folosi myform Tn loc de myForm). Proprietatile obiectelor
HTML, accesate prin ierarhia JavaScript pot fi folosite atat In
operalii de atribuire, citire sau calcuL Spre exemplu, in momentul
crearii unui document, se poate atribui 0 valoare initiala implicita
unui element text al formei:
<form name=="myForm">
<input type=="text" name=" input " value=="insert
your text">
<input type="button" value=="Write"
'Yo!' i ">
Tn codul descris In continuare vom identifica 9i vom folosi 0 mare
parte a propriebWlor unor obiecte HTML. Rezultatul este descris in
figura 5-7.
114
Figura 5-7. Un exemplu de control al proprietatilor obiectelor
unui document HTML prin functH JavaScript.
Aplicatii JavaScript pentru dinamizarea paginilor HTML
<HTML>
<HEAD>
<TITLE>Obiecte JavaScript</TITLE>
<script language="JavaScript">
<!-- hide
function first() {
}
II deschide 0 fereastra de validare
II continand textul din obiectul text
alert ("The value of the textelement is: " +
document.myForm.myText.value) ;
function second() {
II verifica starea obiectului checkbox
var myString= liThe checkbox is "i
II este checkbox validat?
if (document.myForm.myCheckbox.checked)
myString+= "checked"
else myString+= "not checked";
alert (myString) i
II -->
</script>
< I HEAD >
<body bgcolor=lightblue>
<form name="myForm">
<input type:="text" name="myText" value="insert
your text">
<input type="button" name="buttonl" value="Button
1"
onClick="first()">
<br>
<input type="checkbox" name="myCheckbox" CHECKED>
<input type="button" name="button2" value="Button
2"
onClick="second()">
</form>
<p><br><br>
<script language="JavaScript">
115
LXeschi{/6'rn:,--;
Gi:1
fie
tli;'fiiz:titor:
Similar ideii de ierarhizare a elementeior unei pagini Web, cadrele
sunt interpretate pe baza principiu. Fie 0 fereastra HTML
impai\ita de doua cadre:
<htrrtl >
ro\vs=H50%,50%1l>
<frame src"" " paqel, htm" name"''' framel" >
<frame src=H
</frameset
< >
ierarhia JavaScript pentru cele doua noi obiecte este urmatoarea:
parent
children
Figura 5-10. lerarhia JavaScript pentru cadre HTML
La baza ierarhiei se afia fereastra browser-ului. obiectul parinte
\'lindow. Cele doua cadre reprezinta descendentii acestuia in
ierarhie, caroia Ie sunt atribuite identificatorii unici framel
frame2. Prin intermediul acestora, informatia poate fi accesibila
intre diferitele elemente ale ierarhiei.
Una dintre problemele des Intalnite in gestionarea informaiiei din
cadre este deschiderea, Tntr-unul din cadre, a unei pagini a care:
adresa se ca hyperlegatura Tntr-un alt cadru ai ierarhieL
Este practic cazul meniurilor verticale sau hai\ilor de site aflate
Tntr-un cadru, Tn timp ce un alt cadru este folosit pentru
vizualizarea documentului cerut.
Practic, apar urmatoarele cazuri:
.. Cerere de accesare Intr-un obiect parinte a informatiei unui
cadru descendent;
" Cerere de accesare Tntr-un obiect descendent a informatiei
dintr-un obiect parinte;
,. Cerere de accesare intr-un obiect descendent a informaiiei
dintr-un alt obiect descendent
Din punctul de vedere a! ferestrei (identificata cu obiectul parinte),
cele doua cadre descendente se numesc framel *?i frame2, iar
legatura dUre acestea este directit Cu alte cuvinte, un script din
119
Ciprian-Daniei NEAGU, Daniela NEAGU
fereastra parinte (pagina care cadrele) poate accesa
orice informatie din cadrele descendente folosind direct numele
acestora 5-11). Spre exemplu, putem scrie:
frame2. document. write ("A message from the parent
window.") i
browser
window
/
'" "':ame2
framel
pageJ.htm
frame2
page2.htm
Figura 5-11. Accesarea informafiei din cadreJe descendente.
Sunt cazuri in care se accesarea, In sens invers, a
informatiei din documentul parinte intr-un cadru descendent, spre
exemplu daca se renuntarea la divizarea in cadre la un
moment dat. Eliminarea cadrelor reprezinta de fapt incarcatea in
fereastra parinte a unui alt document HTML, in locul celui care
define!?te cadrele curente. Acest document, ce trebuie inlocuit,
este de fapt documentul pannte. Fereastra parinte se acceseaza
din cadrele descendente (figura 5-12) folosind cuvintul cheie
parent. Pentru eliminarea cadrelor, spre exemplu, este necesara
utilizarea obiectului location al ferestrei parinte, cafuia trebuie sa Ii
atribuim, la /ocation.href, 0 alta adresa Web. Comanda finala va fi:
parent.location.href= ''http:// ... ";
framel
pagel.htm
browser
window
frame2
page2.htm
Figura 5-12. Accesarea informatiei din fereastra parinte Tn
cadrele descendente.
Ultimul caz de acces este aceta al utilizarii proprieta1i1or unui
obiect descendent de un script aflat lntr-un alt obiect descendent,
spre exemp!u, page1.htm. Din figura 5-13 se observa ca nu
exista 0 legatura directa intre cele doua obiecte.
120
NEAGU. Daniela NEAGU
Un script CGi (Common Gateway interface) este un program
Incarcat pe un server Web executat ca raspuns la 0 cerere a
unui utiiizator. Un fi:;;ier script CG! este scris intr-un limbaj de
programare astfel 'incat sa fie com pilat pentru a rula pe server sall
sa fie interpretat de un interpretor de pe server.
Printre iimbajele utilizate pentru scrierea unor script-Uii CGI
regasim:
.. limbaje compilate: C, C++, Ada;
II limbaje interpretate: Perl, JCL (Job Control l.anguage: spre
exemplu, limbajui de comanda unix sh).
Un script CG! este executat daca 0 eticheta de ancorare <A ...
sau 0 eticheta imagine <II'1G ... > indica spre un fil;;ier script CGI
nu catre un fiier obinuit. Statutul acestui ca fimd un script
CGi sau doar un fh;;ier HTML ests determinat In funqie de pozitia
fizica a pe server.
Observatie: fiierul script aste plasat pe aceeai
maina pecare ruleaza server-vI Web, i nu local, pe
maina adresata.
mod obi9nuit, fi!?ierele script CGI se gasesc pe server-ul Web,
in directorul cgi - bin. Localizarea exacta a acestui director pe
ma!?ina server este determinata de administratorul Web al
respectivu!ui sistem. Locaiizarea :;;i controlul directorului - bin
este determinata de administratorul Web, pentru a preintampina
eventuale probleme de securitate ce pot apare daca programe
arbitrare ar avea permisiunea sa fie executate de oricine
acceseaZ8 respectiva ma:;;ina. Exista astfel posibilitatea ca anumiti
administratori Web sa nu permita crearea unor script-uri CGI pe
m8f?ina Web gestio nata oricarui tip de utilizator al respectivului
sistem,
1. Utilizatorul a introdus informatia in forma HTML i aCiioneaz8
butonul Submi t (dedarat ca element al formei, Intre etichetele
<FORM> .. /FOR!'-b). Butonul este 0 legatura la aplicat!a CG!
de pe server.
2. Browser-ul foloS8f?te metoda POST I GET pentru a transmite
date!e formei cafre server.
122
1U
Aplicatii CG!

3. Informatia este transmisa prin Internet sau Intranet pana ia
serverul Web, care 0 transfera mai departe aplicatiei CGI
fo!osind stdin a! acesteia.
4. Aplicatia CGI proceseaza datele, dupa care genereaza
raspunsu! In format HTML i II transmite Tnapoi spre client
(serverul Web trebuie sa citeasca dispozitivul standard de
stdout al aplicatiei CGI).
5. Browser-ul Web interpreteaza codul HTML receptionat
rezultatu! pe ecranu! client. in general, HTML
de raspuns contine notificatii asupra procesarii datelor.
Tn mod ideal, un script urmeaza (folosind rutine
corespunzatoare pentru do-initialize, do-process do-
output):
1. Declaratii de Inceput ale programului.
2. Programul apeleaza do-initialize.
3. Programul apeleaza do-process.
4. Programul apeleaza do-output.
5. programu!ui.
Eticheta HTML care permite executarea scriptului CGI avand ca
nume de dynamic_page pe server-ul www.mc . com este:
<A HREF= .. http://www.mc.com/cgi-bin/dynamic_page">
Dynamic page
</A>
Tn momentul Tn care server-ul Web proceseaza un apel de fiier,
daca ace! se in directorui cgi - bin atunci, in
conditiile in care este marcat ca executabil, script-ul va rula
pe server. Daca nu este executabil, se va genera un mesaj
de eroare.
Ca rezultat al executarii unui script, este posibila une!
pagini HTML sau a unei imagini. in plus, poate accesa Tn
timpul execu1iei varia bile de mediu pentru a utiliza informa\ii
auxiliare despre procesuf pe care trebuie sa il realizeze. Prima
linie a datelor returnate trebuie sa fie:
ITiPUI datei returnateIText ---'------'1
... '"_. -. ..
jlmagine gif . I con_tc-e_n_t=-_t_y_p_e,,-, :_i_m.c;.a_g_ec..c/-,-g_i-,f--<i
Un exemplu de script CGi (pe un server Web aft at pe un sistem
ruland Unix) care returneaza lista utilizatorilor curenti legati pe
serverul Web:
123
1
Informatia "name",Your+name&action=find" este plasata In
variabila de mediu QUERY_STRING iar script-ul CGI script este
executat.
Un exemplu de aplicatie de parsing (de interpretare a datelor
transmise prin mecanismu! CGI) este utilizata pentru extragerea
componentelor individuale din QUERY_STRING l?i se bazeaza pe
urmatoarea Glasa C++ (vezi Anexa2).
class Parse
{
public:
Parse ( char [] );
-Parse () ;
void set( char [1 );
char *get_item( char [], int pos=l, bool=false
) i
char *get_item_n(
bool=false );
protected:
char [], int pos=l,
void remove_escape(char []) i
int hex ( char) j
char *map_uname( char [] ) i
private:
};
enum { SEP = '&' }; II Separator de campuri
char *the_str; II Girul interpretat
int the_length; II lungimea Girului
Membrii clasei sunt:
. . ..... . ........ , . , ..... ,.. .1
rl' -.-. - 'lset.e.aza irulde caractere ce va fl interpretat II
,Parse I
:\ : (parsed}.j
.. , . ... ' ... .... .. . I
Js:t .. , ... .. ..
" ... ',' !IIRetumeaza irul asociat cuvsmtUlui cheie!
.,:lget _ item ; transmis ca parametru. Daca nu eXistal
1 ; informatie de interpretat, returneaza NULL '
.r---- .' . . ., "", , " ., ., . .", ' .. ", . .. 1
:1 Returneaza irul . asociat cuvantului Cheie:.1
transmis ca parametru. Oaca nu exista
'informatie de interpretat, retumeaza irul null I
,
i
... (vid). ____ ,1
!get_item_n
I
Tn cazul folosirii metodelor get_item i get_iteITl.-n, al doilea
parametru (optional) specifica potrivirile asociat cuvantului
cheie pentru returnare. Aceasta permite regasirea informaliei
125
...
Ciprian-Daniel NEAGU, Daniela NEAGU
a t a ~ a t e cuvintelor cheie prestabilite. in plus, irurile returnate vor fi
amendate de urmatoarele substitu,ii:
+
Va fi convertit In spatiu.
=
Va separa numele campului de valoarea campului.
?
Va marca inceputul datelor din forma in linia de comanda.
&
Va fi folosi! ca delimitator intre perechile numelvaloare pentru
fiecare camp al formei HTML.
%HH
Va fi convertit In caracterul a carui valoare hexazecimala este HH.
-user
Va fi inlocuit de calea absoluta catre folderul utilizatorului doar
daca al treilea parametru (op1ional) este true.
Observatie: Definitia 0_ MAP va conduce la
neinc/uderea pentru procesare a codului pentru
-username. Aceasta este exp/icatia faptu/ui ca acest
cod poate fi campi/at i pentru maini care nu suporla
functia sistem map.:....uname definita In fiierul header
cgi/pwd.h.
Spre exemplu, daca QUERY_STRING contine:
tag=one&name=mike&action=%2BlO%25&tag=two&log=-ma
s/log&tag=three
atunci urmatorul program (vezi Anexa2), compilat, la rulare:
enum bool { false, true }i
#include <iostream.h>
#include <stdlib.h>
#include "parse.h"
#include "parse.cpp"
void maine}
{
char *query_str = getenv("QUERY_STRING")i
Parse list( query_str ) i
cout "name ="list.get item n(flname") "\n"i
cout"action="list.get:::::item:::::n("action
ll
) "\n"i
126
! n
L; -1. <
). ~ .
" i'
lj ;-
c:ondUCt;
Ciprian-Daniel NEAGU, Daniela NEAGU
Java permite crearea codurilor executa bile de mici dimensiuni
(appJet-uri), care sa ruleze in spaliul de memorie al unui browser.
Ca limbaj complet de programare, Java permite actiuni diverse. ca
desenarea, eompletarea bitmap, eontrolul i raspunsul la
evenimentele utilizator (user events), incarcarea documentelor de
la adresa specifieata etc. Din observatiile realizate asupra applet-
urilor Java folosite astazi pe Web, putem semnaliza ea
dezvoltatorii de Web folosesc Java in patru direetii principale:
crearea graficii animate, incluzand secvente repetate de
bitmap, prelucrarea atributelor bitmap, desene animate.
crearea obiectelor grafice (grafice, diagrame) pentru care nu
este necesara preluarea datelor de pe server prin script CGliASP.
Tn mod uzual, un grafic se creaza printr-o interogare a unei baze
de date, urmata de producerea unui GIF i trimiterea acestuia la
browser. Aceasta are dezavantajul timpului marit pentru
preluarea fiierelor GIF (in general de dimensiuni mar;) i pentru
crearea unui GIF pe server.
crearea "controalelor': butoane, egalizoare grafice etc. Prin
definirea i preluarea evenimentelor folosind Java applet,
programatorul poate crea obiecte grafice de control.
crearea aplicatiilor bazate pe colectii de controale ca zone de
editare, butoane, spa1ii de selectie etc. Aceasta capabilitate este
similara aplicatiilor JavaScript, dar programul este deja inclus i
com pilat, deci nu se dezvaluie codul sursa.
Nota: Java este un limbaj de programare orientat obiect derivat din
C++, avand toate avantajele POO ale C++ i evitand unele
aspecte neplaeute (alocare dinamica de memorie) pentru marirea
robustelii i seeuritalii codului. Java pune la dispozi!ie 0 coleclie
bogata de biblioteci (packages), ee extind capabilitali1e limbajului.
Printre acestea se numara 0 biblioteea pentru interfata utilizator
(AWT), 0 biblioteca 110, 0 biblioteca pentru ruerul in retea etc.
Programarea Java poate fi folosita pentru crearea applet-urilor ce
se incarea pe Web i sunt executate sub un browser, sau pentru
crearea aplicatiilor autonome (stand-alone). Subiectul acestui
capitol este crearea i folosirea applet-urilor sub browser de
navigare Web.
130
------------------------..... 1...
et
Cit
II
Aplicatii JAVA pentru pagini Web
public class Hello extends Applet
{
public void paint (Graphics g)
{
g.setColor(Color.red) ;
g.setFont(new Font ("Helvetica",Font.PLAIN,24 j
for (int x == 0 ; x < size() .height ; x++)
}
{
}
}
g.drawString("Hello World!", 10, x*15)i
ObseNatie: pentru fiecare nOu8 rulare a modificarilor
In pagina HTML consacrata app/et-ului Hello World!
folositi butonul Reload. Tn cazul in care nu obtineti
, , ,
rezultatu/ scontat, deschideti 0 nOU8 fereastm
Netscape!
Biblioteca AWT permite crearea interfelelor utilizator in interiorul
applet-urilor Java. Biblioteca contine controalele clasiee pentru
dezvoltarea unei interfe1e simple: butoane, spatii de editare (edit
areas), spatii de marcare (check boxes) etc. Tn plus, contine
cateva containere d ife rite , utile pentru aranjarea controalelor pe
ecran.
Exemplul urmator demonstreaza cum sa ereati un buton (push
button) i sa-I plasati intr-un container numit BorderLayout:
/ ButtonTest.java
import java.awt.*;
import java.applet.*;
public class ButtonTest extends Applet {
int Yi
Button bi
public ButtonTest()
y = 10;
}
setLayout(new BorderLayout(;
b == new Button ("Apply") ;
add ("North", b) i
public void paint (Graphics g) {
for (int x = 0 i X < size() . height x+=10) {
9 . drawString ("Hello World! ", y, x) i
}
}
}
133
It I
Ciprian-Daniel NEAGU, Daniela NEAGU
public boolean action(Event ev, Object arg)
{
}
if (ev.target instanceof Button)
{
if ("Apply" . equals (ev. arg) )
{
}
}
y+=10j
repaint() ;
return true;
return false;
Atributul ev. arg aduce eticheta butonului apasat; prin
compararea acestuia cu componentele listei etichetelor de
butoane se poate determina butonul apasat. Bineinteles, se pot
adauga i alte butoane la BorderLayout (Ia S, E ~ i V),
personalizand evenimentele care sa conduca la afil1ari.
Din exemplul precedent trebuie retinute doua aspecte importante:
A. Putem avea un singureontrol in fiecare din cele cine; pozilii ale
BorderLayout.
B. Daca plasam butoane in afara colturilor BorderLayout,
desenarea nu este 0 intrare separata. Spre exemplu, irul
"Hello World!" este afil1at pe suprafata applet-ului iar
butoanele acopera parti ale acesteia; prin urmare trebuie
controlata afil?area in suprafata corespunzatoare.
Pentru a rezolva ambele probleme, se poate folosi un panou
(panel) sau, in cazul unei suprafele de afiare-desenare, 0
panza (canvas). Un panel este preferabil pentru colectarea
impreuna a seturilor de controale, aranjandu-le intr-un rand care
controleaza dimensiunile, daca limitarile de spa1iu ale panoului 0
fac necesara:
/ / SimpleUI. java
import java.awt.*;
import java.applet.*;
class PanelGraph extends Panel
{
int x = 10;
public void paint (Graphics g)
{
for (inc y = 0 i Y < size() .height
136
y+=15)
}
}
{
}
Aplicatii JAVA pentru pagini Web
g. drawString (IIHello World!" I x, y);
public void changeX()
{
x += 10;
repaint();
class PanelUI extends Panel {
Choice c;
}
Pane 1 Graph pg;
public PanelUI(PanelGraph pgIn)
{
add(new Button(IIApplyll i
add(new Label (IITest Colors", Label.RIGHT i
add(c = new Choice{;
c.addItem("Red") ;
c . addItem (" Green") ;
c.addItem("Blue") ;
pg = pg1ni
public boolean action(Event ev, Object arg)
{
if (ev.target instanceof Button)
{
pg.changeX() ;
return true;
return false;
public class SimpleUI extends Applet
{
}
Pane 1 Graph pg;
Pane lUI pui;
public SimpleUI()
{
setLayout(new BorderLayout(;
pg = new PanelGraph() i
add ("Center" I pg) i
Panel p = new PanelUI(pg);
add ("North" 1 p) i
137
Aplicalii JAVA pentru pagini Web
Panoul va contine cele trei controale la nord, restul ferestrei fiind
alocata panoului grafic (figura 7-3). La clic pe buton, textul se va
deplasa.
Pentru a completa programul, vom modifica in Panel Graph
culoarea, In func1ie de culoarea selectata de utilizator (figura 7-4).
Clasa PanelGraph va fi modificata astfel:
class Panel Graph extends Panel
{
int x == 10i
Color c = Color.red;
public void paint (Graphics g)
{
g.setColor(c) i
for (int y == 0 ; y < size() . height ; y+==15)
{
}
g. drawString ("Hello World!", x, y);
public void changeX()
{
}
x +== 10;
repaint();
public void changeColor(Color cin)
{
c '" cini
repaint() ;
Vom modifica ~ i clasa PanelUI astfel:
public boolean action(Event ev, Object arg)
{
if (ev.target instanceof Button)
{
if ("Red" . equals (c.getSelectedItem())
pg.changeColor(Color.red) i
if ("Green" . equals (c.getSelectedItem()
pg. changeColor (Color.green) i
if ("Blue". equals (c. getSelectedItem () ) )
pg.changeColor(Color.blue) i
return true;
return false;
139
Ciprian-Daniel NEAGU, Daniela NEAGU
HeiloWorld!
He!loWorldl
HelioWorldl
Hello World!
Hello World!
Hello World!
Hello World!
HelloWorfd!
Hello World!
He!loWorld!
Hello World!
Hello World!
HeiloWorld!
Hello World!
Hello World!
Hello World!
Hello World!
Figura 7-4. Un applet pentru selectia culoni din /ista de
culon.
Exista multe cazuri In care se dore!?te personalizarea applet-urilor
prin transmiterea parametrilor la apelul sau. Aceasta se realizeaza
prin transmiterea dinspre HTML a parametrilor doriti:
<title>Hello World Demo</title>
<hr>
<applet code=Hello.class width=300 height=120>
<param name=rOW8 value=
fl
4">
</applet>
<hr>
140
Aplica\ii JAVA pentru pagini Web
Parametrii pot avea orice nume dorim. Valoarea parametrilor
transmii dinspre HTML se preia cu metoda get Parameter a
clasei Applet:
String r "" getParameter("rows");
Daca numele parametrului nu exista, atunci getParameter
returneaza null:
if (r == null)
{
= 10; II default value
else
{
r Integer.parseInt(rs);
}
Java permite prograrnarea multi-tasking i faciliteaza lucrul cu
imagini (bitmaps). Aceste doua facilita1i pot fi combinate pentru a
crea anima1ie. Codul de rnai jos este un exemplu de simpla
animalie (figura 7-5): 0 imagine este deplasata pe verticala, de sus
in jos.
import java.awt.*;
import java.applet.*;
public class Logo extends Applet implements
Runnable
{
Image imgi
Thread thd
int ii
null;
int imgWidth = 273;
int imgHeight = 202;
public void rune)
{
img=getImage(getCodeBase(), "tim3.gif");
if (img ! = null)
{
i=imgHeight;
repaint();
while (true)
{
try{Thread.sleep(1000}i}
catch(InterruptedException e) {}
i=O;
while (idmgHeight)
141
'; f
ie'!, sta.ct
Aplica1ii JAVA pentru pagini Web
Figura 7-5. Oep/asarea unei imagini pe verticala.
Metoda update desenul dat la pozilia specificata de
indexul i. In cazul in care se dorete animarea unui set de N
cadre (N este 0 constanta, spre exemplu 15), trebuie doar sa fie
incarcate eele N cadre (frames) intr-un vector de imagini i sa Ie
desenam pe fiecare (prin apeluri ale metodei paint), secvenlial,
in metoda update.
Componentele standard ale unei interfete sunt special realizate
pentru a oferi sau a prelua informaiii de la utilizator:
I' ...... r.::- ... . . . . ... . .... '1
.. .. __ ...... ....... _ ..... """ ... , .......... j
:lcOmponenta generica pentru crearea unui obiect:!
....... .. ....... ........ .. . ... ... ....... . ,I
. . .... .....Mn.
de .... J
.l'scrollbar!Bara de derulare!
: ...... - .......... ................ .. .... -........... , .. -..... , .... , ...... ..... ... ., ... ' ........
.. .. ...=1
ilTextl\rea . :Icamppentru editarea unor linii multipledE}text .'1
Componenta TextField permite introducerea de catre utilizator,
1n cadrul unei cutii ("box") a unei singure linii de text. Numarul de
caractere care sunt vizibile in fandul de text poate fi specificat
explicit.
143
--------------------........
Ciprian-Daniel NEAGU. Daniela NEAGU
Adaugarea unei componente TextField lntr-o fereastra se face
asemanator cu adaugarea unui buton sau a oricarei alte
componente:
TextField t = new TextField(12);
add(t) ;
Parametrul12 din apelul constructorUlui TextField (12) seteaza
lungimea textului care urmeaza sa fie la aproximativ 12
caractere. Utilizatorul poate tasta mai mult de 12 caractere, dar
numai unele dintre ele vor fi
Observatie: numarul de caractere afiate depinde de
caracterele tastate. Se pot afia ma; multe caractere,
daca forma caractere/or este mai ingusta.
Daca un este specificat ca parametru:
TextField t == TextField("your name") i
atunci campul text este creat ca avand implicit valoarea
parametrului. Se pot specifica in apeJ atat textul implicit, cat
lungimea textului, astfel:
TextField t == new TextField(lIyour name", 20);
Daca nu este setata 0 valoare implicita, deci nu se specifica
lungimea printr-un parametru, rezuItatuI este un text de un
singur caracter. Un exemplu simplu de introducere a unui control
al clasei TextField intr-un applet este urmatorul:
import java.awt.*;
import java.applet.*;
public class Applet1 extends Applet{
TextField text;
}
public void init() {
text == new TextField(20) ;
add (text) i
in primele doua linii ale exemplului anterior se specifica faptul ca
programul clase din pachetele AWT si APPLET.
Instructiunea: public class Applet1 extends Applet
arata ca Appletl deriva din clasa Applet.
Tn continuare se declara "text" ca fiind un obiect al clasei
TextField. Apoi se apeleaza metoda init () a clasei Applet.
in cadrul metodei, se creaza un nou obiect TextField:
text=new TextField(20) ;
Prin linia add (text) se adauga obiectul TextField applet-ului.
144
Aplica\ii JAVA pentru pagini Web
Pentru a rula acest applet, se salveaza cu numele
Appletl. java, se compileaza, apoi se creaza un document
. html astfel:
<html>
<head>
<title>Applet Test Page</title>
</head>
<body>
<hl>Applet Test Page</hl>
<applet code="Appletl.class" width=200 height=150
name="Appletl">
</applet>
</body>
</html>
Campurile de tip TextArea sunt asemanatoare cu TextField,
numai ca permit introduce rea mai multor linii de text. Numarul de
linii i numarul de caractere vizibile de pe 0 linie din cadrul ariei de
text pot fi configurate. Exemplu:
TextArea t = new TextArea(5,20) i
add(t)i
Parametrii 5 i 20 ai constructorului specifica numarul de linii i
numarul de caractere de pe 0 linie. Daca textul introdus depaete
marginea ariei de afiat. apare 0 bara derulanta care permite
utilizatorului sa se deplaseze intre diferitele sec1iuni ale ferestrei.
Daca se specifica un ir ca parametiU:
TextArea t=TextArea("$ir de caractere",7, 25) i
atunci aria de text este creata avand irul parametru text implicit.
incarcat la inceput. Pentru a introduce 0 parte a acestui ~ i r la
inceputulliniei urmatoare se folosete caracterul "\n" astfel:
TextArea t=TextArea("$ir de \n ",7,25);
Sa studiem modul de utilizare a unui text introdus printr-un
TextField in exemplul urmator:
import java.awt.*;
import java.applet.*i
public class Applet2 extends Applet{
TextField textFieldi
public void init() {
textField = new TextField(20) ;
add (textField) i
public void paint (Graphics g) {
145
;',\
\.) }
; /
Aplica\ii JAVA pentru pagini Web
resize(600,300);
//dimensiunile initiale ale ferestrei
show() ;
}
void addComponents()
add(labl) ;
add("Center",tfl) ;
add(infLabel);
}
add (lab2) ;
add(tf2) ;
add (supLabel);
add(lab3);
add(tf3);
add (nrpLabel) ;
add (lab4) :
add (butl) ;
add (labS) :
public-boolean handleEvent(Event e)
if (e.id==Event.WINDOW DESTROY)
System.exit(O): -
return true:
}
else
if(e.id==Event.ACTION_EVENT&&e.target instanceof Button) {
try {
double inf=(new Double(tfl.getText() .doubleValue();
ihfLabel.setText("I1+inf) ;
double sup = (new Double(tf2.getText() .doubleValue():
supLabel.setText("I1+sup) ;
int nrPasi = Integer.parselnt(tf3.getText(;
nrpLabel.setText(""+nrpasi) ;
double result = integrTrap(inf,sup,nrPasi);
labS.setText(" Rezultatul integrarii este:"+result):
return true;
}
catch(NumberFormatException ell {
labS.setText("Format gresit la datele de intrare"+el);
}
catch(Exception e2) {
labS.setText(e2.getMessage( ;}
return true;
} else
if (e.id==Event.ACTION EVENT&&e.target
instanceof TextField){
return true;
else return false;
double integrTrap(double inf,double sup,int nrPasil throws
Exception {
if (nrPasi<=O) throw (new E..--cception (IINumar de pasi
incorect")l;
147
Ciprian-Daniel NEAGU, Daniela NEAGU
else {
double h=(sup-inf)/nrPasi;
if (inf==sup) return 0;
double suma=O;
for(int i=l;i<nrPasi;i++)
suma+=func(inf+i*hl;
return func{inf) +func(sup/2+suma)*h;
}
}
double func(double xl {
return Math.sqrt(1.2 + Math.sin(2*x+l)*Math.cos(x;
}
}
Programul creaza 0' grila de obiecte cu ajutorul clasei
GridLayout. Grila este completata de la stanga la dreapta i de
sus in jos. Fiecare dintre obiectele grilei sunt instanle ale unor
obiecte definite in Java. Prin event handler se trateaza
evenimentul generat de metoda handleEvent (). Evenimentul
poate fi inchiderea ferestrei, apasarea butoQului sau introducerea
unui ir de caractere. Tn cazul in care este apelat obiectul buton,
daca datele sunt corecte, se calculeaza integrala functiei func; iar
daca nu, se afieaza un mesaj (figura 7-6).
sup,
1
100
de pas! ( de Integrare )
12,0
Intrnnllo."" core eta ? Rezultalullntegraril
148
Figura 7-6. Gestionarea mai multor controale Java printr-o
gril8 de obiecte grafice.
1
Cli
Ciprian-Daniel NEAGU. Daniela NEAGU
Divizare
eu <DIV
aliniere
ALIGN=LEFTIRIGHTICENTER></DIV>
Citat
<BLOCKQUOTE></BLOCKQUOTE>
Evidentiere
<EM></EM>
Evidentiere
<STRONG></STRONG>
prin

Citat
<CITE></CITE>
Cod
<CODE></CODE>
Exemplu de
<SAMP></SAMP>

Exemplu de
<KBD></KBD>
intrare de fa
tastatura
Variabila
<VAR></VAR>
Definilie
<DFN></DFN>
Adresa de
<ADDRESS></ADDRESS>
autor
Font mare
<BIG></BIG>
Font mie
<SMALL></SMALL>
FORMAT DE PREZENTARE

<B></B>
Aplecat
Subliniat
Evidentiat
<STRIKE></STRIKE>
Evidentiat
<S></S>
150
(de obiee;
deplasat)
(de obieei
aplecat)
(de obicei

(de obicei
aplecat)
(listarea
codului
sursa)
(nu prea
raspandit)
(nu prea
raspandit)
(nu prea
raspandit)
fontu;ci;
r.iGfl j tt


':?


fonl'u:;'
font
/
>
Ciprian-Daniel NEAGU, Daniela NEAGU
Marimea <SPACER SIZE=?>
distantarii
Dimensiuni <SPACER WIDTH=? HEIGHT=?>
de distantare
Aliniere <SPACER
ALIGN=left I right I center>
LINK-URI $1 FI$IERE GRAFICE
Link catre <A HREF="URL"></A>
alt
document
Link catre <A HREF="URL#***"></A>
un target
Fereastra
t
inta
Definire
target Tn
document
Relatie
Rela\ie
inversa
<A HREF="#***"></A>
<A HREF="URL"
TARGET="***ILblankLselfLparentUop"></A>
<A NAME="***"></A>
<A REL=,,*u"></A>
<A REV="***"></A>
Tncarcare <IMG SRC="URL">
imagine
Aliniere
Aliniere
<IMG SRC="URL"
ALlGN=TOPIBOTTOMIMIDDLEILEFTIRIGHT>
<IMG SRC="URL" ALlGN=TEXTTOPI
ABSMIDDLEIBASELINEIABSBOTTOM>
Alternare <IMG SRC="URL" AL T="***">
text
Mapare <IMG SRC="URL" ISMAP>
imagine
Utilizare
imagine
mapata
152
<IMG SRC="URL" USEMAP="URL">
(1n alt
document)
(in a c e l a ~ i
document)
(nu prea
raspEmdit)
(nu prea
raspandit)
(daca
imaginea
nu este
incarcata)
(cere un
CGI)
r:,::nc;nar



(: () t!J'TE: T';:;:. t; [7, L ,", tJ

'fnc'hk;k)!tHa
Ciprian-Daniel NEAGU, Daniela NEAGU
Lungime <HR WIDTH="%">
(procent din
procentuala latimea
paginii)
Linie solida <HR NOSHADE> (fara aspect
3D)
Linie text <NOBR></NOBR> (previne
continu;3 trecerea la
linie noua)
Trecere la linie <WBR> (unde e
noua
nevoie)
LlSTE
Liste <UL> U> inainte de
nenumerotate
<LI> ...
fiecare element al
</UL>
listei)
Lista <UL COMPACT></UL>
(nenumerotata)
compacta
Tipul <UL (pentru toata \ista)
bullet-ului
TYPE=DIsclcIRCLEISQUARE>
<LI (acesta ~ i
TYPE=DISCI CIRCLE I SQUARE>
urmatorii)
Liste <OL> U> inainte de
numerotate <LI> ...
fiecare element al
</OL>
listei)
Usta <OL COMPACT></OL>
(numerotata)
compacta
Tipul <OL TYPE=AlaIIlill>
(pentru toata lista)
numaratorii
TYPE=AlaIIlill> <LI (acesta ~ i
subsecventele
sale)
Numarde <OL START=?> (pentru toata lista)
lnceput
<LI VALUE=?> (acesta ~ i
subsecvenlele
sale)
Liste de <DL><DT><DD></DL> (DT: termen
definilii DO: definilie)
Lista <DL COMPACT></DL> (de defini\ii)
compacta
154
"
)ste ch?

C:u;lo.are
funrf1Z:,tt
L ..
<:Li.i.R.>
;>
.;.
Tnfl:r\te de
fiecarc:
1)erlnlreH

[)in",ensiun(;t

Anexa 1: lista principalelor etichete HTML 4.0
Spatiere text <TEXTAREA
WRAP=OFF !VIRTUAL! PHYSICAL>
< / TEXTA.."tEA>
TABELE
Definire tabel <TABLE></TABLE>
Chenar tabel <TABLE BORDER=?></TABLE>
Spatiu intre <TABLE CELLSPACING=?>
celule
Spatiu fata de <TABLE CELLPADDING=?>
marginea celulei
Dimensiune <TABLE WIDTH=?>
dorita
Dimensiune <TABLE WIDTH="%">
procentuala
Linie de tabel <TR></TR>
Aliniere <TR ALIGN=LEFTIRIGHTI
CENTER I MIDDLE I BOTTOM
VALIGN=TOP/BOTTOM I MIDDLE>
CeluJa de tabel <TD></TD>
Aliniere <TD ALIGN=LEFT I RIGHT I
CENTER I MIDDLE I BOTTOM
VALIGN=TOpIBOTTOMIMIDDLE>
Fara linii noi <TD NOWRAP>
Pe cate coloane <TD COLSPAN=?>
se intinde
Pe cate linii se <TD ROWSPAN=?>
intinde
Dimensiune <TD WIDTH=?>
dorita
Dimensiune <TD WIDTH="%">
procentuala
Culoarea <TD BGCOLOR="#$$$$$$" >
fundalului
celulei
(1n pixeli)
(procentaj din
pagina)
(apare in
interiorul unei
linii de tabel)
(in pixeli)
(procentaj din
tabel)
157
----------------------------....
'::.
l\L I (:U\f;.;; j
i B'(}T1iT<)l\'I
<I.E
din
;. ...
{' ;.::.-
Cu,loaroa
UHL
<
I\TI\.f'lE :!': 11 \1 i
Gr,) cuno

Ciprian-Daniel NEAGU. Daniela NEAGU
Aliniere
Dimensiune
Distantare
DIVERSE
Comentariu
<APPLET
ALIGN="LEFT I RIGHT I CENTER">
<APPLET WIDTH=? HEIGHT=?>
<APPLET HSPACE=? VSPACE=?>
<1-- *** -->
HTML 3.2 Prolog <!DOCTYPE HTML PUBLIC
1f-//W3C//DTD
De ciiutat
Afiare
Trimitere ciiutare
URL fiier curent
Nume de baza-
fereastra
HTML 3.2//EN">
<ISINDEX>
<IS INDEX
PROMPT="***">
<A HREF="URL?***">
<fA>
<BASE HREF="URL">
<BASE TARGET==If***">
(in pixeli)
('in pixeli)
(neafiat de
browser)
(indica un
index de
ciiutat)
(text de afiat
la
introducere)
(se folosete
un semn de
intrebare)
(trebuie sa fie
in header)
(trebuie sa fie
in header)
Relatie <LINK REV=" * * * " (trebuie sa fie
Meta-informatii
Foi de stil
Script-uri JavaScript
160
REL= If * * *" HREF=" URL If> in header)
<META>
<STYLE></STYLE>
<SCRIPT></SCRIPT>
(trebuie sa fie
in header)
header parse. h (declaratia clasei Parse)
1/ Extrage components ale unui rezultat CGI
II Exemplu:
/1 name=Your+name&action=%2B10%25&log=-mas/log
II este compus din trei elemente:
II Element: asociat elementului
// name: Your name
1/ action: +10%
II log: lusrlstaff/mas!log
II (C) M.A.Smith UniverSity of Brightonl
II Permission is granted to use this codel
II provided this declaration and copyright notice remains intact.1
II 21 October 1995
#ifndef CLASS PARSE
#define CLASS=PARSE
#include "t_type.h"
class Parse
{
public:
ParseC char [J );
-Parse () ;
void sete char [1 );
char *get item ( char [I, int pos=l, bool=false );
char *get-item n( char [I, int pos=l, bool=false I;
protected: - -
void remove escape(char [J);
int hex ( char );
char *map_uname( char [J );
private:
};
enum { SEP = '&' );
char -the str;
int the_length;
#endif
II Strip escape characters
II Return hex value
1/ process -uname -> home path
II Seperator for fields
II String parsed
1/ Length of the string
sursa parse. cpp (expand area metodelor clasei Parse)
II (C) M.A.Smith University of Brighton
II Permission is granted to use this code
1/ provided this declaration and copyright notice remains intact.
1/ 21 October 1995
#ifndef CLASS_PARSE_IMP
#define CLASS_PARSE_IMP
#include "parse.h"
#include <string.h>
#include <ctype.h>
#ifndef NO MAP
# include
#endif
Parse::Parse( char list[] }
{
the str = NULL;
set( list I;}
')
if \ 1_ _'
l-'''
J..,
:
',: I
i,
'.'1
ii!
j y .
L \ .. ':i:' .. '::
c"!
)
l:
//
:" !
/;' .
) ;
Ciprian-Daniel NEAGU, Daniela NEAGU
#define DOES_NOT_HAVE_EXCEPTION_CLASSES
#define DOES_NOT_HAVE_MUTABLE
#define DOES_NOT_HAVE_EXPLICIT
#define DOES_NOT_HAVE_NAMESPACE_STD
#endif
#if V4
#define DOES_NOT_HAVE_BOOL
#define DOES_NOT_HAVE_EXCEPTION_CLASSES
#define
#define DOES_NOT_HAVE_EXPLICIT
#define DOES_NOT_HAVE_NAMESPACE_STD
#endif
#if V5
#define DOES NOT HAVE EXCEPTION CLASSES
II#define HAS_NAMESPACE_STD
#endif
#ifdef GNUC
INCLUDE libiop
II#define DOES-NOT HAVE EXCEPTION -fhandle-execeptions
#define DOES NOT HAVE EXCEPTION CLASSES
I/#include <Std/stdexcep.h> (Broken)
#define DOES NOT HAVE MUTABLE
#define DOES=NOT=HAVE:EXPLICIT
#define DOES_NOT_HAVE_NAMESPACE_STD
#endif
#ifdef DOES NOT NAMES PACE STD
#define std- - - -
#endif
#ifdef NEED TO INCLUDE libiop
#include <lIbioP.h>
#endif
#Udef DOES NOT HAVE BOOL
# define bool int -
11 define true 1
11 define false 0
#endif
#ifdef DOES NOT HAVE MUTABLE
# define mutable -
#endif
#ifdef DOES NOT HAVE EXPLICIT
# define explicit -
#endif
#ifdef DOES NOT HAVE EXCEPTION
# define throw
# define try
# define catch( parameter) exception err; if ( false)
#endif
#undef DOES_NOT_HAVE_EXCEPTION_CLASSES
#ifdef DOES_NOT_HAVE_EXCEPTION_CLASSES
# ifdef DOES NOT HAVE STRING
# include "t99:str.h"
#
#
#
#
#
#
#
else
ifde GNUC
include <string.h>
else
include <cstring.h>
endif
endif
164
------------------........
cell
\
! '
-3. .1: ':1 )

1-':;:'!:1::Y2 ;:":, i'
) {j,
) {};
) ;
! ,
j;
J ;
f
.':''i:: 1
"CGT"
Ciprian-Daniel NEAGU. Daniela NEAGU
Fiierui sursa mas_form. cpp:
II (e) M.A.Smith University of Brighton
II Permission is granted to use this code
II provided this declaration and copyright notice remains intact.
II 26 August 1995
#include "t_type.h"
#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>
#include "mas_cvo.cpp"
void intro () ;
void finish() ;
void form data output();
void stream datal);
void return-button();
char' getenv _n ( char [] );'
/1 Main program
int main ()
{
introO;
form data output();
stream data () ;
return-button();
finish();
return 0;
void intro ()
{
cout "Content-type:
lI\n
ll
i'\n
ll
;
cout II <HTML>
cout II <HEAD>
"

cout "</HEAD>
"

text/html"
tI\nn j
ft\n";
"\nll;
coot "<BODY BGCOLOR=White>
void form_data_output( )
{
cout "<P>" "\n
lt
i
tt\nJl
"\n";
cout "The data sent to the form processing program "
"in the environment variable QUERY_STRING is:" "\n";
cout <;< If<P>" "\n
ll
"\nll;
cout "<TABLE BORDER CELLPADDING=2>" "\n" ;
cout "<TD>" u\n
ll
i
coot getenv n( "QUERY_ STRING" ) u\n";
cout It</TD>" lI\n
ll
;
cout "</TABLE>" "\n";
void stream_datal)
{
char chi
cout I1<P>U I'\n" ;
cout "Contents of stdin" u<p>" tf\nll;
cout "<TABLE BORDER CELLPADDING=2>"
cout II <TD>" "\nlf;
cout tt<PRE>" lI\n
lt
;
cout
1111
It\n";
{
int len = 0;
char *p ch = getenv( "CONTENT_LENGTH" };
it ( p ~ h != NULL) len = atoi( p_ch );
if ( len> 0 )
(
cin resetiosflags( ios::skipws );
168
n\n";
a
it' j, e ) ~ : .
I!
!',
Ii
eh. Ie
6t.T.' [t ; {
n
t" \ {
r) ;
1'; 1ri:rn1 ~ '
'1 \,;! > I;
; :
) :
I
Ciprian-Daniel NEAGU, Daniela NEAGU
html ("REMOTE IDENT ") ; html( getenv_n( "REMOTE_IDENT" ) ) ;
html
- ( "REMOTE-USER "); html( getenv_n( "REMOTE_USER" ) ) ;
html :::: ( "REQUEST_METHOD ") ; html( getenv_n( "REQUEST_METHOD" ) );
html
-
( "SCRIPT_NAME
II);
htm1(
html
-
( "SERVER NAME "} i html(
html
-
( "SERVER:::: PORT
If) ; html(
html
-
("SERVER_PROTOCOL ") ; html(
html
-
( "SERVER_SOFTWARE
II); html(
html (U<p>lI) ;
html ("Unix command pl-intenv") ;
cout flush;
system ( "printenv I sort" );
html(fI<P>") ;
html ("Unix command set") ;
cout flush;
system ( "set I sort" );
html( "</PRE>" );
html( "</BODY>" );
html ( "</HTML>" );
sursa mas _ rec . cpp:
getenv_n( "SCRIPT_NAME" ) ) ;
getenv_n( "SERVER_NAME" ) );
getenv n( "SERVER_PORT" ) );
getenv n( "SERVER_PROTOCOL"
getenv_n( "SERVER_SOFTWARE"
II Record details about who the viewer of a web page is
II (C) M.A. Smith University of Brighton
II Permission is granted to use this code
)
)
II provided this declaration and copyright notice remains intact.
1/ 26 August 1995
lIinclude "t type.h"
lIinclude <iostream.h>
lIinclude <fstream.h>
lIinclude <iomanip.h>
lIinclude <stdlib.h>
lIinclude <time.h>
#include <string.h>
lIinclude <ctype.h>
#include "parse.hl!
lIinclude "parse.cpp"
#include "mas_cvo.cppll
void write leg entry( char!], chart] );
void cgi var output();
char' getenv-n( char [] );
void git output( char [J );
II param;ters to the CGI pregram
II passed in the QUERY STRING environment variable
II -
II file;mame Names the file to which leg information is written
l;
) ;
II page=name - The name of the page that will be written to the leg
II img;name - Names the image file which is returned
II - If no name or unreadable an image of a . is returned
II - If this parameter is omitted then a web page of CGr
II variables is returned to help in debuging
II Remember all files name must be absolute or relative to the
II director! in which the CGr script is run
int mainO
{
char *query str = getenv("QUERY STRING");
Parse liat(-query_str == O? -
"file=maa&page=Test&" : query atr );
if ( list.get item( "file" ) 1= NULL) -
( -
}
write_leg_entry( list .get_item_n( "file", l, true),
list.get_item_n( "page" ) );
if list.get_item( "img" ) NULL)
{
170
l'j "
g
-;,:.ha-r..' c,
:'Xi;.lt. 1;;':::',
< l ,;"c, I j;
,0'
; ;
ll1
SOOOG

'{,5000
It(n::;{rtr.Hnr,
"
t
- TEH?KH.O{;II WEB ".
-
Hcnon iel
- G.t\UGOL SIMBOUC

S-ar putea să vă placă și