jegyzet a fejlett webes technológiák elõadáshoz a sysdata...

243
Jegyzet a Fejlett Webes technológiák el˝ oadáshoz A Sysdata támogatásával Bilicki Vilmos 2002. december 19.

Upload: others

Post on 14-Jan-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

Jegyzet a Fejlett Webes technológiákeloadáshoz

A Sysdata támogatásával

Bilicki Vilmos

2002. december 19.

Page 2: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

2

Page 3: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

Tartalomjegyzék

1. Eloszó 7

I. A World Wide Web alapjai 9

2. A HTTP protokoll 132.1 A kérés üzenet . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.2 A válasz üzenet . . . . . . . . . . . . . . . . . . . . . . . . . . 192.3 Biztonság . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

2.3.1 Basic Authentication . . . . . . . . . . . . . . . . . . . 212.3.2 Digest Access Authentication . . . . . . . . . . . . . . 22

3. Az SHTTP protokoll 27

4. A TLS protokoll 29

5. A HTML nyelv 315.1 A html dokumentum általános felépítése . . . . . . . . . . . 315.2 Logikai felépítést definiáló elemek . . . . . . . . . . . . . . . 345.3 Szöveg formázása . . . . . . . . . . . . . . . . . . . . . . . . . 355.4 Táblázatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375.5 Hivatkozások . . . . . . . . . . . . . . . . . . . . . . . . . . . 435.6 Keretek (Frames) . . . . . . . . . . . . . . . . . . . . . . . . . . 435.7 Objektumok, Képek, appletek . . . . . . . . . . . . . . . . . . 445.8 Urlapok (Forms) . . . . . . . . . . . . . . . . . . . . . . . . . . 48

6. CSS 536.1 A CSS nyelv szabályai . . . . . . . . . . . . . . . . . . . . . . 546.2 A CSS definiálása . . . . . . . . . . . . . . . . . . . . . . . . . 556.3 Az egyes elemek tulajdonságai . . . . . . . . . . . . . . . . . 56

7. Az XML nyelv 617.1 XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617.2 XSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

3

Page 4: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

4 TARTALOMJEGYZÉK

8. WEBDAV 758.1 Metódusok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 758.2 Zárolás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 768.3 Paraméterek továbbítása . . . . . . . . . . . . . . . . . . . . . 76

9. WAP 799.1 WAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

9.1.1 A WAP architektúra . . . . . . . . . . . . . . . . . . . 809.2 WML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

II. Dinamikus tartalom 91

10. Bevezeto 93

11. Szkript nyelvek 9511.1 Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

11.1.1 Alprogramok . . . . . . . . . . . . . . . . . . . . . . . 10211.1.2 Modulok . . . . . . . . . . . . . . . . . . . . . . . . . . 10311.1.3 Objektum Orientált Programozás Perl-ben . . . . . . 104

11.2 Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10711.2.1 Bevezeto . . . . . . . . . . . . . . . . . . . . . . . . . . 10711.2.2 Változók . . . . . . . . . . . . . . . . . . . . . . . . . . 10711.2.3 Vezérlo szerkezetek . . . . . . . . . . . . . . . . . . . . 11111.2.4 Fájlkezelés . . . . . . . . . . . . . . . . . . . . . . . . . 11211.2.5 Függvények . . . . . . . . . . . . . . . . . . . . . . . . 11211.2.6 Modulok, Csomagok, Névterek . . . . . . . . . . . . . 11311.2.7 Objektumorientált Programozás Python-ban . . . . . 114

12. CGI 11712.1 A CGI alapveto elemei . . . . . . . . . . . . . . . . . . . . . . 119

13. Kliens oldali programozás 12113.1 Javascript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

13.1.1 Változók . . . . . . . . . . . . . . . . . . . . . . . . . . 12313.1.2 Kifejezések . . . . . . . . . . . . . . . . . . . . . . . . . 12413.1.3 Feltételes utasítások, ciklusok . . . . . . . . . . . . . . 12413.1.4 Függvények . . . . . . . . . . . . . . . . . . . . . . . . 12613.1.5 Objektumok . . . . . . . . . . . . . . . . . . . . . . . . 126

13.2 Visual Basic Script . . . . . . . . . . . . . . . . . . . . . . . . . 13513.2.1 Változók . . . . . . . . . . . . . . . . . . . . . . . . . . 13513.2.2 Operátorok . . . . . . . . . . . . . . . . . . . . . . . . 13613.2.3 Feltétleles utasítások, ciklusok . . . . . . . . . . . . . 13713.2.4 Függvények . . . . . . . . . . . . . . . . . . . . . . . . 13813.2.5 Objektumok . . . . . . . . . . . . . . . . . . . . . . . . 141

Page 5: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

TARTALOMJEGYZÉK 5

13.2.6 ActiveX . . . . . . . . . . . . . . . . . . . . . . . . . . 141

14. 3 rétegu architektúrák 143

15. Java 14715.1 Java Applet . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149

15.1.1 Inicializálás, Futás, Kilépés . . . . . . . . . . . . . . . 15015.1.2 Rajzolás, Eseménykezelés . . . . . . . . . . . . . . . . 152

15.2 JDBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15415.2.1 Rétegek . . . . . . . . . . . . . . . . . . . . . . . . . . 15415.2.2 A fontosabb JDBC objektumok használata . . . . . . 15515.2.3 Tranzakció kezelés . . . . . . . . . . . . . . . . . . . . 158

15.3 Java Servlet . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16015.3.1 A Servlet architektúra . . . . . . . . . . . . . . . . . . . 16115.3.2 Együttmuködés a kliensekkel . . . . . . . . . . . . . . 16215.3.3 A Servlet életciklusa . . . . . . . . . . . . . . . . . . . 16415.3.4 A kliens állapot elmentése . . . . . . . . . . . . . . . . 16615.3.5 Információ megosztás Servlet-ek között . . . . . . . . 170

16. Szerver oldali programozás 17516.1 PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176

16.1.1 Alapveto szintaxis . . . . . . . . . . . . . . . . . . . . 17616.1.2 Változók . . . . . . . . . . . . . . . . . . . . . . . . . . 17816.1.3 Konstansok . . . . . . . . . . . . . . . . . . . . . . . . 18016.1.4 Operátorok . . . . . . . . . . . . . . . . . . . . . . . . 18016.1.5 Vezérlési szerkezetek . . . . . . . . . . . . . . . . . . . 18116.1.6 Függvények . . . . . . . . . . . . . . . . . . . . . . . . 18316.1.7 Osztályok, objektumok . . . . . . . . . . . . . . . . . 18416.1.8 Együttmuködés Webszerverrel . . . . . . . . . . . . . 18616.1.9 Együttmuködés adatbázisokkal . . . . . . . . . . . . . 186

16.2 ASP (Active Server Pages) . . . . . . . . . . . . . . . . . . . . . 18816.2.1 Az Objektum modell . . . . . . . . . . . . . . . . . . . 18916.2.2 Adatkezelés, ADO (ActiveX Data Objects) . . . . . . . 19716.2.3 Global.asa fájl . . . . . . . . . . . . . . . . . . . . . . . 201

16.3 JSP(Java Server Pages) . . . . . . . . . . . . . . . . . . . . . . . 20316.3.1 A JSP áttekintése . . . . . . . . . . . . . . . . . . . . . 20316.3.2 Dinamikus tartalom generálása . . . . . . . . . . . . . 20416.3.3 Beépített Objektumok . . . . . . . . . . . . . . . . . . 205

III. Web szerverek 207

17. Bevezeto 209

Page 6: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

6 TARTALOMJEGYZÉK

18. Apache 21118.1 Szabványok támogatása . . . . . . . . . . . . . . . . . . . . . 21118.2 Környezet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21118.3 Adminisztrálás . . . . . . . . . . . . . . . . . . . . . . . . . . 21218.4 Események mentése (log) . . . . . . . . . . . . . . . . . . . . . 21218.5 Biztonság . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21218.6 Process-ek szálak kezelése . . . . . . . . . . . . . . . . . . . . 213

19. iPlanet Web szerver 21519.1 iPlanet Web Server Architektúra . . . . . . . . . . . . . . . . . 216

20. Servlet Engine-k 21920.1 Bevezeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22020.2 Tomcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22120.3 JRUN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222

IV. Alkalmazás szerverek 223

21. Bevezeto 225

22. J2eesdk 22722.1 Referencia megvalósítás . . . . . . . . . . . . . . . . . . . . . 22722.2 Adatbázis elérés . . . . . . . . . . . . . . . . . . . . . . . . . . 22722.3 J2EE API-k . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22822.4 Eszközök . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229

23. JRun 231

24. Webogic 23324.1 T-motor (T-engine) . . . . . . . . . . . . . . . . . . . . . . . . . 23324.2 J-motor (J-engine) . . . . . . . . . . . . . . . . . . . . . . . . . 234

25. iPlanet 23525.1 Jellemzok áttekintése . . . . . . . . . . . . . . . . . . . . . . . 235

25.1.1 Alap szolgáltátsok . . . . . . . . . . . . . . . . . . . . 23525.1.2 Vállalti és üzlet-üzlet intgrálási szolgáltatások . . . . 23625.1.3 Process menedzselo rendszer . . . . . . . . . . . . . . 23625.1.4 Business Process fejleszto környezet . . . . . . . . . . . 23725.1.5 J2EE fejleszto környezet . . . . . . . . . . . . . . . . . 23725.1.6 Integrálás az iPlanet Directory szerverrel és a iPlanet

Web szerverrel . . . . . . . . . . . . . . . . . . . . . . . 23725.1.7 Támogatott platformok . . . . . . . . . . . . . . . . . 237

Page 7: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

1. fejezet

Eloszó

Néhány szó a WEB, Webes technológia történelmérol: A tudományok fej-lodésével egyre nagyobb igény mutatkozott a dokumentumok egységes,szakszeru, átlátható tárolására. A felhalmozódott tudásmennyiség kezelé-sére egyre kevésbé volt alkalmazható a hagyományos papír alapú megol-dás. Vannevar Bush 1945-ben egy nevu tudáskezelo rendszert írt le a AsWe May Think [1] címu cikkében. Theodor Holm Nelson [2] szintén meg-álmodta az alkalmas dokumentumkezelo rendszert. 1965-ben O használtaeloször a hypertext kifejezést , melynek definíciója:

A hypertext az információ egy olyan összekötött információscsomópontokból álló hálózatának megjelenítése melyekenaz olvasó tetszolegesen tud közlekedni, nem lineáris módonis.

A napjainkban is használt HTML(HyperText Markup Language)(5) nyelvelso verzióját a CERN-ben dolgozó Tim Berners-Lee és Robert Caillau dol-gozta ki. Az információ tárolásra, lekérésre a már jól bevált kliens-szervermodellt használták fel. Megjelentek az elso Web szerverek és a hozzájuktartozó Web kliensek. Az átvitelrol a HTTP (2) protokoll gondoskodott.

Miért érdekes számunkra a téma? Miért olyan népszeru napjainkban aWebes technológia? Három kulcsszóval jellemezhetjük:

• elosztott rendszerek (skálázhatóság)

• vékony kliens technológia (minimális adminisztráció)

• platform független (heterogén rendszerek együttmuködése, nem va-gyunk egyetlen céghez sem kötve)

7

Page 8: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

8 FEJEZET 1. ELOSZÓ

Napjainkban kihasználva a helyi számítógépes hálózat adta lehetosé-geket a legtöbb alkalmazás igyekszik a többivel együttmuködni (kisebb,nagyobb sikerrel . . . ). Ezen együttmuködés a legtöbb esetben kliens szer-ver alapú. Komoly alkalmazás rendszerek alakulhatnak ki. Pl.: Egy cso-portmunka támogató keretrendszer a felhasználók kommunikációján kí-vül tartlamazhatja az üzleti logikát, feladat elosztást . . . stb. Lehetové vá-lik a felhasználók együttmuködése, mobilitása, központi adminisztrációja.Egyre komplexebb feladatok megoldása válik lehetové elosztott egymássalegyüttmuködo renszerek segítségével. A cégek muködésük paramétereitfolyamatosan nyomon követhetik, optimalizálhatják (ERM, CRM rendsze-rek). Ezen tulajdonságok jelentik a mozgatóerejét a webesítés nevu folya-matnak melynek keretében egyre több feladat megoldása kerül át webesrendszerek hatókörébe. Ma ezen trend felfutó ágában vagyunk. Egy má-sik komoly terület mely nem különítheto el teljes mértékben az elozotol aze-commerce, e-business. Olyan alkalmazások, szabványok, technológiák van-nak kialakulóban melyek segítségével a vállalatok viszonylag biztonságo-san, automatikusan tudnak üzleti tranzakciókat kezelni. (Pl.: egy autógyárszámítógépes rendszere automatikusan megrendeli a szükséges alkatrésze-ket a beszálító rendszerétol mely további tranzakciókat kezdeményezhet.Itt megemlíthetjük az onile banking-et is, melynek keretében banki tranzak-ciókat kezelhetünk webes rendszereken keresztül.)

A jegyzet ezen hatalmas területet próbálja áttekinteni négy részre osztvaazt:

• Az elso részében megismerkedünk a Web alapjaival. Áttekintjük egy-részt az átviteli protokollokat, másrészt megismerkedünk a tartalommegjelenítés módszereivel (HTML(5),XML(7), . . . ). Itt ismerkedünkmeg a mobil világot és az Internetet összekapcsoló WAP(9) környe-zettel is.

• A második részben, mely a jegyzet illetve az eloadás domináns részétképezi áttekintjük a ma hsznált legfontosabb technológiákat melyeksegítségével adatbázisokból, vagy más adatforrásokból dinamikus afelhasználó igényei szerint változó oldalakat állíthatunk elo.

• A harmadik rész már teljesen a szerver oldallal foglalkozik. Átte-kintjük benne a web szerverek legfontosabb jellezoit muködésüket ésnéhány népszerubb webszervert.

• A negyedik rész önmagában is több jegyzetet lefedhetne. Itt ismerke-dünk meg az alkalmazás szerverekkel melyek biztonságos, jól mene-dzselheto környezetet nyújtanak a szerver oldali programok futtatá-sához.

Page 9: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

I. rész

A World Wide Web alapjai

9

Page 10: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,
Page 11: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

Bevezeto

Mielott belemerülnénk a részletekbe érdemes áttekinteni egy webes rend-szer felépítését, muködését. Az 1.1 ábrán látható egyszerusített vázlaton,az adatforgalomra helyeztük a hangsúlyt. Mint említettük a viszony kliensszerver alapú. A kliens kér egy weboldalt a szervertol, mely szerencsésesetben visszaküldi azt. A rendszer természetesen nem ilyen egyszeru. Az

1.1. ábra. WEB vertikális metszet

átvitel folyamán sok mindenrol kell gondoskodni. A különbözo rétegekezen feladatokat megoldására lettek kifejlesztve. Átviteli protokollként ajelenleg leginkább elterjedt TCP/IP protokollt ábrázoltuk, azonban bármelytranszparens átvitelt biztosító protokoll megfelel erre a célra. A másodikréteg (TLS (4)) biztosítja az átvitel biztonságát, megbízhatóságát, titkosságát(amennyiben az alkalmazás igényli ezt. Egy hír portálnál nincs különösebbigény az adatok biztonsága, titkossága iránt, egy online banki tranzakció-nál viszont nélkülözhetetlen.). A harmadik rétegként szerepelo HTTP (2)minden kapcsolatnál jelen van, gondoskodik a kliens a szerver valamintaz esetleges proxy szerverek közötti kommunikációról. A kommunikáció acélja a kliens által kért HTML (5), vagy XML (7) dokumentumok átvitele. AzXML réteg feladata az adatok általános leírása, az adatok megjelenítésérolnem tartalmaz információt. Különálló alkalmazások közötti adatcserére,illetve olyan esetkben szokták alkalmazni amikor a felhasználó több for-mában szeretné viszontlátni az adatokat (pl.: mobil készülék, pdf, html,. . . stb.) A HTML (5) réteg szerepe az adatok megfelelo megjelenítése. ACSS (6) nyelv segítségével megjelenítési stílusokat tudunk definiálni. Aszerver oldlal tárolhat statikus HTML fájlokat, ekkor a beérkezo kérésre a

11

Page 12: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

12

megfelelo fájl tartalmát küldi vissza. Gyakorabban találkozunk dinami-kus tartalommal, ekkor a szerver adatbázisból, vagy más forrásból a kéréshatására állítja elo a HTML oldal tartalmát. A jegyzet elso részében azátvitel részleteivel valamint az átviendo adat megjelenítésének leírásávalfoglalkozunk.

Page 13: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

2. fejezet

A HTTP protokoll

A HTTP (Hyper Text Transport Protocol) egy alkalmazás szintu protokoll azelosztott, egymással együttmuködo hypermédia rendszerek számára, melyátviteli protokollként a TCP/IP protokollt alkalmazza. (Használhat mást is,a követelmény csak az, hogy az átvitel transzparens legyen). Mint a legtöbbhálózati protokoll, a HTTP protokoll is a kliens szerver modellt használja.(AHTTP kliens küld egy kérést a HTTP szerver számára, az válaszol és vissza-küld egy válasz üzenetet, mely általában tartalmazza a kért információt.)A protokoll állapotmentes, tehát nem nyújt semmilyen információt arról,hogy az adott kliens mikor, melyik oldalt kérte le (a szerver persze nyo-mon követheti ezt, de a HTTP protokoll nem nyújt ebben segítséget). A

2.1. ábra. A Proxy szerver helyzete

felhasználók számának növekedésével arányosan no a hálózat terhelése. Aterhelés elosztásának, csökkentésének egyik módja, hogy a kívánt tartalmat

13

Page 14: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

14 FEJEZET 2. A HTTP PROTOKOLL

közel visszük a felhasználókhoz. Erre szolgál a proxy szerver, mely segít-ségével a kérések egy részét le tudjuk kezelni a helyszínen, nem terhelve anyilvános hálózatot. A helyi felhasználók webes forgalma is rajta keresztülzajlik. Ezt a forgalmat (a lekért weboldalakat) letárolja és a legközelebbikéréskor a tárolt oldalt küldi vissza a felhasználónak. A HTTP/1.1 [3]-esszabvány igen részletesen tárgyalja a proxy szerverek feladatát, muködé-sét. Igen sok beállítási lehetoséget biztosít a kliens és a szerver számáraegyaránt, hogy az útba eso proxy szerverek muködését befolyásolya. Fon-tos, például egy dinamikusan változó oldalnál, hogy a proxy folyamatosannyomon kövesse a változásokat. Egy tozsdei jelentéseket tartalmazó oldal-nál például, megengedhetetlen, hogy a kliens ne a legaktuálisabb tartalmatkapja meg, míg egy újságnál, vagy a tozsde oldal díszíto grafikai elemeinélnem fontos minden alkalommal az eredetit letölteni. Egy kapcsolat tehátigen sok kiegészíto paraméterrel jellemezheto, melyeket a felek eloször akapcsolat felépítésénél állítanak be. Ilyen paraméter például, a használtprotokoll verziószáma. Mindig a használható legmagasabb verziószámúprotokollok közül választják ki a legkisebb verziószámút. A verziószámbaaz útban lévo proxy szerverek nem szólnak bele. Ha az átviteli protokoll ver-ziószáma magasabb, mint az útba eso proxy szervereké, akkor azok átjátszóüzemmódban muködnek. Miután az üzenetcsere megtörtént a HTTP/1.1-es[3] ajánlás szerint nem bontják le a kapcsolatot. A kapcsolat fenntartásiideje implementáció függo. A HTTP szerver általában a 80-as TCP portonfogadja a kéréseket.

A kliens az igényelt tartalmat az ún. URI (Universal Resource Identifier)segítségével címezi meg, mely egy absztrakt vagy fizikai eroforrás megcí-mezésére alkalmas karatersorozat. A pontos felépítését az rfc2396-os [4]IETF[5] ajánlás írja le, melyben a következo felépítés szerepel:

<protokoll>:<protokoll specifikus rész>

Az URI leírása nem rögzíti ugyan a protokoll specifikus rész felépítését,azonban a protokollok egy részénél a következo felépítést használják:

<protokoll>://<azonosítás><elérési útvonal>?<lekérdezés>

A címben csak US-ASCII kódolású karakterek egy halmazát használhat-juk, melyben az angol abc kicsi és nagy betui szerepelnek a számokkalkiegészítve. Amennyiben olyan karaktert szeretnénk használni, ami nemszerepel az említett karakterkészletben, (és nem foglalt) a ’%’ jellel kezdodo

Page 15: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

2.1. A KÉRÉS ÜZENET 15

ASCII kódjának hexadecimális értékével helyettesíthetjük. Például a szó-köz karakter " " helyett az "%20" karaktersorozat. Foglalt karaktereket semhasználhatunk az egyes részekben.

(";","/","?",":","@","&","=","+","$",",")

A foglalt karaktereket többnyire elválasztó karakterként használjuk azegyes címrészek között. Az azonosítás részen a felhasználó login nevehelyezkedhet el egy ’@’ jellel lezárva. Egyes protokollok megengedik ajelszó átvitelét is. Itt a név után írt ’:’ karakter után írhatjuk a jelszavunkat.Például:

ftp://felhasznalo:[email protected]

A HTTP specifikus címzési sémát URL (Universal Resource Locator)-nek ne-vezzük. Felépítése a következo:

http : // host [ : ] [ port ] [ abszolút_útvonal [ ? query ]]

A szögletes zárójelben levo opcionálisak. Az abszolút útvonal leírja azelérési útvonalat a gyökér könyvtártól a keresett állományig. Relatív út-vonalnak nevezzük azt a címzési módot, amikor a kiindulási pont nem agyökér könyvtár. Például, ha szeretnénk egy fájlban definiálni az ugyana-zon a gépen lévo másik fájl elérési útvonalát.

A HTTP üzeneteknek két típusa van: kérés (request) és válasz (respnose).Mindkét üzenet a következo elemeket tartalmazza:

• kezdo sor

• fejléc sorok

• üres sor

• az üzenet tartalma

2.1. A kérés üzenet

A kapcsolat-felépítés elso lépése a kérés üzenet. A HTTP protokollt egy-szeru protokollnak tervezték ugyanis hibamentes szolgáltatásra épül. Ezértcsak 8 kérés függvénnyel rendelkezik:

Page 16: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

16 FEJEZET 2. A HTTP PROTOKOLL

2.2. ábra. Üzenetcsere

1. GET

2. OPTIONS

3. POST

4. HEAD

5. PUT

6. DELETE

7. TRACE

8. CONNECT

Íme néhány példa a leggyakrabban használt kérés függvényekre. Példáink-ban a kiválasztott Web szerver 80-as portjára lépünk be telnet segítségével.Belépés után kiadjuk a kívánt parancsokat. A kérés üzenetek:

GET – A GET függvény segítségével lehet lekérni egy URI segítségévelmegcímezett adathalmazt a szerverrol. Pl.:

GET / HTTP/1.1Host: sirius.cab.u-szeged.hu

HTTP/1.1 200 OKDate: Thu, 13 Dec 2001 16:55:37 GMTServer: Apache/1.3.20 (Unix) PHP/4.0.6Transfer-Encoding: chunkedContent-Type: text/html

8a0<HTML><HEAD><TITLE>Irinyi Kabinet</TITLE></HEAD><body bgcolor="#ffffff" text="#000000"alink="#00b000" link="#0000ff"

Page 17: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

2.1. A KÉRÉS ÜZENET 17

vlink="#0000b0" background="/icons/hatter.gif" >...</ADDRESS></BODY></HTML>

Az elso sorban lekértük a szerverrol a ’/’ jellel azonosított gyökérkönyvtárat és megadtuk az általunk használható legmagasabb verzi-ószámú protokollt (HTTP/1.1). A második sorban megadtuk a szervercímét. Ezután az enter billentyu lenyomásával átküldtünk egy sorvégkarakter párt. A szerver a fent látható választ küldte.

OPTIONS– Az OPTIONS függvény segítségével információt kérhetünk aszerver oldalon rendelkezésre álló kommunikációs paraméterekrol,melyek általában egy adott eroforrásra érvényesek. Az OPTIONSparancs után meg kell adnunk az eroforrás URI azonosítóját. Ha aszerver egésze érdekel bennünket, akkor csillagot írunk ide. Pl:

OPTIONS * HTTP/1.1Host: sirius.cab.u-szeged.hu

HTTP/1.1 200 OKDate: Mon, 17 Dec 2001 08:22:24 GMTServer: Apache/1.3.20 (Unix) PHP/4.0.6Content-Length: 0Allow: GET, HEAD, OPTIONS, TRACE

A válaszban, a fejléc sorban megkaptuk azoknak a függvényekneka listáját, melyeket a gyökér oldalon használhatunk. Lássunk egypéldát egy dinamikus oldal paramétereinek. lekérdezésére.

OPTIONS /cgi-bin/szotarE HTTP/1.1Host: sirius.cab.u-szeged.hu

HTTP/1.1 200 OKDate: Mon, 17 Dec 2001 10:05:54 GMTServer: Apache/1.3.20 (Unix) PHP/4.0.6Content-Length: 0Allow: GET, HEAD, POST, OPTIONS, TRACE

Megfigyelhetjük, hogy az adott oldal támogatja a POST függvényt is.

HEAD– A HEAD függvény segítségével a válaszban csak a header résztkérjük a szervertol. Ez akkor érdekes, ha kíváncsiak vagyunk arra,hogy változott-e az oldal az utolsó letöltés óta.

HEAD /teszt/ HTTP/1.1Host: wilma.cab.u-szeged.hu

HTTP/1.1 200 OKServer: Microsoft-IIS/5.0Cache-Control: max-age=86400Expires: Tue, 18 Dec 2001 14:47:33 GMT

Page 18: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

18 FEJEZET 2. A HTTP PROTOKOLL

Content-Location: http://wilma.cab.u-szeged.hu/teszt/index.htmlDate: Mon, 17 Dec 2001 14:47:33 GMTContent-Type: text/htmlAccept-Ranges: bytesLast-Modified: Mon, 17 Dec 2001 14:03:32 GMTETag: "fc50cd9c387c11:88e"Content-Length: 83

POST – Mint az URI leírásában láthattuk, a GET üzenet segítségével istudunk a szerver oldal számára paramétereket átadni a ’?’-jel utánirészen. A POST üzenet segítségével azonban úgy küldhetünk ada-tokat a szerver számára, hogy nem az URI-t használjuk az átviendoadat számára, hanem a fejléc sorok után megadjuk az adat nevét éstartalmát. Pl.:.

POST /teszt/ HTTP/1.1Host: wiliam.u-szeged.huadat: research

PUT – A PUT üzenet segítségével a kérésben szereplo adathalmazt tudjukaz URI által megadott címre feltölteni. Amennyiben nincs még ilyennevu eroforrás (fájl), a szerver létrehoz egyet és errol értesíti is aklienst.

DELETE – A DELETE üzenet segítségével a kérésben szereplo eroforrásttöröljük szerverrol.

TRACE – A szerver a TRACE üzenet keretében kapott tartalmat vissza-küldi, így egy alkalmazásrétegbeli visszacsatolást hozhatunk létre.Pl.:

TRACE / HTTP/1.1Host: wiliam.u-szeged.huAdat: research

HTTP/1.1 200 OKServer: Netscape-Enterprise/6.0Date: Sun, 23 Dec 2001 12:49:45 GMTContent-type: message/httpContent-length: 62

TRACE / HTTP/1.1Host: wiliam.u-szeged.huAdat: research

CONNECT – A HTTP/1.1-es szabvány lefoglalja a CONNECT függvény-nevet az olyan proxy-kal történo kapcsolatfelvétel számára melyek al-kalmasak a tunel (HTTP csomagba ágyazott csomagok) funkció meg-valósítására.

Page 19: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

2.2. A VÁLASZ ÜZENET 19

A fejléc sorban küldhet a kliens további információkat a szerver számára.Ilyen információ például a fent látható Host mezo is. A mezok teljes listájaés funkcióiknak részletes leírása megtalálható a HTTP/1.1 [3] ajánlásban. Ittcsak néhány példát említenénk:

Host: A HTTP/1.1 ajánlás szerint minden kérés üzenetnek tartalmazniakell ezt a mezot, mely a szervert azonosítja.

If-Modified-Since: A válasz üzenet csak akkor tartalmazza a kívánt tartal-mat, ha az módosítva volt a kérés üzenetben elküldött idopont óta.

User-Agent: Ezzel a fejléccel tudja magát azonosítani a kliens.

Az üzenet tartalma általában üres. POST üzenetek esetén azonban itt he-lyezkedik el a szerver számára küldött adat neve és tartalma. Ha a tartalomnincs kódolva, akkor nem különbözik a fejléctol. Ilyen tartalmat (Adat:research) láthattunk az utolsó példában.

2.2. A válasz üzenet

A válasz üzenet, a kérés üzenethez hasonlóan igen egyszeru felépítésu. Avezérlo információkon kívül, szerencsés esetben, tartalmazza a kért erofor-rást is. Ez egy weboldal esetén az oldal HTML kódja. A válasz üzenet akövetkezoket tartalmazhatja:

• Állapot mezo

• Válasz fejléc mezok

• Eroforrás:

– eroforrás fejléc

– eroforrás tartalom

A fo mezoket CRLF karakterek választják el egymástól. Az állapot mezo-ben a szerver azonosítja az általa használt HTTP protokoll verziót. A kérésfeldolgozásának eredményére utaló állapot kódot a gépi értékelés számára,valamint az állapot okának rövid szöveges felhasználó által könnyen ért-heto leírását. A háromjegyu decimális számok segítségével ábrázolt állapotkódokat 5 csoportba sorolhatjuk, melyek a kód elso elemével azonosíthatók:

• 1xx Információs - A kérés megérkezett, az eljárás folyamatban.

• 2xx Siker - A kérés megérkezett sikerült megérteni és elfogadni.

• 3xx Átirányítás -További beavatkozásra lesz szükség a kérés telje-sítéséhez.

Page 20: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

20 FEJEZET 2. A HTTP PROTOKOLL

• 4xx Kliens oldali hiba - A kérés hibát tartalmaz vagy nem teljesítheto.

• 5xx Szerver oldali hiba - A szervernek nem sikerült kiszolgálnia ajónak tuno kérést.

A válaszban a csoporton belüli második, harmadik karakterrel azonosíthatóállapot kódot találhatunk. Ezeknek az állapotkódoknak a pontos leírásafelleheto a HTTP/1.1[3] ajánlásban. A válasz fejléc mezokben az állapotkód-ban nem kódolható válaszra vonatkozó információkat adhatjuk meg. Ilyenpéldául az azonosítás kérése (WWW-Authenticate)vagy a válasz üzenet élet-kora másodpercekben (Age). Az eroforrás fejléc további információkat tar-talmazhat a válasz üzeneteben elküldött tartalomról. Egyik legfontosabbinformáció a tartalom típusa (Content-Type), mely meghatározza a tartalomkódolását. A tartalom típusát az alábbi módon ábrázoljuk:

típus/altípus;paraméter

A kódolási, média típusok a MIME (Multipurpose Internet Mail Extensions)[6] ajánlásban vannak megadva. A tartalom típusoknak két fo csoportjátkülönböztetjük meg: egy- és többrészbol álló csoportok Az egy részbol állócsoport a következo média típusokat tartalmazza:

• text(szöveg) – szöveges információ. Egyszeru szöveges információazonosítására használjuk. Sorvég karakterként használhatjuk a CRLFkarakterpárt vagy közülük bármelyiket. A plain altípus esetén a szö-veg nem tartalmaz formázási, rendezési információkat, úgy kell meg-jeleníteni, ahogy van. Az egyik leggyakrabban használt altípus ahtml, itt HTML nyelvu szövegként értelmezendo. Ha a charset para-méter nincs megadva, akkor us-ascii típusként értelmezzük. Magyarszövegnél az ISO-8859-2-es karakterkészletet kell alkalmazni.

• image(kép) – kép. A kapott tartalom képként értelmezheto, jeleníthetomeg. Altípusként a jpeg kódolás használatos.

• audio(hang) – A kapott tartalom hangként értelmezheto, játszható le.

• video(video) – A kapott tartalom videóként értelmezheto, játszható le.

• application(alkalmazás) – Ide tartoznak azok az adatok, melyeket meg-jelenítés elott a hozzá tartozó programnak még fel kell dolgoznia.Altípusként gyakran használják a octet-stream és PostScript típusokat,melyek esetében a tartalom bináris formátumú. Gyakran használjákaz octet-stream típust hang és videóanyag kódolására.

A másik csoportba tartoznak a ún. többrészu Multipart típusok. Itt a tarta-lom több egyforma vagy különbözo típusú részbol áll, melyeket boundaryparaméterrel megadható karaktersorozatok választják el egymástól. Min-den egyes rész rendelkezik egy fejléccel melyben, azonosítja az adott részkódolását.

Page 21: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

2.3. BIZTONSÁG 21

2.3. Biztonság

A HTTP protokoll tervezésénél elsorendu szempont volt a magas megbízha-tóság és az egyszeruség. Az Internet elterjedésével egyre több új alkalmazásjelent, meg melyek új igényeket támasztottak a biztonság területén. Amikora biztonságról beszélünk, a következo szempontok merülhetnek fel:

• az adatok titkossága

• az adatok megbízhatósága

• egyének azonosítása

A HTTP-es ajánlás két igen egyszeru challenge-response(felszólítás-válasz)azonosítási eljárást definiál. Pontos leírásuk megtalálható az rfc2617-es[7]ajánlásban. A következokben ezt a két azonosítási eljárást fogjuk részleteseb-ben megismerni.

2.3.1. Basic Authentication

Az azonosítási eljárás azon alapul, hogy a kliensnek azonosítania kell ma-gát a szerver számára egy azonosítóval(UID) és egy jelszóval (password). Ezaz azonosítás a szerver minden egyes tartományára (realm) kiterjedhet, dea szerver ezeket a tartományokat külön is kezelheti. A szerver csak abbanaz esetben szolgálja ki a klienst, ha a kliens által megadott jelszó és azono-sító megfelelo az URI által megadott védelmi környezetben. A szerver egyHTTP/1.1 401 Authorization Required hibaüzenet keretében elküldi a kliens-nek az engedélyezett azonítási eljárásokat és az adott védelmi tartománynevét.

HTTP/1.1 401 Authorization RequiredDate: Fri, 28 Dec 2001 08:24:32 GMTServer: Apache/1.3.20 (Unix) PHP/4.0.6X-Powered-By: PHP/4.0.6WWW-Authenticate: Basic realm="My Realm"Transfer-Encoding: chunkedContent-Type: text/html

A WWW-Authenticate fejlécben definiálta az azonosítási eljárást (Basic) és atartományt (realm = "My Realm") A kliens válaszában szerepelnie kell azAuthorization fejlécnek a következo módon:

Authorization: Basic base64(user:pass)

A base64() a felhasználói azonosító és a jelszó base64-es kódolását jelenti.A kódolás lényege, hogy a karakterláncunkat az ASCII kódokkal binárisanábrázolva felbontjuk 6 bites részekre, melyeket a hozzárendelt karakterek-kel ábrázolunk. Tehát 3 8 bites karaktert 4 6 bites karakteren ábrázolunk.

Page 22: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

22 FEJEZET 2. A HTTP PROTOKOLL

A pontos hozzárendelés megtalálható a rfc2045-ös [8] ajánlásban. Megfi-gyelhetjük, hogy a felhasználó a jelszavát ún. cleartext-ként küldi el, ígyteljesen védtelen a lehallgatások ellen. Ezért ez az azonítási mód csak na-gyon korlátozottan, olyan helyeken javasolt, ahol nincs értékes információés a szerver generálja a felhasználó jelszavát. Ez azért fontos, mert a fel-használók kényelmesek és hajlamosak egy jelszót több helyen is használni,így a lehallgatott jelszóval más, esetleg lényegesen fontosabb helyekre isbe tud hatolni az lehallgató. A jelszó átvitelének problémáját oldja meg aDigest Access Authentication

2.3.2. Digest Access Authentication

A Basic Authentication-hoz hasonlóan a Digest azonosítási protokoll is azún. chalenge-response paradigmát használja. A Digest protokoll egy alkalmi(nonce) paramétert átküldve szólítja fel a klienst az azonosításra. A kliensa válaszban egy ellenorzo összeget küld, melynek kiszámításánál figye-lembe veszi az alkalmi paramétert, a felhasználó nevet, a jelszavát, a HTTPfüggvényt, és a kért URI-t. Az ellenorzo összeg kiszámítására ún. hashalgoritmusokat használnak, melyek egy tetszoleges hosszúságú bemenokarakterláncból adott hosszúságú karakterláncot képeznek. A leképezésegyértelmu, tehát egy adott bemenetbol csak egy adott kimenet nyerheto.A bemeno karakterláncon történt módosítás megvátoztatja a kimenetet. Akimenetbol nem lehet kiszámítani a bemenetet. A kimenetet ’message di-gest’-nek (üzenet kivonatnak), ’fingerprint’-nek (ujjlenyomatnak) nevezik.Általában az MD5-ös [9] algoritmust használják, mely tetszoleges hosszú-ságú karakterláncból 128 bites kivonatot generál. Jelenlegi álláspont szerint,lehetetlen két különbözo bementbol egyazon kimenetet, illetve egy beme-netbol tetszoleges kimenetet nyerni. A fenti módon kezelt jelszó nem kerülki visszafejtheto formában. A jelszavakat nem szükséges titkosítatlan for-mában tárolni a szerveren, elegendo a belolük képezheto kivonatot tárolni(ez esetben a másik oldalon a kivonatot kell kódolni). A WWW-Authenticateüzenet a következo paraméterekkel rendelkezik:

• challenge– Itt lehet felsorolni a választható azonosítási protokollokat(Basic,Digest Access Authentication) ill. az utána igényelt paramétere-ket.

• domain – Idézojelekkel bezárt szóközökkel elválasztott URI lista. Azazonosítás hatókörét adja meg.

• nonce – A szerver által definiált karakterlánc. Nagyon fontos a he-lyes összeállítása, mivel ezzel a lehallgatott kivonatolt jelszavak újra-felhasználása igen jól korlátozható. Tegyük fel, hogy az üzenet váltásfolyamán csak a jelszavunk kivonatát küldjük át. Ez esetben a lehall-gató egyén a kivonatolt jelszavunkkal ugyanúgy be tud jelentkezni

Page 23: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

2.3. BIZTONSÁG 23

a szerverre, mint mi. Jóval nehezebb a dolga abban az esetben, hanem csak jelszavunkat kivonatoljuk, hanem elobb hozzáadunk egyolyan kivonatolt alkalmi karakterláncot (nonce), mely például az ak-tuális idopont mellett tartalmazza a kért tartalom URI-t illetve egy,csak a szerver által ismert kulcsot is. Ez esetben a lehallgató csak azelévülési ideig és csak az adott eroforráshoz férhet hozzá. Az alkalmikarakterláncot a szerveren kívül nem tudja más reprodukálni (mivelez is kivonatolt és csak a szerver ismeri a benne szereplo kulcsot). Afenti példa:

nonce = H(idopont:URI:magán-kulcs)

Itt a H() függvéy a kivonatoló függvény.

• opaque – A szerver által küldött karakterlánc, melyet a kliensnekváltoztatás nélkül vissza kell küldenie.

• stale – Értéke igaz, ha a szerver által kapott válasz kivonat azért nemfogadható el, mert elévült. Ez esetben a kliensnek az új nonce értékkelújra kell küldenie az adatokat, a felhasználótól azonban nem kell újrabekérnie a felhasználó nevet és a jelszót.

• algorithm – A használt ellenorzo összeg(checksum) és kivonat(digest)algoritmusokat adhatjuk meg. MD5 az alapértelmezett mindkettore.

• qop-options – Opcionális, értéke auth, auth-int lehet, a válasz fejlécbenrészletesebben bemutatjuk.

Az Authorization válasz paraméterei:

• credentials – Itt választunk azonosítási protokollt, ill. megadjuk akérésben felsorolt paraméterek értékét.

• username – Felhasználónév.

• digest-uri – A kérés URI.

• message-qop – Opcionális. Itt választhatjuk ki, a védelem minoségét(Quality of Protection). Ha auth-int az értéke, akkor a válasz karakter-lánchoz kivonatolás elott többek közt hozzá kell adni a válasz tartal-mának kivonatát. Ezáltal a válasz üzenet lehallgatója csak az adottutasítást tudja újra végrehajtani, amíg a nonce el nem évül.

• cnonce - Opcionális, de ha az elozo paraméternek értéket adunk, ak-kor kötelezo. A kliens által szabadon választott érték. Segítségé-vel megakadályozhatjuk a szerver oldali támadások egy részét. Te-gyük fel, hogy egy kliensünket eltérítik az eredeti szervertol és egyrossz szándékú szerverrel építi fel a kapcsolatot. Ebben az esetben

Page 24: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

24 FEJEZET 2. A HTTP PROTOKOLL

(amennyiben kliensünk nem hajlandó Basic azonosításra) a szerveregyszeru nonce értéket küldhet amire már esetleg egy szótár segítsé-gével igen sok lehetséges jelszó értéket végigvizsgált. Így egyszerujelszó esetén könnyebben megfejtheti jelszavunkat. Ha azonban sajátcnonce értékünket is hozzáadjuk a kivonatolás elott akkor újra kellkezdenie a jelszó keresését.

• nonce-count – Opcionális, de kötelezo megadni, ha a message-qopparamétert megadtuk. Értéke az elküldött kérések száma az ebbena kérésben foglalt nonce értékkel. Ha két üzenetben ugyanaz a számszerepel, akkor az ismétlés.

• response – A kivonatolt válasz. Kiszámításának módja a fentiekfüggvénye:

– ha a message-qop paramétert nem adtuk meg:

A1 = username-value:realm-value:passwdA2 = Method:digest-uri-valueresponse = "KD(H(A1),nonce:H(A2))"

KD() – kivonatoló(digest) algoritmus (MD5),H() – ellenorzo összeg (checksum) algoritmus (MD5)

– ha a message-qop paraméter auth:

A1 = username-value:realm-value:passwdA2 = Method:digest-uri-valueresponse = "KD(H(A1),nonce:nonce-count:cnonce:qop:H(A2))"

– ha a message-qop paraméter auth-int:

A1 = username-value:realm-value:passwdA2 = Method:digest-uri-value:H(entity-body)response = "KD(H(A1),nonce:nonce-count:cnonce:qop:H(A2))"

Egy példa üzenetváltás:

Kérés:HTTP/1.1 401 Unauthorized

WWW-Authenticate: Digestrealm="[email protected]",qop="auth,auth-int",nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",opaque="5ccc069c403ebaf9f0171e9517f40e41"

Válasz:Authorization: Digest username="Mufasa",

realm="[email protected]",nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",uri="/dir/index.html",qop=auth,nc=00000001,cnonce="0a4f113b",response="6629fae49393a05397450978507c4ef1",

Page 25: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

2.3. BIZTONSÁG 25

opaque="5ccc069c403ebaf9f0171e9517f40e41"

Mint láthattuk, a Digest Access Authentication protokoll a jelszó átvite-lénél fellépo biztonsági kockázatot kiküszöböli, ill. megvéd az ún. replay,ismétlo támadásoktól. Az átvitt adatokat azonban nem titkosítja. Két töké-letesebb megoldás született: az egyik a TLS protokoll, mely egy új rétegetvezetett be a szállító és az alkalmazás rétegek közé. A másik megközelítés aSHTTP protokoll, mely HTTP protokoll kibovítése adatvédelmi elemekkel.Mindkét megoldás biztosítja a következoket:

• A kapcsolattartó felek biztonságos azonosítása aszimmetrikus, vagynyilvános kulcsú titkosítás segítségével.

• Az adatátvitel titkosított. Külso személyek számára gyakorlatilagviszszafejthetetlen.

• Az adatátvitel megbízható. Külso személyek nem tudnak észrevétle-nül hamis adatot beleilleszteni a titkosított adatfolyamba (MAC).

Page 26: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

26 FEJEZET 2. A HTTP PROTOKOLL

Page 27: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

3. fejezet

Az SHTTP protokoll

Az SHTTP [10] protokoll elso változatát E. Rescorla és A. Schiffman ter-vezte az Enterprise Integration Technologies cég számára. Céljuk egyolyan biztonságos üzenetorientált kommunikációs protokoll megvalósításavolt, mely felülrol kompatibilis a HTTP protokollal. Azonos képességek-kel ruházza fel mindkét oldalt, miközben megtartja a HTTP tranzakciósmodelljét. A HTTP üzenetek átvitelét becsomagolással valósítja meg. Azüzenetek becsomagolásának két ajánlásban rögzített módját használja (CMS[11],MOSS [12]). Mindkét ajánlás támogatja az üzenetek azonosítását, aláí-rását, titkosítását. Az üzenetek becsomagolása többszintu is lehet. Az ada-tok titkosítására használhatjuk a szimmetrikus és aszimmetrikus titkosítástis. A szimmetrikus titkosításhoz szükséges kulcs átadására a következomódszereket biztosítja:

• DH – Diffie-Hellman kulccsere algoritmus [13]

• RSA

• Inband – Egy s-http fejléc (Key-Assign) tartalmazza a kulcsot, termé-szetesen a fejléc titkosítva van a fogadó nyilvános kulcsával

• Outband – A kulcs egyéb forrásból származik, pl.: begépelikAz üzenetek felépítése hasonló, mint a HTTP protokollnál. Rendelkeznekegy parancs/állapot sorral és a megfelelo fejlécekkel. A hagyományos HTTPfejlécek közül csak a HOST és a CONNECTION használható az S-HTTPüzenet fejlécei között. A kérés üzenetek az alábbi sorral kezdodnek:Secure * Secure-HTTP/1.4

A válasz üzenetek:Secure-HTTP/1.4 200 OK

A fejlécekben lévo paraméterek segítségével egyeztetnek a kapcsolatbanrésztvevok. Eldönthetik azt is, hogy használják-e a különbözo biztonságifunkciókat (digitális aláírás, titkosítás, azonosítás). Egy fejléc sor az alábbirészeket tartalmazhatja:

27

Page 28: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

28 FEJEZET 3. AZ SHTTP PROTOKOLL

• Property – a paraméter, amit egyeztetnek, pl.: a titkosító algoritmus

• Value – az értéke, pl.: DES-CBC

• Direction – az irány, amire érvényes (a forrás szemszögébol)

• Strength – (szükséges, opcionális, elutasítva)

Egy példa a fejlécre:

SHTTP-Key-Exchange-Algorithms: orig-optional=Inband, DH;recv-required=DH

A fejlécek után következik a tartalom, mely általában a HTTP kéréstilletve választ tartalmazza titkosított formában. A tartalom titkosítására akövetkezo algoritmusokat használhatjuk: DES-ECB, DES-EDE-ECB, DES-EDE3-ECB, DESX-ECB, IDEA-ECB, RC2-ECB,CDMF-ECB. A küldo azono-sítására és az üzenet integritásának védelmére a MAC (Message Authen-tication Code) kódot használja, mely az üzenet tartalmának és egy közöstitok kivonatából(hash) áll. Az üzenet aktualitásának ellenorzéséhez itt isalkalmazzák a HTTP-nél használt nonce változót.

Page 29: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

4. fejezet

A TLS protokoll

A HTTP protokoll biztonsági hiányosságainak kijavítására egy másik meg-oldást is kidolgoztak. Itt nem nyúltak a HTTP protokollhoz, hanem egy újréteget helyeztek alá ( biztonsági (security) réteget). Két eljárás született, azegyik a Netscape által kifejlesztett SSL (Secure socket Layer) [14], a másik aMicrosoft által kifejlesztett PCT (Private Communication Transport) [15]. AzSSL népszerubb volt, így a webes tranzakciók szabványává vált. A szé-les körben elterjedt SSL szabványosítása érdekében az IETF létrehozta aTLS [16] szabványt. A TLS (Transport Layer Security) protokoll feladata azadat védelmének és integritásának biztosítása két alkalmazás között. Kétrétegbol áll: az alsó réteg a TLS Record Protocol, mely a TCP/IP vagy másmegbízható átvitelt biztosító protokollra épül, feladata a kapcsolat bizto-sítása. Ez egyrészt azt jelenti, hogy a kapcsolat szimmetrikus titkosítással(DES,RC4, ...) rejtjelezett. A kulcsok a szimmetrikus titkosításhoz kap-csolatonként generálódnak. Másrészt a kapcsolat megbízható, mivel azüzenet átvitel magába foglalja az integritás vizsgálatot is mindkét oldaliMAC segítségével. A következo muveleteket végzi el az adatokon:

1. fragmentálás – a felso rétegbol érkezo adatfolyamot 214 bájtnál kisebbblokkokra tördeli

2. tömörítés - opcionális. Ha a felek megegyeztek, akkor egy veszteség-mentes tömöríto algoritmussal tömörítik az egyes blokkokat. (Ezzelnem csak sávszelességet takarítunk meg, hanem az adat jellegét ismegváltoztatjuk, így még nehezebb visszafejteni.)

3. tartalom védelem – legenerálják az adott blokkra jellemzo MAC kódot,amely magában foglalja többek között a blokk sorszámát, a kivonatolóalgoritmus típusát, a blokk tartalmát, titkos kulcsot.

4. titkosítás – adatfolyam vagy blokk-titkosító algoritmussal titkosítjáka blokkokat és a hozzájuk tartozó MAC kódokat.

29

Page 30: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

30 FEJEZET 4. A TLS PROTOKOLL

Titkosított adatok kerülnek átvitelre, majd a másik oldalon feldolgozásra.Ahhoz azonban, hogy ez a folyamat bekövetkezzen, a feleknek kapcsolatotkell teremteniük egymással, azonosítaniuk kell egymást, a megfelelo para-métereket egyeztetniük kell. Erre szolgál a TLS Handshake Protocol, mely aTLS Record Protocol fölött helyezkedik el. Minden kapcsolat rendelkezik azalábbi paraméterekkel:

• session identifier – egy változó bájt sorozat, melyet a szerver generála kliens azonosítására

• peer certificate – a társ X509v3-as bizonyítványa (nem kötelezo)

• compression method – a tömöríto algoritmus

• cipher spec – a titkosító, illetve a MAC kiszámítására szolgáló algorit-mus

• master secret – 48 bites titkos kulcs, melyet csak a kliens és a szerverismer

• is resumable – engedélyezett-e a kapcsolat alapján új kapcsolatot létre-hozni (ekkor nincs szükség külön egyeztetésre, hanem ezeket a para-métereket használhatják a felek a session identifier kivételével)

A fenti paraméterek egyeztetését szolgáltatja a TLS Handshake Protocol a TLSRecord Protocol számára. A kapcsolat-felépítés az alábbi lépésekbol áll:

1. Hello üzenetcsere, mellyel a felek kicserélik a véletlen számokat, mege-gyeznek a titkosító algoritmusokban és a kapcsolat másolhatóságában(is resumable)

2. kicserélik a megfelelo rejtjelezési paramétereket annak érdekében,hogy létre tudják hozni az ún. fokulcs elotti kulcsot (premaster sec-ret)

3. elküldik egymásnak a bizonyítványokat (certificates) és a különbözotitkosítási információkat, melyek a kölcsönös azonosításhoz szüksé-gesek

4. legenerálják a fo kulcsot (Master Secret) az elozo kulcsból (premastersecret) és a kicserélt véletlen számokból

5. a titkosítási paramétereket átadja a TLS Record Protocol számára

Page 31: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

5. fejezet

A HTML nyelv

A HTML dokumentum a hasznos tartalom és a különbözo funkciókat meg-valósító elemek egyvelege. Az elemek, melyeket az SGML-tol átvett jelölés-móddal ’< elem >’ jelölünk, alkalmasak a dokumentum megjelenítésénekdefiniálására, hiperhivatkozások kezelésére, valamint a felhasználói inter-aktivitás biztosítására. A böngészo elrejti elolünk a HTML elemeket éscsak a formázott tartalmat jeleníti meg számunkra. A következokben meg-ismerkedünk a HTML nyelv néhány fontosabb szabályával, elemével. AHTML nyelv részletes leírása megtalálható a W3C szervezet honlapján [17].HTML fájlok létrehozására tapasztalataim szerint egy igen jól használhatóingyenes eszköz a HTML-kit 1.

5.1. A html dokumentum általános felépítése

Egy HTML dokumentum 3 fo részbol áll:

1. információ a HTML verziójáról

2. fejrész (header)

3. törzs (body)

Egy egyszeru HTML dokumentum forrása:

1http://www.chami.com/html-kit/

31

Page 32: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

32 FEJEZET 5. A HTML NYELV

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//HU""http://www.w3.org/TR/html4/strict.dtd"><HTML><head><TITLE>Ez a fejléc</TITLE></HEAD><BODY><P>Hello világ!</BODY></HTML>

Böngészoben megjelenítve:

5.1. ábra. Egy egyszeru HTML oldal

A dokumentumban használt HTML nyelv verzióját, az utasítások típu-sát a W3C által megadott DTD (document type declaration) elem segítségéveladhatjuk meg. A HTML 4.01-es ajánlás 3 elemet biztosít:

• HTML 4.01 Strict DTD – Az elavultak kivételével minden elemet tar-talmazhat a HTML dokumentum. A beillesztendo sor:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">

• HTML 4.01 Transitional DTD – Minden használható. A beillesztendosor:

Page 33: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

5.1. A HTML DOKUMENTUM ÁLTALÁNOS FELÉPÍTÉSE 33

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

• HTML 4.01 Frameset DTD – Akkor használhatjuk, ha dokumentu-munkban kereteket (frame) definiálunk.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN""http://www.w3.org/TR/html4/frameset.dtd">

A dokumentum következo részét a fejléc foglalja el, melynek kezdetét a<HEAD> , végét a </HEAD>utasítás jelzi. A fejléc elemei között legfontosabb, egy-ben kötelezo a dokumentumcím, mely címet a <TITLE>és a </TITLE>utasításokközé kell zárni. A dokumentum ezen része az ablak címsorában jelenikmeg. A <BASE HREF="protokoll://gépnév/elérési_út">utasításban szereplo URIhatározza meg a báziscímet, melybol a relatív címeket értelmezni kell. Hanincs megadva, akkor az adott dokumentumhoz viszonyítva értendo a rela-tív cím. A <BASEFONT SIZE="szám">utasítással jelölheto ki a dokumentumbanaz alapértelmezett betuméret. Az <ISINDEX>utasítás jelzi a keresorendsze-rek számára, hogy index-dokumentumról van-e szó. A <LINK>utasításbanszereplo opciók jelzik dokumentum kapcsolatait más dokumentumokkal,stíluslappal, címszalaggal, stb. Az <META>elem jelezheti a name, contenttulajdonságok segítségével a keresorendszerek számára a dokumentum-adatbázisba kerülo adatokat , pl. a dokumentum alkotóját, a létrehozóprogramot, rövid tartalmat, stb. Ezen elem http-equiv, content tulajdonságaisegítségével befolyásolhatjuk a 19. oldalon megemlített HTTP fejléceket. Ittadhatjuk meg például azt is, hogy az oldal nem tárolható proxy szervereken.Érdemes megadni a dokumentumban használt karakterkészletet is, mert akülönbözo böngészok nem biztos, hogy a legmegfelelobb karakterkészletethasználják.. Proxy vezérlés, karakterkészlet, szerzo, információ a keresoszerverek számára:

<META http-equiv="Cache-Control" content="no-cache"><META http-equiv="Content-Type" content="text/html;charset=ISO-8859-2"><META name="Author" content="Bilicki Vilmos"><META name="keywords" lang="hu" content="html, css,jegyzet">

A felhasználó számára a <BODY>, </BODY>elemek közötti rész hordozza a leg-több hasznos információt. A <BODY>elem fontosabb tulajdonságai:

Page 34: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

34 FEJEZET 5. A HTML NYELV

• background – A háttérkép elérési útját adhatjuk meg.

• text – A szöveg színét definiálhatjuk.

• link – Az oldalon szereplo hivatkozások színét adhatjuk meg.

• vlink – A felhasználó által látogatott hivatkozások színe.

• alink – A felhasználó által kijelölt hivatkozások színe.

A fenti tulajdonságokat megadhatjuk a 6 fejezetben bemutatott CSS segít-ségével is, az ajánlás ezt javasolja. A dokumentum törzsében lévo szövegformázására a szövegformázó utasítások, a szöveg logikai felépítését a cso-portosító, címszint elemek, míg a törzsben lévo objektumok, szövegrészekelhelyezkedésének definiálására a táblázatok szolgálnak. A következo 5.2,5.3, 5.4 fejezetekben ezeket mutatjuk be.

5.2. Logikai felépítést definiáló elemek

A dokumentum megjelenítésén kívül nagyon fontos az egyes részek azo-nosítása. Ezeket az információkat ugyan a felhasználó nem feltétlenül látja,azonban a dokumentum számítógépes feldolgozása esetén igen hasznosszolgálatot tehetnek. Segítségükkel egy általános struktúrát adhatunk do-kumentumunknak, logikai részekre oszthatjuk. A címsor elemeknek se-gítségével az egyes logikai részek rövid címeit adhatjuk meg. Jelölése:<H1>Cím</H1>. Fontosságuk, méretük a szint növekedésével csökken. Mint aHTML minden eleme, rendelkezhet <H1 id="id1">Cím</H1>azonosítóval. Azazonosítóknak egyedieknek kell lenniük az egész dokumentumban. Ren-delkezhetnek a megjelenítést megadó class tulajdonsággal is, mely a CSS-ben megadott megjelenítési módok közül választja ki a megfelelot. Aszövegrészek csoportosítására szolgáló elemek a <DIV>és a <SPAN>. Mindkételem rendelkezik a címsorok tulajdonságaival. A <DIV>elemet a nagyobb ré-szek jelölésére (block element), míg a <SPAN>elemet a szövegen belüli logikairészek jelölésére használhatjuk (inline element). Íme egy példa HTML kódrészlet a fentiek bemutatására:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//HU""http://www.w3.org/TR/html4/strict.dtd"><HTML><HEAD><TITLE>Bemutatkozás</TITLE></HEAD><BODY><H1 id="munkatársak">Munkatársak</H1><DIV id="beosztottak">

Page 35: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

5.3. SZÖVEG FORMÁZÁSA 35

Cégünk munkatársai közé tartozik <SPAN id="portás">KovácsLajos</SPAN>és <SPAN class="titkár">Nagy Péter</SPAN>.</DIV><DIV id="kutatók">A kutató osztály munkatársai <SPAN id="vegyészet">KovácsJános</SPAN>, és<SPAN id="számítástechnika">Nagy Szabolcs</SPAN>.</DIV></BODY></HTML>

A böngészoben a 5.2 ábrán látható módon nem látszik a felosztás, ám egyprogram számára feldolgozható módon rögzítettük a fontos információkat.Mint látjuk, a HTML nyelv ilyen irányú képességei igen korlátozottak. Ezvolt az egyik oka a 7. fejezetben bemutatott XML nyelv kifejlesztésének.

5.2. ábra. Cég bemutató

5.3. Szöveg formázása

A HTML dokumentum megjelenítése független a szövegfájl formázásától,csak az ajánlásban megadott formázó utasítások hatása érvényesül. A bön-gészo lecseréli a dokumentumban lévo CR, LF karakter-párokat szóközökre, ill. az egymás mellett lévo szóközöket, tabulátorokat egy szóközre. A

Page 36: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

36 FEJEZET 5. A HTML NYELV

dokumentumot bekezdésekre oszthatjuk (<p></p>). Egy-egy bekezdésre jel-lemzo a stílusa (karakterek formátuma, színe . . . ), a sorok rendezési iránya,a rá jellemzo nyelv, valamint, hogy ellátható id-vel. Az új bekezdés mindigúj sorban kezdodik. Sortörést a <br>elem segítségével illeszthetünk a szö-vegbe. Ha azt szeretnénk elkerülni, hogy a böngészo két egymás mellettálló szó között ne használjon sortörést akkor közéjük az ún. nonbreakablespace (&nbsp;) elemet kell illesztenünk. Ha egy szöveget úgy szeretnénkviszont látni, ahogyan megformáztuk (szóközökkel, tabulátorokkal, sortö-résekkel), akkor azt a <pre></pre>elemek közé zárva kell beillesztenünk a HTML dokumentumba. Az alábbielemeket is használhatjuk a szövegrészek megjelenítésének formázására:

• <em></em>– kiemelés

• <strong></strong>– vastag betu

• <cite></cite>– idézet (vékony, dolt betuk)

• <abbr></abbr>– rövidítés

• <sub></sub>– alsó index

• <sup></sup>– felso index

A HTML dokumentumban listákat is használhatunk. Megkülönböztetünkszámozatlan, számozott, valamint definíció listákat.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//HU""http://www.w3.org/TR/html4/strict.dtd">

<HTML><head>

<title>Listák</title></HEAD><body><ul><li>alma<li>körte

<li>dió</ul><ol><li>alma<li>körte<li>dió

</ul><dl><dt>alma<dd>Az alma egyik legfotosabb vitaminforrásunk.<dt>dió<dd>A dió kemény gyümölcs

</dl></body></html>

Page 37: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

5.4. TÁBLÁZATOK 37

A 5.3. ábrán láthatjuk a fenti kódot böngészoben megjelenítve. Az eddi-giekben az egyes szövegrészek formázását láthattuk, azonban nem derültki például az, hogyan tudunk két vagy több hasábos szöveget eloállítani,illetve szövegeinket a dokumentumban megfeleloen pozícionálni. A HTMLdokumentumban az egyes objektumok helyzetének megadására táblázatokszolgálnak A következo fejezetben errol lesz szó.

5.3. ábra. Listák

5.4. Táblázatok

Táblázatok segítségével a dokumentum objektumait sorokba és oszlopokbarendezhetjük. A táblázatokat a <table></table>elemekkel határoljuk. Atáblázatok sorait a <tr></tr> elemekkel, míg az oszlopait <td></td> , vagy<th></th> elemekkel definiálhatjuk. Minden táblázatnak lehet címe <caption></caption>, fejléce <thead></thead> , törzse <tbody></tbody> , és lábléce <tfoot></tfoot>.Egy egyszeru táblázat:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//HU""http://www.w3.org/TR/html4/strict.dtd">

<html><head><title>Táblázatok</title>

Page 38: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

38 FEJEZET 5. A HTML NYELV

</head><body><table border="1"><caption>Minta táblázat</caption><tr><th>1. oszlop</th><th>2. oszlop</th><th>3. oszlop</th></tr><tr><td>1. sor, 1. cella</td><td>1. sor, 2. cella</td><td>1. sor, 3. cella</td></tr><tr><td>2. sor, 1. cella</td><td>2. sor, 2. cella</td><td>2. sor, 3. cella</td></tr></table></body></html>

5.4. ábra. Egyszeru táblázat

Page 39: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

5.4. TÁBLÁZATOK 39

A 5.4. ábrán látható módon jelenik meg egy böngészoben. A <table>

elem a következo tulajdonságokkal rendelkezhet:

• summary – nem jelenik meg, viszont hasznos információt biztosíthataz olyan klienseknek, melyek braile írást vagy beszédet használnak

• width – megadható pixelben vagy a böngészo rendelkezésére álló szé-lesség százalékában.

• border – a táblázat rácsainak vastagsága pixelben. Ha nincs megadva,akkor nem jelennek meg a rácsok.

• frame – táblázatunk keretezési módját adhatjuk meg.

• rules – a táblázaton belüli keretezést adhatjuk meg.

• cellspacing – a cellák közötti távolságot definiálhatjuk.

• cellpadding – a cellákon belüli távolság mértéke.A 5.4. ábrán látható táblázatot kicsit paraméterezve:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//HU""http://www.w3.org/TR/html4/strict.dtd">

<html><head><title>Táblázatok</title>

</head><body><table border="1" cellpadding="5" cellspacing="0"frame="vsides" width="70%" rules="rows" ><caption>Minta táblázat</caption><tr><th>1. oszlop</th><th>2. oszlop</th><th>3. oszlop</th></tr><tr><td>1. sor, 1. cella</td><td>1. sor, 2. cella</td><td>1. sor, 3. cella</td></tr><tr><td>2. sor, 1. cella</td><td>2. sor, 2. cella</td><td>2. sor, 3. cella</td></tr></table></body></html>

A 5.5. ábrán látható módon a <table> elem tulajdonságainak változ-tatásával sok lehetoségünk van a megjelenítés formázásra. További formá-zási lehetoségeket biztosítanak számunkra a <td> cella elem colspan, rows-pan tulajdonságai. Ezek segítségével cellákat egyesíthetünk függolegesenés víszintesen egyaránt.

Page 40: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

40 FEJEZET 5. A HTML NYELV

5.5. ábra. Formázott táblázat

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//HU""http://www.w3.org/TR/html4/strict.dtd">

<html><head><title>Táblázatok</title>

</head><body><table border="1"><caption>Minta táblázat</caption><tr><th colspan="2">1., 2. oszlop</th><th>3. oszlop</th></tr><tr><td>1. sor, 1. cella</td><td>1. sor, 2. cella</td><td rowspan="2">

1. sor, 3. cella,2. sor, 3. cella</td></tr><tr><td>2. sor, 1. cella</td>

Page 41: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

5.4. TÁBLÁZATOK 41

<td>2. sor, 2. cella</td></tr></table></body></html>

5.6. ábra. Összevont cellák

A táblázatot oszlopainak csoportosításával részekre tudjuk osztani, me-lyek egy vagy több oszlopot tartalmazhatnak. Az adott részegységbenmegadható az oszlopok szélessége, színe, stb. A <colgroup span="x"> elem-mel x számú oszlop fogható össze. A <colgroup> , <\colgroup> elempároksegítségével is definiálhatunk oszlopcsoportot. Ekkor a csoportban lévooszlopok tulajdonságait a <col> elem segítségével tudjuk megadni.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//HU""http://www.w3.org/TR/html4/strict.dtd">

<html><head><title>Táblázatok</title>

</head><body><table border="1"><caption>Minta táblázat</caption><colgroup width="10" span="2">

Page 42: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

42 FEJEZET 5. A HTML NYELV

<colgroup width="80" align="center"><col></colgroup><tr><th>A</th><th>B</th><th>C</th><th>D</th></tr><tr><td>1. sor, 1. cella</td><td>1. sor, 2. cella</td><td>1. sor, 3. cella</td><td>1. sor, 4. cella</td></tr></table></body></html>

5.7. ábra. Csoportosított oszlopok

Page 43: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

5.5. HIVATKOZÁSOK 43

5.5. Hivatkozások

A HTML egyik legfontosabb szolgáltatása a hivatkozások kezelése. A hi-vatkozásoknak két formájával találkozhatunk: az egyik a <link> elem, melycsak a fejrészben szerepelhet. Mint a fejrészben található legtöbb elem, a<link> elem sem kerül megjelenítésre. Segítségével általában a külso stílus-leíró fájl elérési útvonalát adjuk meg.

<link rel="STYLESHEET" href="../style/default.css" type="text/css">

A másik hivatkozási elempár a <a></a> csak a dokumentum törzsébenalkalmazható. Legfontosabb tulajdonsága a href="cel.html" mely a céloldalURI címét tartalmazza. Segítségével hivatkozni lehet külso eroforrásokra,de magára a tartalmazó oldalra is. Az oldalon lévo elemekben szereploid-ket címezhetjük meg. Ilyenkor a következo formátumot használjuk:

<a href="ezazoldal.html#elsoresz">1 --></a><a href="ezazoldal.html#masodikresz">2 --></a>...<a name="elsoresz">Elso resz</a>...<td id="masodikresz">

Az <a></a> elempár name tulajdonságára is hivatkozhatunk. A fentipéldában relatív címzést használtunk, azaz nem írtuk ki a teljes elérési útvo-nalat, hanem csak az adott oldalhoz viszonyítva adtuk meg a címet. Ha másbáziscímet szeretnénk használni, akkor azt a <base> elemmel definiálhatjuk.

5.6. Keretek (Frames)

Az eddigiekben azt tapasztalhattuk, hogy egy böngészoben egyszerre egydokumentumot tekinthetünk meg. Felmerült azonban az igény olyan meg-oldásokra, amikor a böngészo ablakának egyik része változatlan, a másikviszont változik (menü, tartalom). Megoldás a keret (frame) szerkezet al-kalmazása. A böngészoben megjeleno területet a táblázatokhoz hasonlóanfeloszthatjuk függolegesen és vízszintesen. Megadhatjuk, hogy az egyesrészekben mely html, vagy más dokumentumok jelenjenek meg. Azon azoldalon, melyen ezt a szerkezetet definiáljuk, nem szerepeltethetünk tör-zset.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN""http://www.w3.org/TR/html4/frameset.dtd"><html><head><title>Több keretes példa</title></head><frameset rows="10%,*" ><frame src="a.html" name="a"><frameset cols="20%,*"><frame src="b.html" name="b"><frame src="c.html" name="c" ></frameset>

</frameset></html>

Page 44: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

44 FEJEZET 5. A HTML NYELV

5.8. ábra. Többkeretes dokumentum

Egyes kereteknél megadhatjuk, hogy tartalmaz-e gördítosávot ( scrol-ling = yes|no|auto),és a keret nevét (name="név") mely igen fontos szerepetjátszhat a hivatkozásoknál, mivel a <a></a> elempárnak van egy target=""tulajdonsága, mely segítségével megadhatjuk, hogy a megcímzett erofor-rás melyik keretünkben jelenjen meg. A keret fontosabb tulajdonságai közétartozik még a noresize tulajdonság, melynek megadása esetén a kerethatártnem lehet átméretezni. Érdekes lehet továbbá a frameborder=1|0 tulajdon-ság, mely segítségével megadhatjuk, hogy szeretnénk-e a kerethatárt látnivagy nem.

5.7. Objektumok, Képek, appletek

A HTML ajánlás nem csak szövegek kezelését támogatja. Elhelyezhetünkképeket, appleteket, más HTML objektumot is a dokumentumunkon. App-leteknek nevezzük azokat a programokat, melyek a weblap letöltésévelegyidoben automatikusan letöltodnek és futtatásra kerülnek a felhasználógépén. Objektumainkat a szöveghez hasonlóan táblázatok segítségével po-zícionálhatjuk. Képek beillesztéshez használhatjuk az <img> elemet . Térké-peket (map) (<map></map> , <area> ) is készíthetünk, melyek segítségével a kép

Page 45: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

5.7. OBJEKTUMOK, KÉPEK, APPLETEK 45

más-más részére kattintva, a felhasználó más oldalakra jut. A térképeknekkét változata van: kliensoldali és szerveroldali. Kliensoldali térképek ese-tén a kattintás helyének kiértékelése a kliensoldalon történik, ezt használjukgyakrabban. Szerveroldali kiértékelést bonyolultabb térképeknél használ-junk, itt a kattintás koordinátája lesz elküldve a szervernek. A térkép elemfontosabb tulajdonságai:

• name – a térkép neve.

• area – minden egyes területet egy-egy <area> elemet tartalmaz.

• shape – a területet lefedo mértani alakzat neve (rect|circle|poly).

• coords – a shape tulajdonsággal megadott alakzat sarkainak koordi-nátái (körnél a középpontjának koordinátája és sugarának hossza,poligonnál az elso és utolsó pontnak meg kell egyeznie).

• href – az adott részhez kapcsolódó eroforrás.

Kliensoldali térkép:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//HU""http://www.w3.org/TR/html4/strict.dtd">

</html><head><title>Képek, térképek</title>

</head><img src="../../menu.png" alt="menük"usemap="#terkep" border="0"><map name="terkep"><area href="elsomenu.html"coords="30,50,39,31,110,31,110,50,30,50" shape="poly"><area href="masodikmenu.html"coords="80,30,100,110" shape="rect">

</map></body></html>

HTML lapok egymásba ágyazására használhatjuk az <iframe></iframe>elempárt. Ekkor az egyik HTML dokumentum a másikba ágyazva jelenikmeg.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//HU""http://www.w3.org/TR/html4/strict.dtd">

</html><head><title>Képek, térképek</title>

</head><table><tr><td> <img src="../../menu.png" alt="menük"usemap="#terkep" border="0"></td></tr>

Page 46: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

46 FEJEZET 5. A HTML NYELV

5.9. ábra. Képkezelés

<tr><td><iframe src="12.html"></td></tr></table><map name="terkep"><area href="elsomenu.html"coords="30,50,39,31,110,31,110,50,30,50" shape="poly"><area href="masodikmenu.html"coords="80,30,100,110" shape="rect">

</map></body></html>

Az <object></object> elemmel az ajánlás szerint az e fejezetben ismerte-tett összes elemet kiválthatjuk. Egyes böngészok ezeket a funkciókat nemfeltétlenül biztosítják. Fontosabb tulajdonságai:

• classid – az objektum elem által megvalósított eroforrásra mutató URIpl.: ../../menu.png.

• codebase – a relatív útvonalhoz definiálja a kiindulási pontot.

• codetype – itt adhatjuk meg a classid által megadott eroforrás típusátpl.: image/png.

Page 47: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

5.7. OBJEKTUMOK, KÉPEK, APPLETEK 47

5.10. ábra. Egymásba ágyazott dokumentumok

• data – hasonló feladatokat lát el mint a classid.

• type – hasonló feladatokat lát el mint a codebase.

Az <object></object> elemeket egymásba ágyazhatjuk. Amikor a böngé-szo nem tudja feldolgozni a külso elemet, akkor a belso elemet kezdi elfeldolgozni. Így lehetoségünk van arra, hogy a különbözo képességu bön-gészoket különbözo módon szolgáljuk ki.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//HU""http://www.w3.org/TR/html4/strict.dtd">

</html><head><title>Képek, térképek</title>

</head><table><tr><td>

Page 48: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

48 FEJEZET 5. A HTML NYELV

<object data="menu.x" type="x/x" height="50" width="50"><img src="../../menu.png"alt="menük" usemap="#terkep" border="0"></object>

</td></tr><tr><td><iframe src="12.html"></td></tr></table><map name="terkep"><area href="elsomenu.html"coords="30,50,39,31,110,31,110,50,30,50" shape="poly"><area href="masodikmenu.html"coords="80,30,100,110" shape="rect">

</map></body></html>

Appleteket is az <object></object> elem segítségével ágyazhatjuk be do-kumentumunkba. Errol a 15.1 fejezetben szólunk bovebben.

5.8. Urlapok (Forms)

A HTML dokumentum nem csak információt szolgátat, hanem segítségévela szerver információt is kaphat a felhasználótól. Egy vagy több kérdoívet isközzétehetünk a <form></form> elemek segítségével, melynek legfontosabbtulajdonságai :

• action – a feldolgozó eleme URI címe.

• method – a HTTP protokoll, mely függvénye segítségével küldjük eladatainkat. A 16. oldalon található GET függvényt felhasználvaaz URI-ban ágyazva, míg a 18. oldalon található POST függvénysegítségével a HTTP a fejléc sorok után megadva, név-érték páronkéntküldi el az információt a szervernek.

• name – az urlap neve.

Az urlap elemek közé helyezzük el a szükséges urlapmezoket. A fontosabburlapmezok és tulajdonságaik:

• input elem – típusától (type) függ a beviheto információ formája. Tí-pusai :

– text – egyszeru szöveges információ, fontos tulajdonsága a beírha-tó szöveg maximális hossza (maxlength) ill. a mezo hossza (size).

– password – hasonló a text típushoz, azzal a különbséggel, hogy abeírt karakterek nem jelennek meg.

Page 49: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

5.8. URLAPOK (FORMS) 49

5.11. ábra. Nem ismert objektum esetén a belso objektumot kerül feldolgo-zásra

– checkbox - jelölonégyzet, melyet ha több van belole, akkor a nametulajdonsággal tudjuk csoportosítani. Fontos tulajdonsága méga value, mellyel az értékét adhatjuk meg ill. a checked, mellyel azalapértelmezett állapotát adhatjuk meg.

– radio - rádiógomb. Ugyanolyan tulajdonságai vannak, mint acheckbox-nak, azzal a különbséggel, hogy itt egy csoportból csakegy választható ki

– submit megjelenítési formája egy gomb. Segítségével elküldhet-jük az adott urlapot.

– file – segítségével a fájlrendszerben tallózhatunk.

– hidden – rejtett elem. Hasznos lehet egyes értékek átadására.

Page 50: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

50 FEJEZET 5. A HTML NYELV

– button – egy nyomógomb jelenik meg, melynek megnyomásárafüggvényt tudunk futtatni (bovebben a 13. fejezetben).

– reset – egy nyomógomb jelenik meg, melynek megnyomására azurlap elemei alapállapotba kerülnek.

• select – segítségével egy legördülo listát hozhatunk létre. Fontosabbtulajdonságai:

– size – itt definiálhatjuk a látható sorok számát

– multiple – több mint egy elem is kiválasztható

– name – az elem neve

– option – ezzel az elemmel definiálhatunk sorokat a listában. For-mátuma: <option value="a">a projekt</option> . A selected tu-lajdonságával tudjuk alapértelmezésben kiválasztottá tenni azadott oszlopot.

• textarea – hasonló funkciót lát el, mint az <input type="text"> azzal akülönbséggel , hogy itt több soros szöveget is be tudunk írni. Fonto-sabb tulajdonságai:

– name – az elem neve.

– rows – az egyszerre megjelenítheto sorok száma.

– cols – az egyszerre megjelenítheto oszlopok .száma

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//HU""http://www.w3.org/TR/html4/strict.dtd">

</html><head><title>Kérdoiv</title>

</head><body><form action="ertekelo.php" method="post" name="form1"><table><tr><td>Vezetéknév:</td>

<td><input type="text" name="vnev" size="20" maxlength="50"></td></tr><tr><td>Keresztnév:</td>

<td><input type="text" name="knev" size="20" maxlength="50"></td></tr><tr><td>Nem:</td>

<td><input type="radio" name="nem" value="f" checked><input type="radio" name="nem" value="n"></td>

</tr><tr><td>Osztály:</td>

<td><select name="osztaly"><option value="a">A osztály</option><option value="b" selected>B osztály</option>

</select>

Page 51: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

5.8. URLAPOK (FORMS) 51

</td></tr><tr><td colspan="2" align="left">Leírás:</td>

</tr><tr><td colspan="2" align="center">

<textarea name="leiras" cols="30"rows="5">Ide kell beírni a leírást

</textarea></td>

</tr><tr><td colspan="2" align="center"><input type="submit" value="Elküld"></td>

</tr></table></form></body></html>

5.12. ábra. Urlap

Page 52: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

52 FEJEZET 5. A HTML NYELV

Az egyes elemek között a TAB gomb segítségével is mozoghatunk. Ilyen-kor fontos a tabindex tulajdonság, mely a sorrendet adja meg és mindenelemnél definiálnunk kell. Mint láthatjuk, adatokat több módon is megad-hatunk. Kezelésükrol a 13. fejezetben lesz szó. A következo fejezetben aCascading Style Sheets nyelvvel foglalkozunk, mely megkönnyíti a weblapokformázását.

Page 53: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

6. fejezet

CSS

A HTML elemek eredetileg a dokumentum tartalmának definiálására hoz-ták létre. A megjelenítés minden formázó elemet mellozve a böngészorevolt bízva. A két fo böngészogyártó azonban a megjelenítés formázása ér-dekében újabb elemeket definiált (font,color), így egyre nehezebb volt olyanweboldalt létrehozni, ahol a tartalom elkülönült a formázástól. A problémamegoldása érdekében a W3C létrehozta a CSS [18] szabványt. A stílusok aHTML-ben definiálják a megjelenítést. Általában egy külso fájlban vannaktárolva, elosegítve ezzel, hogy több oldalon is ugyanazt a stílust használ-hassuk. Amennyiben módosítani szeretnénk a stílust, azt csak egy helyenkell megtennünk. A stílus lapok az alábbi helyeken definiálhatóak:

• a HTML elemen belül.

• a HTML dokumentum fejrészében.

• külso css fájlban.

• több külso css fájlban.

Ha egy dokumentumban több helyen is definiáljuk a stílust, akkor a követ-kezo érvényesítési sorrend kerül alkalmazásra :

1. a böngészo alapértelmezett stíluslapja.

2. külso stíluslap.

3. a fejrészben definiált stíluslap.

4. az egyes elemekben definiált stílusok.

Itt a 4. a legerosebb.

53

Page 54: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

54 FEJEZET 6. CSS

6.1. A CSS nyelv szabályai

A CSS bejegyzés három részbol áll:

• választó (selector) általában az a HTML elem, melynek tulajdonságátdefiniálni szeretnénk.

• tulajdonság (property) a HTML elem tulajdonsága.

• érték (value) a HTML elem értéke.

Például:

body {color: yellow}

Ha az érték több szóból áll akkor idézojelbe kell tennünk:

p {font-family: "sans serif"}

Amennyiben szeretnénk egyszerre több mint egy tulajdonságot definiálni,akkor az egyes tulajdonságokat ’;’-vel kell egymástól elválasztani:

p {text-align: center; color: red} vagy p { text-align:center; color: black; font-family: arial }

Lehetoségünk van egyszerre több elem tulajdonságait is definiálni, ekkor’,’-vel kell oket elválasztani:

h1, h2, h3, h4, h5, h6 {color: green }

A class paraméterrel egy HTLM elemnek több stílust is definiálhatunk, me-lyek közül a class="x" paraméter megadásával választhatunk:

p.jobb {text-align: right} p.kozep {text-align: center}

Ekkor a HTML dokumentumban a következo módon hivatkozhatunk:

Page 55: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

6.2. A CSS DEFINIÁLÁSA 55

<p class="jobb"> Ez a bekezdés jobbra lesz igazítva </p> <pclass="kozep"> Ez a bekezdés középre lesz igazítva. </p>

Nem kötelezo megadnunk a HTML elem nevét, ekkor a stílus minden olyanelemre alkalmazható mely rendelkezik a szabályozott tulajdonsággal.

.kozep {text-align: center}

Egy-egy id-re is hivatkozhatunk közvetlenül, illetve megadhatjuk, hogyaz adott id vel jellemzett elemre csak akkor vonatkozik, ha az egy adottelemcsoportba tartozik.

#intro { font-size:110font-weight:bold; color:#0000ff;background-color:transparent }

Itt csak a bekezdésre vonatkozhat:

p#intro { font-size:110font-weight:bold; color:#0000ff;background-color:transparent }

6.2. A CSS definiálása

Külso CSS lapot a következo módon kapcsolhatunk a HTML dokumentum-hoz:

<head> <link rel="stylesheet" type="text/css"href="mina.css" /> </head>

A HTML oldalon belül a következo módon definiálhatunk stílust:

• A fejrészben:

<head> <style type="text/css"> hr color: siennap margin-left: 20px body background-image:url("images/back40.gif") </style> </head>

• Az elemnél:

Page 56: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

56 FEJEZET 6. CSS

<p style="color: sienna; margin-left: 20px"> Ez egy bekezdés</p>

6.3. Az egyes elemek tulajdonságai

A háttér tulajdonságait a 6.1 táblázatban látható tulajdonságok segítségéveladhatjuk meg az egyes elemekre. A szöveg megjelenítését a 6.2 táblázatbanmegadott módon definiálhatjuk. Az egyes betukre megadható formázáso-kat a 6.3 táblázatban találhatjuk. A határvonal tulajdonságok segítségévelmegadhatjuk az egyes elemek (nem csak a táblázatok) határvonalainak astílusát, színét, vastagságát. A négy oldalvonalat külön-külön beállíthatjuk,a táblázatban szerepeltetett alsó vonalhoz hasonlóan. (border-left , border-right , border-top ).Részletesen a 6.4 táblázatban találhatjuk meg az egyestulajdonságokat. Margók segítségével szabályozhatjuk a térközt az egyeselemek között. Negatív értékeket is megadhatunk, ilyenkor átlapolódnak.Az egyes margók külön-külön és együtt is szabályozhatóak. Tulajdonsá-gaik a 6.5 táblázatban láthatóak. A padding tulajdonsággal beállíthatjuk azelem és a határvonala közötti távolságot, a paramétereket a 6.6 táblázat-ban tekinthetjük meg. Egyéni megjelenítést kölcsönözhetünk listáinknakis, ahol akár képek is lehetnek a felsorolások elott. A tulajdonságok részle-tesen a 6.7 táblázatban találhatóak. Figyelem ! Nem mindegyik böngészotámogat minden tulajdonságot.

6.1. táblázat. A háttér tulajdonságaiTulajdonság Leírás Értékbackground Segítségével az összes tulaj-

donság beállíthatóbackground-colorbackground-imagebackground-repeatbackground-attachmentbackground-position

background-attachment Beállítja, hogy a háttérkép fix,vagy az oldallal együtt gördül.

scroll, fixed

background-color Egy elem háttérszínét beállítja. color-rgb color-hex color-nametransparent

background-image A háttérképet adhtajuk meg. url none

background-position A háttérkép pozicióját állíthat-juk be.

top left top center top right cen-ter left center center center rightbottom left bottom center bot-tom right x-% y-% x-pos y-pos

background-repeat A háttérkép ismétlodését defi-niálhatjuk.

repeat repeat-x repeat-y no-repeat

Page 57: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

6.3. AZ EGYES ELEMEK TULAJDONSÁGAI 57

6.2. táblázat. A szöveg tulajdonságaiTulajdonság Leírás Értékcolor szín szín

direction A szöveg irányát állítja be ltr, rtl

letter-spacing Változtatja a karakterek közöttitávolságot.

normal, hossz

text-align A szöveg rendezését állíthatjukbe.

left, right, center, justify

text-decoration Díszítést ad a szövegnek none, underline, overline, line-through, blink

text-indent Az elso sor behúzása. hossz %

text-transform Definiálja a karakterek típusátegy szövegben.

none, capitalize, uppercase, lo-wercase

white-space Meghatározza a szóköz hasz-nálatát egy szöveg elott

normal, pre, nowrap

word-spacing Meghatározza a szóközt a sza-vak között

normal, hossz

6.3. táblázat. A betuk tulajdonságaiTulajdonság Leírás Értékfont A betu összes tulajdonsága ál-

lítható segítségével.font-style font-variant, font-weight, font-size/line-height,font-family, caption, icon,menu, message-box, small-caption, status-bar

font-family A betuk családját állítja be family-name, generic-family

font-size A betuk méretét definiálja. xx-small x-small, small, me-dium, large, x-large, xx-large,smaller, larger, length, %

font-variant A betuk típusát állítja be. normal small-caps

font-weight A betuk vastagságát szabályoz-hatjuk .

normal, bold, bolder, lighter,100, 200, 300, 400, 500, 600, 700,800, 900

Page 58: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

58 FEJEZET 6. CSS

6.4. táblázat. A keretvonalak (border) tulajdonságaiTulajdonság Leírás Értékborder Segítségével mind a négy ol-

dalra beállíthatjuk a következotulajdonságokat.

border-width, border-style,border-color

border-bottom Az alsó határvonal tulajdonsá-gait definiálhatjuk.

border-bottom-width, border-style, border-color

border-bottom-color Az alsó vonal színét állíthatjukbe.

border-color

border-bottom-style Az alsó vonal stílusát változtat-hatjuk.

none, hidden, dotted, dashed,solid, double, groove, ridge, in-set, outset

border-bottom-width Az alsó vonal vastagsága. thin, medium, thick, vastagság

6.5. táblázat. A margók (margin) tulajdonságaiTulajdonság Leírás Értékmargin Segítségével mind a négy ol-

dalra beállíthatjuk a következotulajdonságokat.

margin-top, margin-right,margin-bottom, margin-left

margin-bottom Az alsó margó tulajdonságaitdefiniálhatjuk.

auto, length, %

margin-left A baloldali margó tulajdonsá-gait állítjuk.

auto, length, %

margin-right A jobboldali margó tulajdonsá-gait állítjuk.

auto, length, %

margin-top A felso margó tulajdonságaitállítjuk.

auto, length, %

6.6. táblázat. PaddingTulajdonság Leírás Értékpadding Segítségével mind a négy ol-

dalra beállíthatjuk a következotulajdonságokat.

padding-top, padding-right,padding-bottom, padding-left

padding-bottom Az alsó helyköz tulajdonságaitdefiniálhatjuk.

length, %

padding-left A baloldali helyköz tulajdonsá-gait állítjuk.

length, %

padding-right A jobboldali helyköz tulajdon-ságait állítjuk.

length, %

padding-top A felso helyköz tulajdonságaitállítjuk.

length, %

Page 59: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

6.3. AZ EGYES ELEMEK TULAJDONSÁGAI 59

6.7. táblázat. ListákTulajdonság Leírás Értéklist-style Segítségével beállíthatjuk a kö-

vetkezo tulajdonságokat.list-style-type, list-style-position, list-style-image

list-style-image Képet tehetünk a felsorolásjeloelem helyére.

none, url

list-style-position A listajelzo elem pozicóját sza-bályozhatjuk.

inside, outside

list-style-type A listajelzo elem típusát defini-álhatjuk.

none, disc, circle, ...

Page 60: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

60 FEJEZET 6. CSS

Page 61: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

7. fejezet

Az XML nyelv

A HTML szabvány lassan tíz éves lesz. Ma már olyan Web alkalmazá-sok vannak, amilyenekre tíz évvel ezelott még senki sem gondolt. Aze-business és más vállalatközi alkalmazásoknak, egymástól nagy távolságralevo osztott rendszereknek kell gyorsan és hiba nélkül muködniük. Azalkalmazásoknak képeseknek kell lenniük arra, hogy más alkalmazással,más technológiával együttmuködjenek, hibamentes adatcserét folytassa-nak. A webes kliensek is igen sokrétuvé váltak. Megjelentek WAP (WirelessApplication Protokoll) technológiát támogató mobil telefonok ill. az egészenmás technológiát alkalmazó menedzser kalkulátorok. Az adatok átalakí-tása dönto fontosságúvá vált. Ezen feladatok, problémák megoldására,kezelésére hozták létre az XML nyelvet és keretrendszerét. A következofejezetben az XML nyelvrol lesz szó.

7.1. XML

Az XML (Extensible Markup Language) egy metanyelv, mely más nyelvekmeghatározására szolgál. A W3C szervezet fejlesztette ki, jelenleg az 1.0-ásverziónál tart. A W3C oldalán található ajánlás [19] igen nehezen olvasható,ezért érdemes meglátogatni a www.xml.com oldalon megtalálható megjegy-zésekkel ellátott változatát is [20]. Az XML egy olyan jelölonyelv, mely azadott nyelvnek sem a jelöloelem-készletét, sem a nyelvtanát nem határozzameg (ez egy kicsit sarkított, késobb láthatjuk, hogy néhány igen egyszerufeltételnek eleget kell tennie). A jelöloelem készlet alatt azon elemek halma-zát értjük, melyeknek értelmük van egy bizonyos nyelvértelmezo (languageparser) számára. Nyelvtan alatt pedig az adott jelöloelem-készlet helyeshasználatának szabályait értjük. A HTML-ben például a jelöloelem készletszigorúan definiált. Új elemeket, vagy régi elemek számára új tulajdon-ságokat nem tudunk definiálni, mivel a nyelvértelmezo nem tudja oketértelmezni. Mivel az XML sem a jelöloelemeket, sem a nyelvtant nem hatá-rozza meg, teljes mértékben kiterjesztheto. E tulajdonsága folytán a legtöbb

61

Page 62: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

62 FEJEZET 7. AZ XML NYELV

környezethez könnyen alkalmazható, alakítható. Annak érdekében, hogyegy XML dokumentum széles körben használható, értelmezheto legyen,néhány szabályt teljesítenie kell. Eloször is, jól formázottnak (Well formed)kell lennie. Jól formázott az a dokumentum, melynél minden megnyitottjelöloelem le is van zárva és nem tartalmaz a sorrendbol kiágazó jelöloele-meket (nested). Meg kell felelnie az általános alapszabálykészletnek. Ezeketa szabályokat alkalmazzák az XML ismero programok (XML aware), amikora dokumentumot feldolgozzák. Második fontos szabály az, hogy egy XMLdokumentum érvényes (valid) lehet, ez azonban nem kötelezo. Érvényesdokumentum az, amely megfelel a dokumentum típus definícióban (DTDDocument Type Definition) leírt szabályoknak. A DTD meghatározza a jelölo-elemkészletet, és a nyelvtant. Nem kötelezo ugyan, de érdemes megadniaz adott XML dokumentumra vonatkozó DTD-t, mivel segít megérteni azXML dokumentumot. Az XML tulajdonképpen az adatábrázolásért felel,míg a DTD a hordozhatóságot biztosítja. A következo példában egy XMLdokumentumot láthatunk:

<?xml version="1.0"?><!DOCTYPE Feladat SYSTEM "DTD\feladat.dtd"><Feladat sorszam="14"><vegrahajto>Kardos Katalin</vegrahajto><megbizo>Nagy Emese</megbizo><hatarido>2002.05.01</hatarido></Feladat>

A dokumentum két részre osztható. A fejlécre (header) és a dokmentum-törzsre (body). Esetünkben az elso sor a fejléc, mely információkat szolgáltatill. parancsokat ad az XML értelmezo, feldolgozó programoknak. Ezeketaz utasításokat feldolgozási utasításoknak (PI) nevezzük. A fejrészben ál-talában szerepel egy DOCTYPE deklaráció, mely segítségével megadhat-juk a dokumentum nyelvtani szabályait és elemeit leíró DTD fájl elérésiútvonalát. Elso paramétere a dokumentum gyökér eleme, a második pa-ramétere lehet SYSTEM vagy PUBLIC értéku. A SYSTEM esetén meg kelladni az elérési útvonalat. A PUBLIC azt jelenti, hogy a DTD nyilvános ésszámos helyen hozzáférheto (pl.: a HTML dokumentumok elején láttunkilyent.). A következo sorban egy nyitó elem található. Ezt az elemet gyökérelemnek is nevezik. Segítségével állapítja meg az XML értelmezo az XMLdokumentum elejét és végét. Minden XML dokumentumnak kötelezo egygyökérelemet tartalmaznia. Egy dokumentumban csak egy gyökér elemlehet. Ha az elozoekben leírtak szerint megvizsgáljuk dokumentumunkat,akkor megállapíthatjuk , hogy jól formázott, mivel minden nyitó elemhezzáró elem tartozik és nincsenek egymást keresztezo elem párok. Az XMLmegkülönbözteti a kicsi és a nagy betuket (case sensitive), a szóközöket meg-tartja, a CR/LF párokat lecseréli LF karakterre. Ha azt szeretnénk, hogy az

Page 63: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

7.1. XML 63

XML értelmezonk kihagyjon egy adott kódrészletet, akkor azt a következomódon jelölhetjük meg:

<!� Ez nem lesz figyelembe véve �>

A törzs adatszerkezetét elemek definiálják, melyek névvel, egy vagy többtulajdonsággal valamint egy elem értékkel rendelkezhetnek. Az elemeknevét nagybetuvel vagy aláhúzással célszeru kezdenünk. Az elemek nevetetszoleges hosszúságú lehet és nem tartalmazhat szóközt. Minden meg-nyitott elemet be kell zárni. Kivétel ez alól az üres elem, ami egy tagbóláll.

<elem tulajdonság1="a" tulajdonság2="b"> <�nyitó-elemérték</elem> <�záró-elem<elem tulajdonság3="a" tulajdonság4="b" /><�üres-elem

Az elemek tulajdonságainak értékeit idézojelben kell megadnunk. Tulaj-donságokat nem igazán szoktak alkalmazni adat hordozására, mivel nehe-zen bovíthetoek, nem írhatnak le struktúrákat. Célszerubb az adatokat amegfelelo elemértékekkel ábrázolni.

<elem><tulajdonság1>a

</tulajdonság1><tulajdonság2>b

</tulajdonság2><elemérték>érték

</elemérték></elem>

Egy XML dokumentum elemeit másik XML dokumentumban is felhasznál-hatjuk. Mivel az elemek nevei tetszolegesek, fennáll az esélye, hogy kétkülönbözo dokumentumban azonos nevu, de különbözo funkciójú elemethasználunk. Szükség van ezért az egyes dokumentumokhoz tartozó ele-mek azonosítására, amit az XML névtér segítségével tudunk megvalósí-tani. Minden XML dokumentumhoz rendelhetünk egy URL-t, mely azURL természetébol fakadóan egyedi. Az xmlns tulajdonság segítségévelhivatkozásokat definiálhatunk az egyes névterekre.

Page 64: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

64 FEJEZET 7. AZ XML NYELV

<?xml version="1.0"?><!DOCTYPE Feladat SYSTEM "DTD\feladat.dtd"><Pelda1:Feladatxmlns:Pelda1="http://wilma.cab.u-szeged.hu:8080/cocoon/pelda1.xml"><Pelda1:vegrahajto>Kardos Katalin</Pelda1:vegrahajto><Pelda1:megbizo>Nagy Emese</Pelda1:megbizo><Pelda1:hatarido>2002.05.01</Pelda1:hatarido></Pelda1:Feladat>

Ha az xmlns tulajdonság után nem adunk meg helyettesíto nevet (alias),akkor az alapértelmezett névtér az xmlns-ben definiált névtér lesz.

<Feladat xmlns="http://wilma.cab.u-szeged.hu:8080/cocoon/pelda1.xml">

Mint láthattuk szinte tetszoleges struktúrában és tetszoleges elemekkel tu-dunk XML dokumentumot létrehozni. Ahhoz azonban, hogy egy általunklétrehozott dokumentumot más is megértsen (gép vagy ember) szükség vana fenti példában is látható DTD-re, Dokumentum Típus Deklarációra. ADTD feladata az, hogy meghatározza az XML dokumentum minden elemét,az engedélyezett tulajdonságokat, esetenként az engedélyezett értékeket.

<!ELEMENT Pelda1:Feladat (Pelda1:vegrehajto,Pelda1:megbizo,Pelda1:hatarido)><!ELEMENT Pelda1:vegrehajto (#PCDATA)><!ELEMENT Pelda1:megbizo (#PCDATA)><!ELEMENT Pelda1:hatarido (#PCDATA)>

A fenti példából kiderül, hogy a dokumentumunkban négy elem engedé-lyezett: (Feladat, vegrehajto, megbizo, hatarido). Az elem neve után adhatjukmeg az engedélyezett tartalmat. Esetünkben a Feladat elem tartalmazhatja amásik három elemet, melyek egyszeru karakteres adatot tartalmazhatnak.A Feladat elemnél nem definiáltuk, hogy az adott elem hányszor jelenhetmeg. Ezt a 7.1 táblázatban lévo módosítók segítségével tehetjük meg. Azismétlodés egy elem helyett esetenként egy elem csoportra vonatkozik, eztábrázolhatjuk az elemek csoportosításával.

<!ELEMENT Pelda1:Feladat ((Pelda1:vegrehajto,Pelda1:hatarido))+,Pelda1:megbizo)>

Page 65: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

7.1. XML 65

7.1. táblázat. DTD Ismétlodés operátorokOperátor Leírásnincs Pontosan egyszer kell szerepel-

nie

? Egyszer vagy egyszer sem

+ Legalább egyszer

* Akárhányszor (0 is)

Ilyenkor az elemek neveit zárójelbe tesszük és a zárójel után helyezzükel a csoportra vonatkozó ismétlodés operátort. Hierarchiánk felépítésérehasználhatjuk a vagy utasítást is.

<!ELEMENT Pelda1:Feladat (Pelda1:vegrehajto |Pelda1:hatarido),Pelda1:megbizo)>

Az adott elem tulajdonságainak paramétereit az alábbi módon adhatjukmeg:

<!ATTLIST elemnév tulajdonságnév típus módosító>

Tulajdonság leggyakrabban a CDATA, mely karakterekbol álló adathalmaztjellemez. Ha módunk van rá, adjuk meg a lehetséges értékeket (egyrésztsegít a dokumentum ellenorzésben, másrészt a könnyebben értelmezhetovéteszi azt):

<!ATTLIST feladat munkahely (irinyi|arpadter)>

A fenti példában a feladat elem "munkahely" tulajdonsága csak az "irinyi"vagy "arpadter" értékeket veheti fel. A módosítónak a következo értékeilehetnek:

• #IMPLIED – Nem feltétlenül szükséges.

• #REQUIRED – Szükséges.

• #FIXED– Kötelezo a jelenléte és az értéke egyaránt.

Módosító lehet még a tulajdonság alapértelmezett értéke idézojelben:

Page 66: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

66 FEJEZET 7. AZ XML NYELV

<!ATTLIST feladat munkahely (irinyi|arpadter) "irinyi">

Ilyenkor, ha nincs megadva, akkor az "irinyi" értéket veszi fel. A DTDrendelkezik még néhány tulajdonsággal, azonban mint a példákból is lát-hatjuk, felépítése nem igazán hasonlít az XML dokumentuméra, a jövobenvalószínuleg a most fejlodo XML Schema lesz az elterjedtebb, mely azonkívül, hogy XML felépítésu, lehetové teszi saját adat típusok definiálásátis, elosegítve ezzel a dokumentum igen pontos specifikálását (a CDATAhelyett használhatunk int, string adattípusokat). Mint láthattuk, az XML ki-válóan alkalmas adathalmazok ábrázolására azonban a megjelenítést nemigazán definiálja. Az XSL nyelv segítségével tudjuk XML dokumentumun-kat szinte tetszoleges formátumúvá alakítani. A következo fejezetben errollesz szó.

Page 67: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

7.2. XSL 67

7.2. XSL

Az XSL-XML páros segítségével megvalósíthatjuk az adatok és a formázáselkülönítését. Ez az architektúra a következo elonyös tulajdonságokkalrendelkezik:

• szabványos külalak – egy vállalaton belül egységes külalakot használ-hatnak, amit egyszerre tudnak módosítani

• kliensek megkülönböztetése – a különbözo kliensek számára külön-bözo módon jelenik meg ugyanaz a tartalom (WAP,Lynx,IE)

• különbözo médiumok – ugyanazt az adathalmazt szeretnénk papíron,Weben, . . . viszontlátni

Az XSL (Extensible Stylesheet Language) [21] stílusleíró nyelv tartalmazzaaz XPath [22] nyelvet, mely az XML dokumentumok egyes részeinek cím-zésére szolgál, az XSLT (XSL Transformations) [23] nyelvet, mely definiáljaa transzformációt az XML fából egy másik formátumba, valamint az XSLnyelvet, mely az egyes objektumok formázásáról gondoskodik. Ezek utánnem foglalkozunk a három nyelvel külön-külön, hanem megpróbáljuk oketegyütt alkalmazni. Részletes leírásuk a megtalálható a W3C ajánlásban.Az XML-hez hasonlóan az XSL stíluslapoknak is jólformázottnak kell len-niük, valamint tartalmazniuk kell a névtér deklarációt. Az xsl elotagothasználó XSL névtér határozza meg azokat az elemeket, melyekre az át-alakítás során szükség van. Az XSL-re vonatkozó névtér a W3C oldalántalálható (http://www.w3c.org/ 1999/XSL/Transform). Az átalakítás folyamánaz XSL sablon feladata, hogy meghatározza egy adott elem helyét az XMLdokumentumban és definiáljon egy szabályt vagy szabályrendszert, melysegítségével az adott elemet átalakítja. A sablont, mellyel az adott elemethelyettesítjük, a template elem használatával definiálhatjuk.

<xsl:stylesheetxmlns:xsl="http://www.w3c.org/1999/XSL/Transform"xmlns:Pelda1="http://wilma.cab.u-szeged.hu:8080/cocoon/xslp1.xml"><xsl:template match="Pelda1:Feladat">ez kerül az adott elem helyére</xsl:template></xsl:stylesheet>

Az eredmény megtekintéséhez szükségünk van egy olyan eszközre, amely atranszformációt elvégzi. Ilyen eszköz például a Ms Internet Explorer. Egyközpontosított megoldás, ha az átalakítás a webszerveren történik meg ésböngészonknek már csak a kimenetet kell megjelenítenie. Erre több szoftverkörnyezet is létezik, mi az Apache webszerver Tomcat servlet motorjára

Page 68: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

68 FEJEZET 7. AZ XML NYELV

épülo Cocoon környezetet használjuk. Az eredmény a 7.1 ábrán látható.Itt nem vettük figyelembe az elem tulajdonságait, tartalmát. Az xsl:apply-

7.1. ábra. Egy egyszeru transzformáció

templates segítségével a feldolgozó végigjárva az XML dokumentumot, akritériumnak megfelelo elemek értékeit egymás után helyezi.

<xsl:stylesheetxmlns:xsl="http://www.w3c.org/1999/XSL/Transform"xmlns:Pelda1="http://wilma.cab.u-szeged.hu:8080/cocoon/xslp1.xml"><xsl:template match="Pelda1:Feladat"><xsl:apply-templates/></xsl:template></xsl:stylesheet>

A Feladat elem, mint gyökér elem, minden elemet tartalmaz, melyekígy meg is jelennek a kimeneten. Ezekbol egy elemet a value-of select=""XPath függvénnyel tudunk kiemelni. Pl:

Page 69: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

7.2. XSL 69

<?xml version="1.0" encoding="ISO-8859-2"?><oldal><cim>Hello</cim><tartalom><para>Ez egy bekezdés</para>

</tartalom></oldal>

A hozzá tartozó stíluslap:

<?xml version="1.0"?><xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="oldal"><html><head><title><xsl:value-of select="cim" /></title></head><body><xsl:apply-templates /></body></html></xsl:template></xsl:stylesheet>

Az eredmény a 7.2 ábrán látható. A böngészo fejlécében megjelent azoldal címe, azonban a cím megjelent a szövegben is. Attól függetlenül, hogya cím mezo értékét már felhasználtuk, az elem nem törlodik a hierarchiából,értéke továbbra is ott szerepel. Értékét a select ="*[not(self::cim)]" utasítássegítségével tudjuk kiszurni. Itt definiálni kell, hogy melyik tengelyen talál-ható cím mezorol van szó, ez esetünkben az oldal tengely, azaz saját maga.A kódrészlet:

...<xsl:apply-templates select="*[not(self::cim)]/>...

Vezérlési szerkezeteket is használhatunk az XML dokumentum átalakí-tása közben. Ilyen például az xsl:for-each szerkezet, mely segítségével azegy elem által tartalmazott összes elemre külön-külön tudunk muveletetdefiniálni.

Page 70: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

70 FEJEZET 7. AZ XML NYELV

7.2. ábra. Egy elem értéke

<?xml version="1.0" encoding="ISO-8859-2"?><oldal><munkatársak><név><vezetéknév>Nagy</vezetéknév><keresztnév>Tamás</keresztnév>

</név><név><vezetéknév>Szép</vezetéknév><keresztnév>Ilona</keresztnév>

</név><név><vezetéknév>Kiss</vezetéknév><keresztnév>Tihamér</keresztnév>

</név></munkatársak></oldal>

Page 71: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

7.2. XSL 71

<?xml version="1.0" encoding="ISO-8859-2"?><xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="munkatársak"><html><head></head><body><table border="1" cellspacing="0" cellpadding="8"><tr><td><b>Vezetéknév</b></td><td><b>Keresztnév</b></td>

</tr><xsl:for-each select="név" ><tr><td><xsl:value-of select="vezetéknév" /></td><td><xsl:value-of select="keresztnév" /></td>

</tr></xsl:for-each></table></body></html></xsl:template></xsl:stylesheet>

Az eredmény a 7.3 ábrán látható. Figyeljük meg, hogy ily a módon csakaz egy szinttel alacsonyabban fekvo levelek érhetoek el. Ha az alacsonyab-ban fekvo leveleket szeretnénk megcímezni, akkor használhatjuk az elérésiútvonalat felsoszint/levél. Sorba is rendezhetjük neveinket az xsl:sort utasítássegítségével. Az xsl:sort utasítás a xsl:apply-templates vagy a xsl:for-each elemtagjaként szerepelhet. Az elso xsl:sort utasítás megadja az elso rendezésiszempontot, a második a másodikat . . . stb. A data-type mezo értéke lehettext, number, QName.

Page 72: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

72 FEJEZET 7. AZ XML NYELV

7.3. ábra. For-each ciklus

<?xml version="1.0" encoding="ISO-8859-2"?><xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="munkatársak"><ul><xsl:apply-templates select="név"><xsl:sort select="vezetéknév"/><xsl:sort select="keresztnév"/>

</xsl:apply-templates></ul>

</xsl:template><xsl:template match="név"><li><xsl:value-of select="vezetéknév"/><xsl:text> </xsl:text><xsl:value-of select="keresztnév"/>

</li></xsl:template></xsl:stylesheet>

Eloször a munkatársak ágat választjuk ki, itt sorba rendezzük az név ele-meket a vezetéknév, majd keresztnév elemek szerint. Ezek után kiválasztjuka név ágat, mely ekkor már sorba van rendezve és kiíratjuk. A következo

Page 73: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

7.2. XSL 73

példában a xsl:for-each, a xsl:sort, xsl:number szerkezetek segítségével sorbarendezzük listánkat és sorszámot is adunk a sorokhoz.

<?xml version="1.0" encoding="ISO-8859-2"?><xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="munkatársak"><xsl:for-each select="név"><xsl:sort select="vezetéknév"/><xsl:sort select="keresztnév"/><p><xsl:number value="position()" format="1. "/><xsl:value-of select="."/>

</p></xsl:for-each>

</xsl:template></xsl:stylesheet>

Használhatjuk a xsl:if és a xsl:choose feltételes utasításokat elágazások keze-lésére. A következo példában táblázatba íratjuk a neveket és minden Ildikókeresztnevu egyén elé egy jelet teszünk.

<?xml version="1.0" encoding="ISO-8859-2"?><xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="oldal"><table><xsl:apply-templates/>

</table></xsl:template><xsl:template match="név"><tr><td><xsl:if test="keresztnév=’Ilona’">�></xsl:if><xsl:apply-templates/>

</td></tr></xsl:template></xsl:stylesheet>

Figyeljük meg, hogy a név elem az oldal elem egy ága, így a megjelenítésbenis érvényesek rá az oldal elemre érvényesített szabályok, ill. nem fog különmegjelenni, hanem az oldal elemen belül.

Az XML nyelvnek itt csak néhány fontosabb tulajdonságát ismertük meg,részletesebb áttekintésre az eloadásra rendelkezésre álló ido szukösségemiatt miatt nincs lehetoségünk. Találkozni fogunk még vele a következo

Page 74: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

74 FEJEZET 7. AZ XML NYELV

két fejezetben, valamint a Java nyelvnél ahol Java függvények segítségévelfogunk XML dokumentumokat értelmezni, feldolgozni.

Page 75: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

8. fejezet

WEBDAV

A HTTP protokollt elsosorban az adatok letöltésére hozták létre, nem a leg-alkalmasabb elosztott, közös munkarendszerek számára. A Web azonban,mint közeg, kiválóan alkalmas lenne ilyen tevékenységek végzésére, va-lamint igen nagy igény mutatkozik az elosztott, közös munkát támogatórendszerek iránt. Ezért az IETF Web Distributed Authoring and Versioning(WebDAV) munkacsoportja továbbfejlesztette, kiterjesztette a HTTP proto-kollt, hogy megfelelo alapot nyújtson e rendszerek számára. A WebDAV[24] protokoll a következo szolgáltatásokat nyújtja:

• tulajdonságok(properties) - Tulajdonságokat rendelhetünk egyes ob-jektumokhoz.

• elemek halmaza(collections) – Létrehozhatunk különbözo dokumen-tum halmazokat és lekérdezhetjük a hierarchiájukat, könyvtárlistá-záshoz hasonlóan.

• zárolás (locking) – A felülírások megelozésére szolgáló egyszeru me-chanizmus a párhuzamos hozzáférés kezelésére.

• névtér muveletek (namespace opreations) – Webes eroforrások és hi-erarchiájuk másolása, mozgatása.

8.1. Metódusok

A felsorolt feladatokat a következo metódusokkal valósítja meg:

• PROPFIND – lekérdezi az URI segítségével megcímezett eroforrásáltalunk megadott paramétereit.

• PROPPATCH – manipulálja az URI segítségével megcímezett erofor-rás általunk megadott paramétereit.

75

Page 76: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

76 FEJEZET 8. WEBDAV

• MKCOL – segítségével tudunk új eroforrásokat, eroforráshalmazokatlétrehozni

• GET, HEAD – változatlan.

• POST – változatlan.

• DELETE – eroforrások, vagy eroforrások halmazának törlése. Haegyszerre többet szeretnénk törölni, de egyet vagy többet nem sikerül,akkor egyet sem fog törölni. (A konzisztens állapot megorzése végett).

• PUT – eroforrásokat tölthetünk fel a szerverre, ha a megfelelo hierar-chia már létre van hozva a MKCOL által.

• COPY – eroforrások, eroforráshalmazok másolását biztosítja beállítha-tó mélységben.

• MOVE – hasonló mint a COPY csak törli az eroforrást.

• LOCK – zárolás, bovebben a 8.2 szakaszban.

• UNLOCK – zárolás feloldása.

8.2. Zárolás

A zárolás legegyszerubb formája a kizárólagos (exclusive) zárolás. Ekkor ahozzáférés joga csak egy egyed számára biztosított. Gyakran azonban nemcélszeru ilyen szigorú szabályt alkalmazni, elég az is, ha a rendszer érte-síti a résztvevoket arról, hogy más is megnyitotta a dokumentumot. Ez amegosztott zárolás (shared lock). A tapasztalat azt mutatja, hogy egy kizáró-lagos zárolási üzemmódot használó program lefagyása komoly problémátjelenthet a többi résztvevo számára.

8.3. Paraméterek továbbítása

A HTTP1.x kérés, válasz üzenetekben két módon továbbíthatunk paraméte-reket: a kérés fejlécben és a kérés törzsben. A WebDAV paraméter neveketegy-egy URI azonosítja, biztosítva a decentralizált névteret, az értékeketpedig jól formázott XML kód tartalmazza. Ilyen értékek átvitelére már nemalkalmas a HTTP fejléc, melynek hossza ugyan nincs korlátozva, azonbanegyes implementációkban ez csak 256 karakter. Így a törzset használjuk aparaméterek átvitelére.

Page 77: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

8.3. PARAMÉTEREK TOVÁBBÍTÁSA 77

PROPPATCH /bar.html HTTP/1.1Host: www.foo.comContent-Type: text/xml; charset="utf-8"Content-Length: xxxx

<?xml version="1.0" encoding="utf-8" ?><D:propertyupdate xmlns:D="DAV:"xmlns:Z="http://www.w3.com/standards/z39.50/"><D:set><D:prop><Z:authors><Z:Author>Jim Whitehead</Z:Author><Z:Author>Roy Fielding</Z:Author></Z:authors></D:prop></D:set><D:remove><D:prop><Z:Copyright-Owner/></D:prop></D:remove></D:propertyupdate>

Page 78: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

78 FEJEZET 8. WEBDAV

Page 79: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

9. fejezet

WAP

2001-ben 1000 millió mobil elofizeto volt, csaknem annyi, mint amennyivezetékes (1045 millió). A mobil elofizetok tábora ígéretes, kihasználatlanpiac. A szolgáltatók sikerének titka az ún. "killer" alkalmazások kifej-lesztése. Ezek olyan alkalmazások, melyekért a felhasználók nagy részehajlandó fizetni. Itt nem az olyan hagyományos alkalmazásokra kell gon-dolnunk, mint a Web böngészés, mivel ez a jelenlegi technikai korlátok miattvalószínuleg nem fog széles körben elterjedni. Kihasználhatjuk azonban amobil felhasználók egyedi képességét, a mobilitásukat, olyan szolgáltatá-sok biztosításával, melyek helyhez kötodnek (a szolgáltató tudja, hogy afelhasználó hol tartózkodik). Ilyen alkalmazás például a közlekedési in-formációk szolgáltatása az aktuális körzetben. Népszeru lehet az adottkörzetben található éttermek, kereskedelmi akciók, események közlése. Amobilitáson túl, ki lehet használni az állandó rendelkezésre állást (mindignálam van a mobil) banki tranzakciók, szálloda foglalás és hasonló felada-tok elvégzésére. A fenti alkalmazások szolgáltatásához szükség van egyszabványos, mindenki által elfogadott környezetre, mely a fejlesztok szá-mára a megfelelo interfészeket, szolgáltatásokat biztosítja. A WAP (WirelessApplication Protocol) [25] specifikáció és architektúra a legnagyobb mobilte-lefon gyártók együttmuködésével jött létre (az teljes gyártókapacitás 90

9.1. WAP

A WAP modell átveszi a WWW modell felépítését, kibovítve azt néhányhasznos tulajdonsággal. A legfontosabb újítások:

• Push

• Telephony Support (WTA)

Ellentétben a klasszikus kérés-válasz modellel, melyben a tartalmat a kli-ens kéri, (pull) az új szolgáltatásban a szerver kérés nélkül küldi az infor-mációt (pl.: közlekedési információk a környéken, éttermek a környéken,

79

Page 80: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

80 FEJEZET 9. WAP

. . . ). A WTA a telefonos és az Internetes technológia ötvözete (egy hivatko-zásra kattintva telefonhívást kezdeményezhetek). A felhasználói interfészta hagyományos webböngészohöz hasonlóan, a mobilban lévo WAP mik-roböngészo (microbrowser) biztosítja. A WAP szabványos modellt biztosít,mely lehetové teszi a kommunikációt a mobil terminálok és a webszerverekközött.

• szabványos címzési modell – hagyományos URL-ek használata tarta-lom címzésére.

• tartalom osztályozás – minden WAP tartalom típusnak hozzá vanrendelve egy hagyományos WWW típus. Ez lehetové teszi a WAPfelhasználónak, hogy a tartalmat a megfelelo módon kezelje.

• szabványos kommunikációs protokoll – a WAP kommunikációs pro-tokoll lehetové teszi a böngészo és a szerver kommunikációját.

A WAP felhasználja a Proxy technológiát, hogy lehetové tegye a kapcsolatota vezeték nélküli tartomány és az Internet között, mellyel a következoketbiztosítja:

• protokoll átjáró (protocol gateway) – az átjáró átalakítja a vezetékmentesprotokollt WWW protokollokra. A proxy a DNS kéréseket is biztosítjaa keresett URL számára.

• tartalom kódolók, dekódolók – a tartalom kódolók a WAP tartalmatoptimális formátumává alakítják, igyekezve optimalizálni a mobil át-viteli vonal használatát.

• User Agent Profile Manager – leírja a kliens kapacitását és preferenciáit.

• tároló proxy(Caching Proxy) – csökkentheti a hálózat terhelését.

9.1.1. A WAP architektúra

A WAP architektúra átülteti az Interneten használt, bevált protokollokat avezetékmentes hálózati körülményekre (kis sávszélesség, nagy késleltetés,bizonytalan kapcsolat). A protokollok itt bináris kódolásúak, mivel ígyjelentosen csökkentheto az üzenetek mérete. Az átviteli réteg biztosítja akapcsolatmentes átviteli módot WDP (Wireless Data Protcol) segítségével,mely az UDP vezetékmentes megvalósítása. A WTP (Wireless Transfer Pro-tocol) (a TCP mobil megfeleloje) segítségével a kapcsolatorientált átviteli módis definiált. A szállítási réteg az alábbi információ struktúrák átvitelét biz-tosítja:

• Hypemedia Transfer – Biztosítja az önleíró hipermédia eroforrások átvi-telét a WSP (Wireless Session Protocol) és a WTP (Wireless TransactionProtcol) segítségével.

Page 81: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

9.1. WAP 81

• Streaming – audió és videó átvitelt támogat.

• Message Transfer – aszinkron multimédiát tartalmazó üzenetek továb-bítását oldja meg MMS Encaptulation (Multimedia Message Service En-captulation) protokoll segítségével.

A viszonyréteg (session service) segítségével egyszerre több típusú forgalmatis fogadhat a mobil felhasználó, illetve lekérdezheto az egyes típusokhoztartozó állapota. Többek között a következo szolgáltatásokat biztosítja:

• Capability Negotation – segítségével lekérdezheto, átviheto, menedzsel-heto a kliensekhez, felhasználókhoz és a hálózati eszközökhöz tartozóképességeket, tulajdonságokat leíró információ.

• Push-OTA – A Push-OTA (Push Over The Air) viszony szolgáltatásbiztosítja a hálózat által kezdeményezett átvitelek továbbítását az al-kalmas kliensek részére.

• sync – segítségével szinkronizálhatjuk a másolt adatot.

• cookies – segítségével állapotokat menthetünk le több tranzakción át akliensen és a proxy-n.

Az alkalmazási váz egy általános alkalmazási környezetet biztosít a WWW,Internet, és mobiltelefonos technológiák kombinációjából, többek között akövetkezo szolgáltatásokat nyújtja:

• WAE/WTA User Agent – WAE egy mikro-böngészo környezet, melytámogatja a WML-t, XHTML-t, több stílusleíró nyelvet, valamint szk-riptek futtását és telefonos szolgáltatásokat.

• Push – általános módszert biztosít arra, hogy a hálózat adatátviteliszolgáltatást kezdeményezzen a területén lévo mobilok számára

• Multimedia Messaging – multimédiás adatok átvitelét és feldolgozásátbiztosítja (pl.: email)

• Content Formats – támogatást biztosít több jól definiált adatforma szá-mára, pl.: képek, hang, videó, telefonkönyvsorok, . . . stb.

A biztonsági szolgáltatások a WAP architektúra alapveto szolgáltatásai közétartoznak. A legtöbb rétegben megtalálhatóak valamilyen formában.

• Cryptographic Libraries – az alkalmazási környezet tartalmazza ezenmodulokat az adat aláírására.

• azonosítás – a HTTP és a TLS protokollok által kínált eljárásokat biz-tosítja.

Page 82: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

82 FEJEZET 9. WAP

• személyazonosság (identity) – WIM (Wireless Identity Module) modulbiztosítja azokat a metódusokat, melyek segítségével tárolhatjuk ésfeldolgozhatjuk a felhasználó személyazonosságát érinto adatokat.

• PKI – a modul támogatja a nyilvános kulcsú titkosítási algoritmusokhasználatát.

• biztonságos átvitel – a WTLS (Wireless Transport Layer Security) a data-grammokon, míg a TLS a kapcsolatorientált részen keresztül biztosítjaa titkosítást.

A szolgáltatás felderíto szolgáltatás a WAP architektúra egy alapveto része,mely a titkosításhoz hasonlóan a legtöbb rétegben megtalálható.

• EFI – Az EFI (Extrenal Functional Interface) segít egy alkalmazásnak,annak megállapításában, hogy milyen külso szolgáltatások vannak azeszközön,

• ellátás (provisoning) – ellátja az klienst a hálózati eszközök eléréséhezszükséges paraméterekkel.

• böngészés felderítés (Navigation Discovery) – segít felderíteni az újhálózati szolgáltatásokat böngészés közben.

• szolgáltatás felderítés (Service Lookup) – a keresett név segítségévelkereshetjük a szolgáltatás paramétereit, pl.: DNS

A következo fejezetben a WML nyelvvel ismerkedünk meg, mely a megje-lenítéssel, felhasználói akciók kezelésével foglalkozik.

Page 83: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

9.2. WML 83

9.2. WML

A WML (Wireless Markup Language) a WAP architektúra által biztosítottMicro Browser segítségével jelenítheto meg mobil készülékeken. A WML-ben készült oldalakat kártyacsomagnak (Deck), míg az egyes oldalrésze-ket kártyáknak (Card) nevezzük. A felhasználó tulajdonképpen egy-egykártyát lát a képernyojén. A WML oldalak nem különböznek túlzottan aHTML-ben megírt oldalaktól, ugyanúgy jelöloelemeket használnak, csak anyelvtan szigorúbb, az XML-hez hasonlóan. Az oldalakat tartalmazó fájlokkiterjesztése általában .wml. A WML elemek foleg szöveg kezelésére van-nak kiélezve, táblázatok és képek használata nem ajánlott. A kis és a nagybetuk különbözoek (az XML hagyományait követve). A kártyacsomagot,a benne lévo összes kártyával a mobil készülék egyszerre tölti le, majd afelhasználó ezek között böngészhet. A WML oldal felépítése a következo:

• az elso sorban definiálni kell a használt XML verziót.

<?xml version="1.0"?>

• a második sorban definiálni kell a használt DTD-t.

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN""http://www.wapforum.org/DTD/wml_1.1.xml">

• a következo résznek pedig <WML > elemek között kell lennie.

<wml> <card id="FC" title="Első Kártya"><p>Helló Világ !</p></card></wml>

A 9.1 ábrán látható a fenti sorokból összeállított oldal. A WAP oldal megte-kintésére több mód van.

Page 84: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

84 FEJEZET 9. WAP

9.1. ábra. Egy egyszeru WML oldal

<?xml version="1.0"?><!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN""http://www.wapforum.org/DTD/wml_1.1.xml"><wml><card title="Formázás"><p>egyszeru<br/><em>kiemelt</em><br/><strong>eros</strong><br/><b>vastag</b><br/><i>dolt</i><br/><u>aláhúzott</u><br/><big>nagy</big><br/><small>kicsi</small></p></card></wml>

Mi a Nokia Mobile Internet Toolkit-et használtuk. Ritkán fejlesztenekcsak WAP oldalakat, gyakrabban alkalmazzák az XML-t, mint adatdefi-niáló nyelvet és egy XSL séma segítségével az aktuális böngészotol füg-goen WML-re vagy más megfelelo nyelvre transzformálják. Egy erre alkal-mas eszköz a Cocoon, mely a http://wilma.cab.u-szeged.hu:8080/cocoon/ címen

Page 85: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

9.2. WML 85

9.2. ábra. Szövegformázások

a kabinetben is elérheto. Szöveg formázásra a példában látott utasításokhasználhatóak. Táblázatot a< table >< tr >< dt > elempárokkal hozhatunklétre. Az igazítást a < table > elem align tulajdonságával adhatjuk meg L,R, C értékekkel. A WML az < anchor > elem segítségével hivatkozásokat iskezel, a következo tulajdonságokkal rendelkezik:

• feladat (task) – go, refresh, prev e funkciók közül választhatunk a hivat-kozás elérési útjának megadásakor.

• cím – A kiírandó címet adhatjuk meg.

• gyors-billentyu (access key) - megadhatjuk, melyik billentyu lenyomá-sára aktiválódjon a link

Egy kártyacsomag több mint egy kártyát tartalmazhat, ezek között is köz-lekedhetünk az < anchor > elem segítségével.

Page 86: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

86 FEJEZET 9. WAP

<?xml version="1.0"?><!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN""http://www.wapforum.org/DTD/wml_1.1.xml"><wml><card id="elso" title="Elso"><p>Az elso kártya <br/><anchor title="Link">A másodikra!<go href="#masodik"/></anchor></p></card><card id="masodik" title="Második"><p>A második kártya.<anchor title="Link">Az előző!<go href="#elso"/></anchor></p></card></wml>

9.3. ábra. Hivatkozások

A WML is biztosítja a felhasználók által bevitt adatok kezelését. Két elem-típus áll rendelkezésünkre az input és a select elem. Az input elem egyszövegbeviteli objektumot valósít meg. Megadhatjuk a bevitt szöveg for-mátumát a format tulajdonsággal. A felhasználó böngészoje e beviteli maszk

Page 87: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

9.2. WML 87

szerint ellenorzi a bevitt szöveg helyességét. Amennyiben nem helyes a be-vitt szöveg, a böngészo ezt jelzi a felhasználónak. Az input elem fobbtulajdonságai:

• név (name) – a beviteli elem neve, kötelezo.

• érték (value) – az alapértelmezett értéket adhatjuk meg, opcionális.

• típus (type) – a megjelenítési módját adhatjuk meg (text|password).

• formátum (format) – a beviteli, érvényesítési maszkot adhatjuk meg akövetkezo karakterek segítségével:

– A – minden nagybetut engedélyez.– a – minden kisbetut engedélyez.– N – minden számot engedélyez.– X – minden nagybetut és számot engedélyez.– x – minden kisbetut és számot engedélyez.– M – mindent engedélyez.– *f – bármennyi f típusú karaktert engedélyez (itt f a fenti értékeket

veheti fel).– nf – n darab f típusú karaktert engedélyez (itt f a fenti értékeket

veheti fel).– \C – a C vagy bármely más karaktert beilleszti az adott helyre.

pl.: NNNNN\-NNN

• cím (tite) - cím.

• sorrend (tabindex) – a tabulátorsorrendben elfoglalt hely.

A select elem a HTML-ben megismert módon viselkedik, ill. hasonló tulaj-donságai vannak. A különbség annyi, hogy itt rendelkezhet egy optgroupelemmel, mellyel az options elemek csoportokra bonthatók.

<?xml version="1.0"?><!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN""http://www.wapforum.org/DTD/wml_1.1.xml"><wml><card id="elso" title="Első"><p><select name="csoport"><option value="1">Elso csoport</option><option value="2">Második csoport</option></select></p></card></wml>

Page 88: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

88 FEJEZET 9. WAP

9.4. ábra. Választó

Definiálni tudunk beviteli elemcsoportokat a fieldset elem segítségével. Hasz-nos feladatokat láthat el a Timer elem, mely segítségével a lap betöltése utánbeállított ido elteltével megadott esemény következik be.

<?xml version="1.0"?><?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTDWML 1.1//EN""http://www.wapforum.org/DTD/wml_1.1.xml"><wml><card ontimer="wml1.wml"><timer value="30"/><p>Ez 30 másodpecig látható utána alegelsö példának megfelelö oldal töltodik be</p></card></wml>

Tudunk változókat is deklarálni, melyek segítségével adatokat vihetünkát egyik kártyáról a másikra, ill. az adott kártyákon lévo beviteli elemekértékeire hivatkozhatunk.

Page 89: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

9.2. WML 89

9.5. ábra. Timer

<?xml version="1.0"?><!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN""http://www.wapforum.org/DTD/wml_1.1.xml"><wml><card id="c1"><p><select name="evfolyam"><option value="3">Harmad éves</option><option value="4">Negyed éves</option></select><a href="#c2" title="Tovább">Tovább</a></p></card><card id="c2"><p>Az elözö oldalon a $evfolyam.évfolyamot választottad ki</p></card></wml>

A példákból kiderült, hogy a WAP/WML páros az igen korlátozott leheto-ségek ellenére is hatékony eszköz lehet. Több fontos funkciót nem tár-gyaltunk terjedelmi okok miatt. Aki szeretné jobban megismerni a mobil

Page 90: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

90 FEJEZET 9. WAP

Internet világát, sok hasznos információt talál a WML-rol a NOKIA WMLreference [26] kiadványában, valamint a www.forum.nokia.com címen.

Page 91: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

II. rész

Dinamikus tartalom

91

Page 92: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,
Page 93: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

10. fejezet

Bevezeto

A statikus weboldalak igen fontos szerepet töltöttek be a WWW szolgál-tatásaiban az Internet hoskorában. Ma azonban nagyon sok olyan feladatlétezik, melyeket nem lehet, vagy nem célszeru statikus oldallal megoldani.A cégek adataikat többnyire adatbázisokban tartják. Ezekbol az adatbázi-sokból le lehet ugyan képezni az adatokat különbözo eljárásokkal statikusoldalakra, azonban ez több olyan problémát is felvet, mely az információközzétételének ezen módját kizárja a lehetséges megoldások közül. Vannakolyan egyszeru feladatok is, melyek ugyancsak szükségessé teszik a szerveroldali programfuttatást. Ilyen lehet például egy egyszeru letöltés-számlálóaz adott oldalon, de lehet például egy internetes portál friss hírek rovata,mely igen gyakran frissül. Ezért nem érdemes statikus weboldalként ke-zelni. A dinamikus weboldal egyik változata, mely kliensoldali programok(client-side scripts) segítségével kommunikál a felhasználóval. Ilyen feladatlehet például egy a felhasználó által kitöltött kérdoív elemeinek ellenorzésea szerver bevonása nélkül, de ide tartozhat a webes számológép is. Mi kétkliensoldali programozási technológiával fogunk megismerkedni, melyekigen hasonlóak és mindketto egy-egy elterjedt programozási nyelv egysze-rusített változata. Ezek a JavaScript és a VBScript. Szerver oldalon a tartalomfrissítését korábban a CGI (Common Gateway Interface) technológiával oldot-ták meg, ma erre sokkal fejlettebb eszközök vannak. A PHP, ASP, JSP,XSP mindegyikét részletesen meg fogjuk ismerni. Ma a vállalatok olyankomplex weben alapuló rendszereket használnak, melyek igen eroteljesenhasználják a Java nyelvet és a nyelvet támogató servlet technológiát. EzértJava technológiát külön kiemeljük és részletesen foglalkozunk vele.

93

Page 94: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

94 FEJEZET 10. BEVEZETO

Page 95: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

11. fejezet

Szkript nyelvek

A programozási nyelveket feloszthatjuk magas és alacsony szintu nyel-vekre. Az alacsony szintueket gépi nyelveknek is nevezik. A számítógépekaz alacsony szintu nyelveket közvetlenül tudják futtatni, a magasabb szintunyelvekben készült programokat azonban elobb le kell fordítani egy a szá-mítógép számára érthetobb alacsony szintu nyelvre. A magas szintu nyel-vek elonye, hogy segítségükkel sokkal könnyebb feladatokat megoldani. Amagasabb szintu nyelven megírt programok kevésbé platformfüggok, mintaz alacsony szintuk. Napjainkban a legtöbb feladatot magas szintu nyel-ven megírt programok oldják meg, melyek futtatása két módon lehetséges:fordító vagy interpreter segítségével. Az elso esetben a teljes programotlefordítják alacsony szintu programra és azt futtatják. A második esetbenegy interpreter olvassa be futtatáskor a programkódot és azt lefordítva fut-tatja. A szkript nyelvek az utóbbi csoportba tartoznak. A következokbenkét népszeru szkript nyelvet tekintünk át: a Perl-t és a Python-t.

95

Page 96: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

96 FEJEZET 11. SZKRIPT NYELVEK

11.1. Perl

A Perl (Practical Extraction and Report Language) nyelv egy betöltéskor fordí-tott interpreted - nyelv. Eredetileg rendszeradminisztrációs feladatok meg-könnyítésére írta Larry Wall. A nyelv egyszeruen elsajátítható, mert nemkell az egész nyelvet ismernünk, viszonylag kis rész ismerete is elég a hasz-nálatához. Ismert nyelvek elemeit tartalmazza, mindent azonnal ki lehetpróbálni (nem kell lefordítani . . . ). Az 5-ös verziótól kezdve ObjektumOrientált eszközök használatát is támogatja. A Perl program egy egyszeruszövegfájl. A "#" karaktert használja a megjegyzések jelölésére. Az elsosorban a szkript interpreterét határozza meg. Ha ez nem lenne ott, akkor aperl <programnév> paranccsal lehetne lefuttatni. Az utasítást mindig egy ";"zárja be. A szövegek egy C programhoz hasonlóan, itt sem tartalmaznakimplicit sorvége jelet - ezt a megszokott módon nekünk kell kiírni.

#!/usr/local/bin/perlprint "Hello World!!!\n";

Három alapveto adatstruktúra található a nyelvben: skalár, skalároktömbje és az asszocitív tömb. Ezeket mutatókkal is lehet kombinálni, ígylényegében mindenféle adatstruktúrát megalkothatunk. A normál tömbökindexe - általában - 0-val kezdodik. Az asszociatív tömböket szövegekkelkell indexelni.

A változó nevének elso karaktere határozza meg annak típusát:

$ skalárokat jelöl@ számmal indexelt tömböket jelöl% asszociatív tömböket jelöl

$napok ="Kedd"; # egyszerű skalár$szam = 100; $napok[3]; # napok nevu tömb negyedik eleme@napok; # az egész tömb ($napok[0], .. , $napok[$#napok])$napok’Kedd’; # napok nevű asszociatív tömb egy eleme%napok; # az egész asszociatív tömb (kulcs, érték párok)$#napok; # napok tömb utolsó indexe

A változókat futás közben értékeli ki, hogy eldöntse a típusukat. A változókés az egyéb utasítások kód blokkokban helyezkednek el. Egy-egy ilyenblokkot kapcsos zárójel határol. Néhány példa:

Page 97: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

11.1. PERL 97

{$i = 100}while(feltétel) {... végrehajtja a kódot ha a feltétel igaz;}

until(feltétel) { # a while ellentéte... végrehajtja a kódot amíg feltétel hamis;}

do {... végrehajtja ezt legalább egyszer ...... megáll ha feltétel igaz ...} while(feltétel);

do {... végrehajtja ezt legalább egyszer ...... megáll ha feltétel hamis ...} until(feltétel);

if (feltétel1) {feltétel1_kód igaz;} else {... nincs igaz a feltétel1 és feltételN között;}

if (feltétel1) {... feltétel1_kód igaz;} elsif (feltétel2) {feltétel2_kód igaz;....} elsif (feltételN) {feltételN_kód igaz;} else {... nincs a feltételek között igaz;}

unless (feltétel1) { # ellentéte az "if" kapcsolónak.... ha hamis akkor ezt végrehajtja;}

Kód blokkok egymáson belül is létrehozhatóak. Azok a változók, melyeketaz ilyen kód blokkokban deklarálunk, globális változók, kivétel ez alól a myvagy local szóval kezdodo változó deklaráció. Ilyenkor a változó az adottblokkban és az azon belüli blokkokban látszik. A a Perl interpreter meg-próbál mindent kiértékelni, ami nincs idézojelben. A Perl három idézojeletkülönböztet meg:

• dupla idézojel " – karakterláncok határolására használjuk, a Perl inter-preter kiértékel minden skalárt, mely ilyen idézojelben van.

Page 98: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

98 FEJEZET 11. SZKRIPT NYELVEK

• egyszres idézojel ’ – a Perl interpreter az egyszeres idézojelben levotartalmat nem értékeli ki.

• egyszeres vissza idézojel ‘– segítségével a shell programban értéketadhatunk egyes változóknak.

Példa:

1 #!/usr/bin/perl2 $a="100";3 print "\$a = $a \n";4 print ’\$a = $a \n’;5 print "\n\n BEEP! \a \LNÉHÁNY ÜRES \ESOR ITT \n\n";6 $datum = date +%D;7 print "Ma [$datum] \n";8 chop $date;9 print "Dátum a carriage return levágása után:[".$datum."]\n";

Az eredmény:

$a = 100\$a = $a \n

BEEP! néhány üres SOR ITT

Ma [02/04/2002]Dátum a carriage return levágása után:: [02/04/2002]

A második sorban egy karakterlánc értéket ad az $a változónak. A vál-tozót nem kell külön deklarálni, mivel az elso használatnál ez megtörténik.A harmadik sorban kiíratjuk a $a változó értékét dupla idézojelben. A ne-gyedik sorban a Perl nem értékel ki semmit, kiírja a tartalmat. A hatodiksorban az idézojelek között találjuk meg azt, amit a parancs sornál begépel-nénk. A Perl támogatja a tömbök kezelését, hogy lehetové tegye az adatokcsoportosítását. Két tömb típust használhatunk. Az egyikben az elemekszámokkal, a másikban szöveggel vannak indexelve. Mint már láthattuk,az egyszeru tömbök nevét a @ jellel kezdjük. Egy példa az egyszeru tömbökhasználatára:

1 #!/usr/bin/perl2 @t1 = (10,24,39);3 @t2 = (’monitor’, ’egér’, "port");4 $a = 1; $b = 2; $c = ’3’;5 @t3 = ($a, $b, $c);

Page 99: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

11.1. PERL 99

A tömbök másik típusát az asszociatív tömbök képezik. Az asszociatívtömb tulajdonképpen egy egyszeru tömb indexenként két elemmel. Azelso elemet kulcsnak(key), a másodikat értéknek nevezik. Az asszociatívtömbben a kulcsok segítségével tudjuk az értékeket elérni. A következopéldában az asszociatív tömb kezelését nézzük át:

1 #!/usr/bin/perl6 %subscripts = (7 ’bmp’, ’Bitmap’,8 "cpp", "C++ Source",9 "txt", ’Text file’ );11 $bm = ’asc’;12 $subscripts{$bm} = ’Ascii File’;14 print "\n ==================== \n";15 print %subscripts;17 print "\n =========== foreach ========= \n";18 foreach $key (keys (%subscripts)) {19 $value = $subscripts$key;20 print "Key = $key, Value = $value \n";}23 print "\n === foreach sort ========= \n";24 foreach $key (sort keys (%subscripts)) {25 $value = $subscripts$key;26 print "Key = $key, Value = $value \n";}29 print "\n =========== each() ========= \n";30 while (($key,$value) = each(%subscripts)) {31 print "Key = $key, Value = $value \n";}

Egy subscripts nevu asszociatív tömböt hoztunk létre a 6.-tól a 9. sorig.Listaként három elempárt adtunk hozzá. A 11. sorban egy új elemetcsatoltunk, hozzárendelve a $bm változót a kulcshoz és értéket adva az újelemnek.

Page 100: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

100 FEJEZET 11. SZKRIPT NYELVEK

====================txtText filecppC++ SourceascAscii FilebmpBitmap=========== foreach =========Key = txt, Value = Text fileKey = cpp, Value = C++ SourceKey = asc, Value = Ascii FileKey = bmp, Value = Bitmap

=== foreach sort =========Key = asc, Value = Ascii FileKey = bmp, Value = BitmapKey = cpp, Value = C++ SourceKey = txt, Value = Text file

=========== each() =========Key = txt, Value = Text fileKey = cpp, Value = C++ SourceKey = asc, Value = Ascii FileKey = bmp, Value = Bitmap

A 17. sorban a foreach utasítás segítségével végigmegyünk a tömbön. Akeys() függvény visszaadja a kulcsok listáját. A 23. sorban hasonló módonvégigmegyünk a tömbön, csak itt eloször sorba rakjuk tartalmát a sort() füg-gvény segítségével. Sokkal hatásosabb az each() függvény használata, mertitt csak egy ciklus kell az elem értékének és kulcsának kinyeréséhez. A 30.sorban a $key elem az each() függvény által visszaadott elso értékkel, míga $value a második értékkel kerül összehasonlításra. Amikor Perl nyelventömbökkel dolgozunk, tulajdonképpen listákat használunk. Elvehetünk,hozzáadhatunk elemeket a listákhoz. A következo példában a 17. sorbanmegfigyelhetjük, hogy milyen egyszeru módon megoldható egy tömb ele-meinek kiíratása. A Perl veszi a @words tömb egyes elemeit, majd ezeket$i értékéül adja. A 38.-as sorban a @x és @y tömb elso két értékét kapjaértékül. A tömb többi eleme változatlan marad.

Page 101: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

11.1. PERL 101

1 #!/usr/bin/perl6 $a = ’RFI’;7 $b = ’UPS’;8 $c = ’SPIKE’;10 @words = (’DC’,’AC’,’EMI’,’SURGE’);12 $count = @words;17 print "\n \@words = ";18 for $i (@words) {19 print "[$i] ";20 }22 print "\n";26 for ($i=0;$i<$count;$i++) {27 print "\n Words[$i] : $words[$i];";28 }32 print "\n";33 print "=" x 40;34 print "\n";38 ($x,$y) = @words;39 print "x = $x, y = $y \n";40 ($w,$x,$y,$z) = @words;41 print "w = $x, x = $x, y = $y, z = $z\n";43 ($anew[0], $anew[3], $anew[9], $anew[5]) = @words;45 $temp = @anew;50 print "=" x 40;51 print "\n";53 print "Az elemek száma az anew-ben = ". $temp, "\n";54 print "Utolsó index = ". $#anew, "\n";55 print "Az új Anew tömb: ";56 $j = 0;57 for $i (@anew) {58 print "\n $anew[$j] = is $i ";59 $j++;60 }61 print "\n";

A tömbök után tekintsük át a fájlkezelést. Fájlokat az open(kezelo,"fájl név")utasítással tudunk megnyitni a következo paraméterekkel:

• open(elsof,"teszt.dat") – megnyitja a fájlt olvasásra, ekkor a megnyi-tandó fájlnak léteznie kell, ha hibakezelést is akarunk végezni, akkorazt a következo módon tudjuk megoldani:

open(elsof,"test.dat") || die "\n $0 Nem tudom megnyitni $! \n";

• open(elsof,">teszt.dat") – megnyitja a fájlt írásra, ha még nem létezett,létrehozza, ha már létezett megsemmisíti és létrehozza.

Page 102: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

102 FEJEZET 11. SZKRIPT NYELVEK

• open(elsof,">>teszt.dat") – megnyitja a fájlt írásra, ha még nem léte-zett, létrehozza, ha már létezett hozzáfuzi.

• open(elsof,"+ >teszt.dat") – megnyitja a fájlt írásra, olvasásra, ha mégnem létezett létrehozza.

Fájlba írni a print elsof "Ezt irjuk be" paranccsal tudunk. Ha több fájlunk isnyitva van írásra, a print parancsok elott kiadott select parancsokkal tudunkcélt változtatni. Pl.:

open(elsof,">test.dat");open(masodikf,">test1.dat");select elsof;print "Ez az elsof fájlba kerül";select masodikf;print "Ez az masodikf fájlba kerül";

A Perl nyelv nagyon eros karakterlánc kereso, cserélo függvényekkel ren-delkezik. Egy karakterlánc keresésére az alábbiakban láthatunk egy példát:

if ($a = /"menu"/) {print "\n Megvan a menu szó ! \n";}

Egy karakterlánc kicserélése a szövegben:

$expr = s/"régi"/"új"/gie

A g, i, e paraméterek opcionálisak. Ha g nem szerepel, akkor csak az elsoelofordulás lesz kicserélve, az i betu a case insetnsitive módot jelöli. Az ebetu tudatja a Perl-lel, hogy az új karakterláncot, mint Perl kifejezést kellértelmeznie.

11.1.1. Alprogramok

Egy alprogramot nem kell elore deklarálni ahhoz, hogy használhassuk. Azalprogramoknál a paraméterlistát sem kell deklarálni, mert ez változhat.A hívott alprogram a paramétereket a @_ listán keresztül kapja meg. Azalprogram utolsó utasításának értéke lesz a visszatérési érték, hacsak nincsegy return utasításban más megadva.

Page 103: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

11.1. PERL 103

sub max {my $max = pop(@_);foreach $elem (@_) {$max = $elem if $max < $elem;}$max;}

Alprogram hívása:

&NEV; az aktuális @_-t adja tovább&NEV(LISTA); Ha &-t írunk, akkor () kötelezoNEV(LISTA); & elhagyható ha van () vagy már deklaráltNEV LISTA; () elhagyható, ha a NEV már deklarált

Alprogram hívása akkor megy ilyen egyszeruen, ha az ot tartalmazó mo-dulban látható. Ha ettol eltéro modulban lett deklarálva, akkor modulhi-vatkozással, vagy valamilyen objektum-orientált technikával kell meghívnia kívánt eljárást (ld. késôbb).

$m = &max(1,2,3); a hatás ugyan az$m = max 1 2 3;

11.1.2. Modulok

A Perl nyelv lehetoséget ad különbözo láthatósági körök használatára. Eze-ket moduloknak nevezzük, amelyeket a package kulcsszó vezet be. A pac-kage hatása az adott blokk végéig, vagy a következo package-ig tart. Azújrahasználható kódunkat modulokban tárolhatjuk. Célszeru olyan modu-lokat kialakítani, melyek egy adott feladatot ellátó függvényeket gyujtenekössze. Változóink neveit a Perl egy asszociatív tömbben tárolja, melyetszimbólumtáblának nevezünk. Egyszeru nevu globális változókat ne hasz-náljunk modulok nélkül. Modulokkal lehetoségünk van ugyanazt az egy-szeru változónevet többször felhasználni. A változók alapértelmezésben afo csomagba tartoznak(main package). A csomagok közötti váltás tulajdon-képpen a szimbólumtáblák cseréjét jelenti. A helyi változókat (my) nemérinti a váltás. Az egyes csomagokba levo változókra az alábbi módonhivatkozhatunk:

csomag_neve::valtozo_neve

Page 104: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

104 FEJEZET 11. SZKRIPT NYELVEK

A modulok egymásba is lehetnek ágyazva, ekkor a címzés hasonló, csaka modulneveket két kettosponttal elválasztva kell a kifejezés elejére írni.Ilyen egymásba ágyazott moduloknál mindig a teljes útvonalat kell sze-repeltetni a kifejezésben. Egy modulban lévo nevekhez a use modulnévkulcsszóval férhetünk hozzá. A modulokat implementáló fájlokat a @INCáltal megadott könyvtárakban keresi a rendszer.

11.1.3. Objektum Orientált Programozás Perl-ben

Egy objektum csak egy egyszeru referencia, amely történetesen tudja, hogymelyik osztályhoz tartozik. Egy osztály egy package, amely tudja az ob-jektum hivatkozásokat kezelni és van némi támogatása az öröklésre. Ametódus egy egyszeru alprogram, amelynek elso paramétere egy objektumreferencia vagy egy package-név lesz. Az objektum bármilyen referencialehet, ami rendelkezik azzal a információval, hogy hol jött létre:

package ValamiUj;sub new bless # 1. verziósub new { # kicsit bonyolultabban...my $self = {};bless $self;$self->initialize();return $self;}

A referencia általában egy asszociatív tömb, amely aztán az objektum sajátkis szimbólum táblájaként szolgál. Az objektumokat újra meg lehet áldani.Ekkor az objektum az új osztályba kerül, az eredeti osztályát "elfelejti", hiszegy objektum egyszerre csak egy osztályhoz tartozhat. Az osztály egy pac-kage. Nincs külön jelölés arra, hogy ez egy osztály, sot még az inicializálóeljárást sem kell new-nak hívni. Egy osztályban csak a metódusok örök-lésére van támogatás az @ISA tömbön keresztül. Ez egy modul nevekettartalmazó tömb. Ha egy metódus nem található meg az aktuális package-ban, akkor az ebben a tömbben felsorolt modulok lesznek bejárva a hiányzóalprogramért. Ez egy mélységi keresés lesz. Ha itt sem talál semmit és vanegy AUTOLOAD nevu függvény, akkor megpróbálja ezzel elokeresni a hi-ányzó eljárást. Ha ez a lehetoség sem járt sikerrel, akkor egy UNIVERSAL-nak nevezett modulban keres a rendszer. Az @ISA tömb szépsége az, hogymenet közben is lehet módosítani, azaz menet közben megváltoztathatjukegy osztály leszármazási fáját! Nyilvánvalóan az adattagok öröklésére isszükség van egy objektum-orientált nyelvben, ez a Perl-ben az @ISA tömbsegítségével megvalósítható.

Page 105: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

11.1. PERL 105

package A;sub new {my $type = shift;my $self = ;$self->’a’ = 42;bless $self, $type;}package B;@ISA = qw( A ); # A a B ososztályasub new {my $type = shift;my $self = A->new;$self->’b’ = 11;bless $self, $type;}package main;$c = B->new;print "a = ", $c->’a’, "\n";print "b = ", $c->’b’, "\n";

Metódusokra nincs külön jelölés, kivéve a destruktorokat. Alapvetoenkétfajta metódus van:

• statikus metódus – Ez elso paraméterében az osztály nevét kapja meg:

package ValamiUj;sub holvagyok {my ($neve) = @_;print "holvagyok: $neve\n";}

Ez a következoképpen hívható:

ValamiUj->holvagyok();

• "rendes" metódus – Ez az elso paraméterében egy referenciát vár.

Page 106: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

106 FEJEZET 11. SZKRIPT NYELVEK

package ValamiUj;sub new {my $self = ;bless $self;$self->elso = 1; # ez "elso"-vel egyenértékü$self->ize = 42;return $self;}sub kiir {my $self = shift;my @keys = @_ ? @_ : sort(keys(%$self));foreach $key (@keys) {print "\t$key => $self->$key\n";}}

És ennek hívása:

use ValamiUj;$obj = ValamiUj::new();$obj->kiir(); # C++ stíluskiir obj "elso"; # "print" stílus

A Perl nyelvet egyszeru feladatok ellátására célszeru felhasználni. Ritkánhasználjuk az objektum orientált lehetoségeit. A mintailleszto képességétés az asszociatív tömbjeit használjuk leggyakrabban. A 12. fejezetbenláthatunk egy példát, amikor CGI szkriptként használjuk.

Page 107: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

11.2. PYTHON 107

11.2. Python

11.2.1. Bevezeto

A Python programozási nyelvet Guido van Rossum 1989-ben kezdte el írni.A nyelv nevét a 70-es években közismert "Monty Python’s Flying Circus" BBCkomédia sorozat alapján választotta. A nyelvet létrehozásakor azon Unixfelhasználóknak szerette volna írni, akik C programozási nyelvhez szoktak;de más nyelvekhez és fejlesztési környezetekhez is könnyen csatlakoztatóvászerette volna tenni. Most tíz év eltelte után egy objektum-orientált, hibákatkezelo, dinamikus adattípusokat alkalmazó, rendszerhívások számtalan le-hetoségét kezelo, hatalmas könyvtárkészlettel rendelkezo és számos ablakrendszert támogató nyelvvel állunk szemben. A nyelvet 1991 óta az Inter-neten fejlesztik. A Python-ban írt programok futtathatók parancssorból ésszkriptként is. A Python kódot tartalmazó fájlok kiterjesztése általában .pyszokott lenni.

11.2.2. Változók

A Perl-tol eltéroen a változókat nem kell megjelölnünk, egyedüli kikötésaz, hogy a név nem lehet a 28 foglalt szó között. Változóinknak nem kelltípust definiálni, mivel ez az értékadásnál derül ki. A Python minden elemeobjektum, mely rendelkezik identitással, típussal és értékkel. Az identi-tás az objektum létrehozása után többé nem változik. Az ‘is’ operátorralhasonlíthatjuk össze két objektum identitását, az id() metódus pedig vissza-adja egy objektum identitását (a jelenlegi implementációban ez az objektumcíme). Egy objektum típusa is állandó az objektum élete alatt. Ez határozzameg, hogy az objektum milyen muveleteket támogat, milyen tulajdonsá-gokkal rendelkezik, ill. az objektum lehetséges értékeit. Az objektumokértéke az típusától függoen változhat. A változtatható értéku objektumo-kat mutábilis, a nem változtathatóakat pedig immutábilis objektumoknaknevezzük. Néhány objektum tartalmazhat referenciát más objektumokra.Ezeket összefoglaló néven konténer típusoknak nevezzük. Ilyen pl. a lista,a vektor, a szótár. A következo típusokat használhatjuk:

• None – Ennek a típusnak egyetlen értéke van. Csak egy objektumvan ilyen értékkel, amit a beépített None névvel érhetünk el. Az értékhiányának jelölésére használják (pl. egy olyan függvény, ami nem advissza értéket). Igazságértéke hamis.

• Ellipsis - Hasonlóan a None-hoz, a típusnak egyetlen értéke van, éscsak egy objektumnak van ilyen értéke, ami a beépített Ellipsis névvelérheto el. Igazságértéke igaz..

• Szám - A numerikus objektumok értékeit megváltoztathatjuk (mu-table).

Page 108: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

108 FEJEZET 11. SZKRIPT NYELVEK

– Egész (integer)

∗ plain integer – egy gépi szó méretén ábrázolható egész szá-mok.

∗ long integer – az egész számok tényleges megvalósítása.

– Lebegopontos számok

∗ float – géptol függo dupla-pontosságú lebegopontos szá-mok. A határok és a túlcsordulás kezelése a C implementá-ciótól és a gép architektúrájától függ.

– Komplex szám

∗ complex – két float számpárral van megvalósítva.

»> 1j * 1J(-1+0j)»> 1j * complex(0,1)(-1+0j)»> 3+1j*3(3+3j)»> (3+1j)*3(9+3j)»> (1+2j)/(1+1j)(1.5+0.5j)»> a=1.5+0.5j»> a.real1.5»> a.imag0.5

• Sorozat (Sequence) – Véges természetes számokkal indexelt rendezetthalmazok reprezentációja. A sorozat i-dik eleme: a[i]. Sorozatokonértelmezve van a szeletelés (slicing): a[i:j] olyan k indexu elemeksorozata, ahol i <= k < j. Kifejezésben használva a szelet (slice) egyazonos típusú sorozat lesz (az indexelése 0-tól kezdve).

– Nem módosítható sorozat (Immutable sequence) - Létrehozásután az objektum nem változhat.

∗ String – A karakterláncok elemei a karakterek.

Page 109: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

11.2. PYTHON 109

»> gyumolcs = "banán"»> betu = fruit[1]»> print betua»> len(gyumolcs)5»> for char in gyumolcs:print charb...»> gyumolcs[:3]’ban’»> gyumolcs[3:]’\xe1n’A string modult betöltve sok hasznos függvénythasználhatunk:»> import string»> string.find(gyumolcs,"a")1

∗ Vektor (Tuple) – Egy vektor elemei tetszoleges Python objek-tumok lehetnek. Ketto vagy több elemu vektort vesszovelelválasztott listaként adhatunk meg (pl. a = 1, ’hello’,[1,2,3])

»> vektor =’a’,’w’,’23’,34»> vektor[3]34»> vektor[1:114](’w’, ’23’, 34)»> vektor2=1,2,3,4,’sasda’»> vektor,vektor2=vektor2,vektor»> vektor(1, 2, 3, 4, ’sasda’)

– Módosítható sorozat (Mutable sequence)– Egyenlore csak egyet-len módosítható sorozat van:

∗ Lista – Egy lista elemei tetszoleges Python objektumok lehet-nek. Listát kapunk, ha kifejezések vesszovel elválasztott so-rozatát szögletes zárójelek közé tesszük. (pl. [1,’hello’,[1,2,3]])Üres listával nincs semmi kivételezés: [].

Page 110: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

110 FEJEZET 11. SZKRIPT NYELVEK

»> lista=[1,"123",[1,2,3,"elem"]]»> lista[1, ”123”, [1, 2, 3, ”elem”]]»> 1 in lista1»> for a in lista:print a1123[1, 2, 3, ”elem”]»> a = [1, 2, 3]»> b = [4, 5, 6]»> c = a + b»> print c[1, 2, 3, 4, 5, 6]»> lista[1]="3234234"»> del lista[2]»> lista[1,′ 3234234′]

• Leképezés (Mapping) – Tetszoleges indexhalmazbeli elemekkel inde-xelt objektumok véges halmaza.. Jelenleg egy leképezés típus van:

– Szótár (Dictionary) – Kulcsként csak olyan típusértékek jöhetnekszóba, melyek objektum identitás alapján hasonlítódnak össze ésnem érték alapján. A szótár módosítható (mutable). Szótárakatkapcsos zárójelbe téve kulcs:elem -párok vesszovel elválasztottlistájaként adhatunk meg. (pl. 1:[’hello’],2:[’világ’])

»> szotar={"egy":"one","ketto":"two","harom":"three"}»> szotar{’egy’: ’one’, ’harom’: ’three’, ’ketto’: ’two’}»> szotar[”ketto”]’two’»> szotar.keys()[′egy′,′ harom′,′ ketto′]»> szotar.values()[′one′,′ three′,′ two′]»> szotar.items()[(′egy′,′ one′), (′harom′,′ three′), (′ketto′,′ two′)]

• Hívható típus (Callable) – Ezekre a típusokra alkalmazható a függvény-hívás muvelet.

– felhasználó által definiált függvény (user-defined function) –Függvény definícióval (def ) keletkezett függvény objektumok.

– felhasználó által definiált metódus (user-defined method) – Egyilyen objektum magában foglal egy osztályt, egy példányát azosztálynak (vagy None) és egy felhasználó által definiált függ-vényt.

Page 111: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

11.2. PYTHON 111

– beépített függvény (built-in function) – Egy ilyen objektum lénye-gében nem más, mint egy kis csomagolás egy C függvény körül.Az argumentumok számát és típusát a C függvény határozzameg.

– beépített metódus (built-in method) – Ez a beépített függvénytartalmaz egy objektumot, amit extra argumentumként átad a Cfüggvénynek.

• Osztály (Class)

• Osztály példány (Class instance)

• Modul (Module)

• Fájl (File)

11.2.3. Vezérlo szerkezetek

A Python ismeri a többi nyelvben használt legfontosabb vezérloszerkezete-ket. Elágazások:

if feltétel:utasítás ha igaz

Alternatív parancs:

if feltétel:utasítás ha igazelse:utasítás ha hamis

Láncolt feltételek:

if 1feltétel:ha 1feltétel igazelif 2feltétel:ha 2feltétel igaz, 1feltétel hamiselif 3feltétel:ha 3feltétel igaz,2feltétel,1feltétel hamiselse:ha 3feltétel,2feltétel,1feltétel hamis

Ciklusok:

Page 112: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

112 FEJEZET 11. SZKRIPT NYELVEK

While:while kifejezés : utasításFor:for 1kifejezés in 2kifejezés : parancs

11.2.4. Fájlkezelés

Az open(fájlnév,mód) függvény segítségével tudunk fájlokat megnyitni. Fájl-kezelési módok:

• r – olvasásra nyitja meg a fájlt.

• w – írásra nyitja meg a fájlt, ha már létezik a fájl, akkor törlodik.

• a – hozzáfuzésre nyitja meg a fájlt, az adatok automatikusan a végére.íródnak.

• r+ – írásra, olvasásra nyitja meg a fájlt.

A megnyitott fájlból a read(méret) metódus segítségével tudunk adatokatbeolvasni. Ha nincs megadva a méret, az egész fájlt beolvassa. Ha afájl végére ért, akkor üres karakterláncot ad vissza. Sorokat a readline()metódussal lehet beolvasni. A readlines() metódus beolvassa a fájl soraitegy listába. A write(karakterlánc) metódussal lehet egy karakterláncot fájlbaírni. Fájlt a close() metódussal tudjuk bezárni.

»> f=open("pelda.dat","w")»> f.write("1. sor \n")»> f.write("2. sor \n")»> f.close()»> f=open("pelda.dat","r")»> a=f.readlines()»> a[’1. sor \n’, ’2. sor \n’]

11.2.5. Függvények

Függvényeket definiálhatunk a def parancs segítségével. A Fibonacci sortkiszámító függvény:

Page 113: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

11.2. PYTHON 113

»> def fib(n):a,b=0,1while b<n:print b,a,b=b,a+b

»> fib(6000)1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 25844181

A def kulcsszót követnie kell a függvény nevének és paraméterlistájának.A függvény törzsének a következo sorban behúzva kell kezdodnie. Afüggvény belso változói egy új szimbólum táblában vannak eltárolva. Aváltozók neveit a rendszer eloször a lokális szimbólum táblában keresi,ezután a globális szimbólum táblában, majd ha ott sem találta akkor a beé-pített szimbólum táblában. A return segítségével értéket adhatunk vissza.A függvény paramétereinek alapértelmezett értéket is adhatunk.

»> def fib(n=100):a,b=0,1while b<n:print b,a,b=b,a+b

»> fib()1 1 2 3 5 8 13 21 34 55 89

11.2.6. Modulok, Csomagok, Névterek

A Python lehetové teszi, hogy nagyobb terjedelmu szkripteket, program-csomagokat a belso struktúrájának megfeleloen tagoljunk és ezt a program-szövegben is jelezzük. Erre szolgálnak a modulok, amelyek logikailagösszetartozó programrészeket fognak egybe. A modul neve az azt tartal-mazó fájl neve. A modulok kiterjesztése .py, a konvenciónak megfeleloen.Egy modul neve a modulon belül a __name__ modul-globális szimbólu-mon keresztül hozzáférheto. Modulokat más szkriptekbol az import vagyfrom module import * utasításokkal importálhatunk. Az elso forma a teljesmodult, a második a modul bizonyos függvényeit importálja (a ‘*’ helyettvesszovel elválasztott felsorolás is állhat). A második formában a *’ hasz-nálatánál a _’-sal kezdodo függvények nem importálódnak. A modulokállományrendszerbeli keresése a PYTHONPATH környezeti változóban fel-sorolt könyvtárak sorrendjében történik. A struktúra különbözo szintjeit‘.’-tal választjuk el egymástól. A névterek általában láthatósági tartomá-nyokat is jelölnek. A névtér tulajdonképpen név -> objektum leképezések

Page 114: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

114 FEJEZET 11. SZKRIPT NYELVEK

halmaza, jelenleg így is vannak implementálva (szótárakkal). Általánosfelhasználásra szánt programcsomagokat szervezhetünk ún. csomagokbais, melyek tetszoleges mélységu struktúrával rendelkezhetnek.Példa:Miután függvényünket elmentettük a megfelelo könyvtárba fibo.py néven.

»> import fibo»> fibo.fib(100)1 1 2 3 5 8 13 21 34 55 89

Példa:Csomagkezelés, a megfelelo könyvtárstruktúrát felépítve:

Sound/ Top csomag__init__.py Inicializálja a sound csomagotFormats/ Alcsomag a fájlformátumok kezlésére

__init__.pywavread.py...

Effects/ Alcsomag az hatások kezelésére__init__.pyecho.py...

Importálás:»> import Sound.Effects.echo

11.2.7. Objektumorientált Programozás Python-ban

A Python osztálymechanizmusa a már ismert programozási nyelvek (C++,Modula-3) osztálymechanizmusának keverékét megvalósítva, lehetové te-szi az osztályok használatát. Lehetoség van többszörös öröklodésre, aszármaztatott osztály átdefiniálhatja az ososztályainak metódusait, egy me-tódus hívhatja az ososztály metódusát ugyanazon a néven. Az objektumoktartalmazhatnak privát adatokat. Minden osztálytag (az adattagokat isbeleértve) publikus, és minden tagfüggvény virtuális. Nincs speciális kon-struktor vagy destruktor. Nincs lehetoség röviden hivatkozni egy objektumtagjára. Az osztályok maguk is objektumok - valójában a Pythonban mindenadattípus objektum. (Azonban nincs minden objektumnak osztálya! Pl.:fájl, integer, lista,...) Beépített típusokat nem bovíthet a felhasználó (nemörökölhet tolük). A legtöbb beépített operátor újrahasználható osztálytag-ként.

Page 115: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

11.2. PYTHON 115

class Pelda:a=0def f(x)

print "�A metódus�"

A vezérlésnek rá kell futnia az osztálydefinícióra, mielott hatása lenne,így akár egy if-ágban is lehet osztálydefiníció! Az osztálydefiníció végénautomatikusan létrejön az osztály-objektum. Példányosítani úgy tudunk,mintha egy paraméter nélküli függvényt hívnánk meg ( x = Pelda() ). Azadatattributumokra, mint lokális változókra, él az a szabály, hogy nem kelloket elore definiálni: elso használatukkor jönnek létre. Példa:

x = Peldax.ujv = 1while x.ujv < 10:

x.ujv = x.ujv * 2print x.ujvdel x.ujv

Egy osztálynak egyszerre több ose is lehet.

class SzOsztaly(mname.Base1,mname.Base2,...)

Ha egy hivatkozást nem talál az aktuális osztályban, akkor Base1-ben keresi.Ha ott sem, akkor Base1 oseiben. Ezután ha még mindig nem találta, akkorBase2-ben kezdi el keresni és így tovább. Rekord objektumot az alábbimódon hozhatunk létre:

class Dolgozo: pass # ez egy üresosztálydefiníció

John = Dolgozo()John.nev = ’John Cosinus’John.osztaly = ’Matematikai reszleg’John.fizetes = 42000

Page 116: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

116 FEJEZET 11. SZKRIPT NYELVEK

Page 117: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

12. fejezet

CGI

A CGI Common Gateway Interface szabvány lehetové teszi a Web szervekszámára más programok futtatását és a kimenetek szövegbe, hangba vagyvideóba összegezve a kliensre juttatását. Szabványos felületet biztosítvaa CGI lehetové teszi a programozók számára programozási nyelvek szélesspektrumának használatát. CGI programok dolgozhatják fel a kliens általkitöltött urlapokat, számlálhatják az oldalt látogató felhasználókat, ada-tokat kezelhetnek adatbázisokban és több száz egyéb feladatot oldhatnakmeg. A CGI programokat általában szkripteknek nevezik, mert az elso CGIprogramok UNIX shell szkript nyelven (bash, sh) vagy Perl nyelven íródtak.Gyakran használnak azonban C nyelvet is CGI programok írására. A CGIvilág azonban megmaradt a szkript elnevezés mellett. Mielott a szerverlefuttatna egy szkriptet, beállítja a környezeti változókat, melyek a szerverállapotát jellemzik. Minden szkript saját változókörnyezettel rendelkezik,mely a szkript futásának kezdetekor jön létre és a szkript futása után meg-szunik. A szkript futása kezdetén beolvassa a standard bemenetét, majdfutása végén az eredményeket a standard kimenetére írja. Webszervertolfüggoen a CGI szkriptek bármelyik könyvtárban ill. egy speciális könyv-tárban helyezhetoek el. A webszerveren minden egyes kérésre a kérésheztartozó CGI program újra és újra lefut. Az egyes példányok párhuzamosankülön-külön memóriaterületen futnak. Ebbol ered a fájlhozzáféréssel kap-csolatos probléma. A fájl elérésnél figyelni kell a zárolásra és elengedésre.Ez tovább lassítja a végrehajtást. Egy nagyobb forgalmú szerver esetén te-hát komolyan figyelembe kell venni ezeket a jelenségeket. A leggyakrabbanhasznált szkript nyelvek:

• UNIX shell – alkalmasak kicsi, egyszeru projektek alapjaként. Hasz-nálatuk azonban biztonsági kockázattal jár, mert a shell szkriptek ál-talában UNIX parancsok listája.

• Perl – A Perl egy nagyszeru szkriptnyelv, mely alkalmas komplexadatok kezelésére. Szerkezete, nyelvtana mégis könnyen értheto,

117

Page 118: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

118 FEJEZET 12. CGI

könnyen megtanulható. A legtöbb olyan funkció, mely egy C pro-grammal megvalósítható, Perl szkriptel egyszerubben megoldható.Nagy elonye továbbá, hogy a legtöbb platformon megtalálható. Az5-ös verziójától kezdve objektum orientált. A Perl szkriptek kiterjesz-tése általában pl.

• Python – A Python egy objektum orientált szkript nyelv rengeteg hasz-nos függvénnyel. Napjaink egyik legelterjedtebb, legkedveltebb szk-riptnyelve.

• C – segítségével gyors programok írhatóak. Problémát jelent a szab-ványos C nyelv gyenge karakterlánc kezelése. Elonye, hogy szinteminden platformon megtalálható és amennyiben csak szabványoselemeket használunk, lefordítható.

• C++ – az objektumorientált programokra jellemzo módon az egyeselemek itt is könnyen használhatóak több programban.

Egy CGI szkript életciklus a következo állapotokból áll:

• a program elkezdodik

• meghívja a do-initialize függvényt. Az elso, amit egy szkriptnek megkell néznie, az a bemenete, a környezete és az állapota. Az alapvetokörnyezeti változók értékeit operációs rendszertol függo módon kelllekérdeznie. (registry az NT esetén, standard környezeti változókUNIX esetén, . . . stb.) A bemenetét a következo módon vizsgálja:

– megállapítja hogyan történt a meghívás. Ez általában a RE-QUEST_METHOD környezeti változó értelmezését jelenti (ke-resi benne a GET vagy a POST utasítást).

– Mint a 16., 18., valamint a 48. oldalakon bemutattuk, a böngészokét módon tud adatot küldeni a szerver számára (GET, POST).GET függvény esetén a QUERY_STRING környezeti változó érté-kébol kell kiolvasnia az adatokat. POST függvény esetén ellen-orizni kell a QUERY_STRING környezeti változó értékét és aszabványos bemenetét is értelmeznie kell. A CONTENT_TYPEkörnyezeti változó értéke alapján esetleg dekódolni is kell azSTDIN-en található adatokat

• meghívja a do-process függvényt. Itt a céltól függo feladatokat végre-hajtja.

• meghívja a do-output függvényt. A szabványos kimenetre kiírja amegfelelo adatokat. Ez lehet egy HTML oldal kódja, de lehet egy képbináris kódja is.

Page 119: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

12.1. A CGI ALAPVETO ELEMEI 119

• a program befejezodik. A zárolt fájlokat felszabadítja, a memóriát ésaz egyéb lefoglalt eroforrásokat szintén felszabadítja.

12.1. A CGI alapveto elemei

Mint az elozo szakaszban láthattuk, a CGI az információt környezeti változók-ból nyeri, ill. itt tárolja, biztosítva ezzel az információk állandó rendelke-zésre állását mindenki számára. Rendeltetésük szerint három csoportraoszthatjuk a környezeti változókat:Szerver specifikus környezeti változók:

• GATEWAY_INTERFACE – a CGI verziója.

• SERVER_NAME – a szerver IP címe vagy neve.

• SERVER_PORT – az a port, amelyen a szerver a HTTP kérést kapta.(álatlában 80-as)

• SERVER_PROTOCOL – a kérés kezelo protokoll neve és verziója (pl.:HTTP 1.1).

• SERVER_SOFTWARE – A szerver szoftver neve és verziója.

Kérés specifikus környezeti változók:

• AUTH_TYPE – az azonosítás típusa, ha nincs azonosítás, akkor aNULL értéket veszi fel. Bovebben a 18.5 fejezetben olvashatunk róla.

• CONTENT_FILE – az adatokat tároló fájl neve, elérési útvonala.

• CONTENT_LENGTH – az STDIN bemenetre érkezo adat hossza.

• CONTENT_TYPE – az adat típusa.

• OUTPUT_FILE – a kimenetet fogadó fájl (csak windows estében).

• PATH_INFO – relatív útvonal melyet a kérés karakterlánc elé kellilleszteni.

• PATH_TRANSLATED - ugyanaz, mint az elozo, csak a relatív útvonalhelyett itt abszolút útvonalat használunk.

• QUERY_STRING – az adat, mely az URL-ben a ’?’ karakter utánkövetkezett.

• REMOTE_ADDR – a felhasználó IP címe.

• REMOTE_USER – a felhasználó neve, ha volt azonosítás.

Page 120: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

120 FEJEZET 12. CGI

• REQUEST_LINE – a teljes HTTP kérés.

• REQUEST_METHOD – a HTTP kérés típusa.

• SCRIPT_NAME – a CGI neve.

A fenti változók közül a REQUEST_METHOD, QUERY_STRING, CON-TENT_LENGTH, PATH_INFO változókat használják leggyakrabban. Ezekmeghatározzák, hogyan juthatunk az információhoz és milyen típusú azadott információ.

Page 121: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

13. fejezet

Kliens oldali programozás

A Web fejlodésével felmerült az igény a szerverek terhelésének csökken-tésére. A feladatok igen széles skáláját tudjuk a kliens oldalon elvégezni,kezdve a legegyszerubb kérdoív adatainak ellenorzésétol, a külön csatornánlebonyolított titkosított banki tranzakció kezelésig. A böngészo háború mel-lett a másik nagy csata a Java és az ActiveX technológia csatája volt. Azonbana kliens oldali programok lassúsága, böngészofüggése rövid életuvé tettea technológiákat. Az alkalmazás tervezoknek, készítoknek, mérlegelniükkell a különbözo paramétereket, mielott döntenének a program futásánakhelyérol. A felhasználók gyors, könnyen átlátható, könnyen kezelheto,stabilan muködo oldalakat szeretnek használni. Néhány évvel ezelott ahangsúly ezért ismét a szerver oldali megoldásokra terelodött (alkalmazásszerverek). Kliens oldalon azonban megjelent a JavaScript, mely egyszeru,platform-független megoldást ígért kliens oldali programfuttatásra. Az elsoimplementációknál az a paradox helyzet ált elo, hogy a nyelvet egyszeruvolt megtanulni, de nehéz volt használni a hibák és a különbözo verziókinkompatibilitásai miatt. Ma a nyelv letisztult, robosztus és a Web fej-lesztok az utasítások azon halmazát használják, mely a legtöbb böngészonegyformán muködik. A következokben a JavaScript nyelvet és a VisualBasicnyelvet ismerjük meg.

121

Page 122: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

122 FEJEZET 13. KLIENS OLDALI PROGRAMOZÁS

13.1. Javascript

A Java nyelv szélesebb körben ismertté válásával egy idoben a SUN és Nets-cape közösen bejelentett egy másik, a Java-nál egyszerubbnek szánt progra-mozási technológiát, amely szorosan kötodött a Netscape böngészohöz. Eza JavaScript-nek nevezett nyelv a HTML lapok írói számára készült, célja,hogy kevés munkával interaktív funkciókkal lehessen bovíteni a HTMLlapokat. Ily módon nem csak változatosabbá tehetjük a megjeleno informá-ciókat, de az urlapok (forms) kezelésénél a Web szervert is tehermentesít-hetjük. A JavaScript objektum-alapú (object based) nyelvnek nevezheto: le-hetoségünk van objektumok létrehozására, de osztályokat (típusokat) nemdefiniálhatunk. A program szövege kerül interpretálásra. A programoksokkal lassabban futnak és forrásukat a program írója semmiképpen semtudja elrejteni. JavaScript-ben a változóknak nincs eleve elrendelt típusuk,hanem kaméleon módjára változtatgatják azt, attól függoen, hogy éppenmilyen értéket tárolnak. A JavaScript integráns része a HTML lapnak, nemcsak, hogy a teljes program forrása a lapon található, de a dokumentumtöbbi részével is közeli kapcsolatban állnak: közvetlenül hivatkozhatnak alapon lévo elemekre (pl. az urlapok egyes összetevoire), de még a böngészomegjelenését, viselkedését is befolyásolhatják. A Javascript alkalmazásai:

• dinamikus weboldalakat tud generálni (pl.: óra az oldalon).

• reagálni tud az oldalt érinto eseményekre (pl.: a felhasználó rákattintegy elemre).

• átírhatja, megváltoztathatja az egyes HTML elemek tartalmát.

• ellenorizni tudjuk a felhasználó által bevitt adatokat.

A kódot be tudjuk illeszteni a HTML dokumentumba illetve tárolhatjukkülso fájlban is. A HTML dokumentumban definiálhatunk függvényeket,melyek csak a meghívásakor futnak le, valamint írhatunk kódot, mely a lapbetöltésekor fut le.

Page 123: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

13.1. JAVASCRIPT 123

1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">2. <html>3. <head>4. <title>Példa</title>5. <script language="JavaScript" src="kulso.js" type="text/javascript">6. </script>7. </head>8. <body>9. <script language="JavaScript" type="text/javascript">10. <!�11. document.write("Heló Világ!");12. function kiir(a) {13. alert(a);14. }15. //�>16. </script>17. </body>18. </html>

A 6. sorban egy külso Javascript fájlra hivatkozunk. A 9. sorban a törzsbennyitunk egy Javascript kód elemet. A 11. sorban található egy utasítás, melynincs függvényben, így ez végrehajtódik a lap betöltésekor. A 12. sorbandefiniálunk egy függvényt, mely csak akkor hajtódik végre, ha meghív-ják. A sorok végén ";"-nek kell szerepelnie, kivételt ez alól az olyan sorokjelentenek, melyek egyedül szerepelnek a script elemek között.

13.1.1. Változók

Az általunk létrehozott változóknak kis vagy nagybetuvel, esetleg aláhúzásjel-lel kell kezdodni (a-z vagy A-Z vagy _ ), utána betuk, számok és aláhúzásvegyesen szerepelhetnek. Karakterláncot mindig azonos típusú idézojelekközött adjunk meg. A Javascript egy kevéssé kötött nyelv, nem nehéz azátjárás az egyes típusok között, sot a változó típusát sem kötelezo eloremegadni. A változó által tárolt érték a láthatóságtól függoen lekérdezheto,módosítható. Eloször azonban mindenképpen definiálni kell oket.A változók lehetnek :

• numerikus(integer és real) .

• karakter, karakterlánc.

• boolean (true/false) tipusúak.

Változót definiálhatunk a var kulcsszó segítségével(ami a forráskód olvas-hatóságát segíti) és nélküle is (közvetlen értékadással) . Utána mindigpontosvesszo áll. A változók lehetnek globálisak (melyek a definiálás utánmindig láthatók) és lokálisak, ha azt egy függvényben definiáltuk.

Page 124: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

124 FEJEZET 13. KLIENS OLDALI PROGRAMOZÁS

1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">2. <html>3. <head>4. <title>Példa</title>7. </head>8. <body>9. <script language="JavaScript" type="text/javascript">10. <!�11. var i= "Globális;12. function kiir(a) {13. var s="Lokális";14. for (j=0;j<3;j++) alert(j);15. }16. //�>17. </script>18. </body>19. </html>

A 11. sorban egy globális változót definiálunk, míg a 13. sorban egy loká-lisat. A 14. sorban a közvetlen értékadással történik a változó definiálása.

13.1.2. Kifejezések

A kifejezés konstansok, változók és muveletek helyes egymásutánja, mely-nek kiértékelése egy karakterláncot, számot vagy logikai ítéletet eredmé-nyez. A null kulcsszó a nulla értéket jelöli, nem ugyanaz, mint amikor egyváltozót még nem deklaráltunk (undefined), továbbá érdemes megemlíteni,hogy a definiálatlan tömbelemek false értékkel bírnak.

13.1. táblázat. Javascript Aritmetikai operátorokOperátor Leírás

+ összeadás

- kivonás

- kivonás

* szorzás

/ osztás

% modulus(maradékos osztás)

++ növelés

– csökkentés

13.1.3. Feltételes utasítások, ciklusok

A C nyelvben megismert legtöbb utasításforma itt is használható.

Page 125: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

13.1. JAVASCRIPT 125

13.2. táblázat. Javascript Összehasonlító operátorokOperátor Leírás

== egyenlo

!= nem egyenlo

> nagyobb mint

< kisebb mint

>= nagyobb vagy egyenlo

<= kisebb vagy egyenlo

13.3. táblázat. Javascript Logikai operátorokOperátor Leírás

&& és

|| vagy

! nem

if (feltétel){a kód amit akkor hajt végre ha a feltétel igaz}else{a kód amit akkor hajt végre ha a feltétel hamis}switch (kifejezés){case label1:kód amit abban az esetben hajt végre ha kifejezés = label1break...default:ha egyik feltétel sem teljesült}while (feltétel){vérehajtandó kód}do{vérehajtandó kód}while (feltétel)for (inicializálsá; feltétel; változtatás){vérehajtandó kód}

Page 126: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

126 FEJEZET 13. KLIENS OLDALI PROGRAMOZÁS

13.1.4. Függvények

A function kulcsszóval definiáljuk a függvényt. Utána a függvény nevekövetkezik. A névmegadásnál ügyeljünk arra, hogy az különbözzön afenntartott szavaktól, továbbá csak az angol ABC kis és nagybetut illetveaz aláhúzás jelet tartalmazza. A függvényeknek paramétereket adhatunkát, melyeket zárójelben, egymástól vesszovel elválasztva adunk meg. AJavaScript függvénynek lehet visszatéro értéke, (melynek típusa nincs eloremeghatározva) és azt a return utasítással adjuk meg.

13.1.5. Objektumok

13.4. táblázat. Javascript Objektumok

• Window

– Document

∗ Anchor∗ Applet∗ Area∗ Boolean∗ Form

· Button· Checkbox· FileUpload· Hidden· Password· Radio· Reset· Elements· Submit· Text· Textarea· Select

∗ Image∗ Layer∗ Link

• Date

• Math

• String

• Navigator

– Plugin

– Mime Type

• Array

• Event

• Function

• Number

• RegExp

• Screen

A JavaScript objektumalapú (object based) nyelvnek nevezheto. Új ob-jektumok létrehozása megengedett, de új objektum osztályokat nem hoz-hatunk létre benne. A JavaScript objektumok jelentos része függoségi vi-szonyban van egymással, egymásnak alárendeltjei. A legmagasabb szintuJavaScript objektum a Window, de vannak olyanok is, melyek függetleneka hierarchiában pl : Date, Math. Az objektumok tulajdonságait, mint pl.

Page 127: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

13.1. JAVASCRIPT 127

a neve, nagysága, stb., elemváltozóknak is hívhatjuk. Az objektumhozkötodnek a metódusok, ezeket elemfüggvényeknek is hívhatjuk. A 13.4.táblázatban látható HTML objektumokat használhatjuk. A következokbennéhány fontosabb objektumot vizsgálunk meg.

String Objektum

13.5. táblázat. Javascript String Objektum MetódusokMetódusnév Leírás

indexOf() Visszaadja a keresett karakterelso pozicióját a szövegben,ha nincs ilyen akkor -1-et advissza

lastindexOf() Ugyanaz mint az indexOfcsak ez jobbról kezdi keresni.

substr() Kiemel a karakterláncból egyrész-sztringet. Paraméter-ként a kivágandó rész kezdo-pontját és hosszát kell meg-adni.

toLowerCase() A paraméterként átadott ka-rakterlánc minden betujétkisbetuvé alakítja. Visszatéroértéke az átalakított karakter-lánc.

toUpperCase() A paraméterként átadott ka-rakterlánc minden betujétnagybetuvé alakítja. Vissza-téro értéke az átalakított ka-rakterlánc.

Egy egyszeru példa:

<script type="text/javascript">var str="Egy Példa karakterlánc"str=str.toLowerCase();document.write(str.substr(3,6));</script>

Tömb (Array) Objektum

A Javascript nyelvnek nincs külön tömb típusa. Az azonos típusú adatoktárolására az array objektum szolgál, (ami tulajdonképpen egy hivatkozásilánc), aminek használata számos elonnyel jár. Nem szükséges például 12

Page 128: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

128 FEJEZET 13. KLIENS OLDALI PROGRAMOZÁS

13.6. táblázat. Javascript Array Objektum MetódusokMetódusnév Leírás

length Visszaadja a tömb hosszát

lastindexOf() Ugyanaz mint az indexOfcsak ez jobbról kezdi keresni.

substr() Kiemel a karakterláncból egyrész-sztringet. Paraméter-ként a kivágandó rész kezdo-pontját és hosszát kell meg-adni.

toLowerCase() A paraméterként átadott ka-rakterlánc minden betujétkisbetuvé alakítja. Visszatéroértéke az átalakított karakter-lánc.

toUpperCase() A paraméterként átadott ka-rakterlánc minden betujétnagybetuvé alakítja. Vissza-téro értéke az átalakított ka-rakterlánc.

változót létrehozni a hónapok tárolására, azokat elrakhatjuk, összefuzhet-jük újrarendezhetjük stb. az array objektum segítségével.

<html><body><script type="text/javascript">var nevek = new Array(6)nevek[0] = "Nagy Lajos"nevek[1] = "Hunyadi Mátyás"nevek[2] = "Hunyadi János"nevek[3] = "Könyves Kálmán"for (i=0; i<4; i++){document.write(nevek[i] + "<br>")}</script></body></html>

Dátum (Date) Objektum

A date objektum a dátum és ido lekérdezéséhez és strukturált tárolásáhozhasználatos. A Javascript-ben az idoszámítás kezdete : 1970. január 1-én 0óra 00 perc. A belso számítási egység a milliszekundum. Ahhoz, hogy a

Page 129: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

13.1. JAVASCRIPT 129

beépített dátum és ido függvényeket meg tudjuk hívni, szükséges egy újdate objektum létrehozása.

var datum=new Date();//az aktuális dátum lesz az értékevar datum=new Date("October 12, 1988 13:14:00");//A megadott értkeketveszi felvar datum=new Date("October 12, 1988");var datum=new Date(88,09,12,13,14,00);var datum=new Date(88,09,12);var datum=new Date(500);//500 másodpercel 1970 január 1 utáni idöpont

Fonots ! Január a 0. hónap, december a 11. Miután létrehoztuk a dátumobjektumot hozzá tudunk férni az egyes metódusaihoz.

<head><title>Teszt</title><script language="JavaScript">most = new Date();alert("1970 január 1-én 00:00-tól eltelt: "+most.getTime()+" msec");</script></head><body></body></html>

13.7. táblázat. Javascript Array Objektum MetódusokMetódusnév Leírás

Date() egy Date objektumot advissza

getDate() visszaadja az adott napot ahónapon belül

getDay() a hét napjának sorszámátadja vissza (0-6)

getMonth() a hónap sorszámát adjavissza (január 0.)

getFullYear() az évet adja vissza teljes ter-jedelmáben

getHours() az órát adja vissza (0-23)

getMinutes() a percet adja vissza (0-59)

getSeconds() visszadaja a másodpercet (0-59)

A 13.7 táblázatban látható függvények mindegyikének használható a setpárja is pl.: getTime() -> setTime().

Page 130: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

130 FEJEZET 13. KLIENS OLDALI PROGRAMOZÁS

Window Objektum

A Window objektum a legfelso szintu objektum a JavaScript hierarchiában.Minden, ami egy WWW Browser ablakban megjelenítésre kerül, az ennekaz objektumnak az alárendeltje. A window objektum segítségével tudjuka megjeleníto ablakot kontrollálni, lekérdezni. Lehetoségünk van új ablakmegnyitására, és annak tulajdonságait meghatározni. A fo kijelzo ablakotmaga a böngészo nyitja meg, arra a window vagy self kulcsszóval hivat-kozhatunk, de el is hagyhatjuk azt, illetve megszólíthatjuk az ablakot anevén keresztül is. Ezen kulcsszavak után, egy pontot kitéve érhetjük el ametódusokat, tulajdonságokat és alárendelt objektumokat.

<html><head><title>Teszt</title><script language="JavaScript">function UjAblak(){Ujablak =window.open("forras.html","masik","width=300,height=200,scrollbars");Ujablak.focus();}</script></head><body><a href="javascript:UjAblak()">Új ablak</a></body></html>

Ha a hivatkozásra kattintunk, a UjAblak() függvényen keresztül, az open()metódus által megnyitjuk az "Ujablak"-ot, benne a "forras.html", melyrea fókuszt irányítjuk. Az szülo ablakra az opener tulajdonsággal tudunkhivatkozni pl.:

window.opener.locationbar.visible = false;

Ezen keresztül elérhetjük a nyitó ablak minden tulajdonságát. Ezt olyankorérdemes használunk, ha a felhasználónak sok elem közül kell választania ésígy nem célszeru select elemet használni. Ekkor az új ablakban kiválasztjaa megfelelo elemeket, melyek értékeit egy függvényhívással átvisszük aszülo ablak értéktárolójába.

function atvitel(kertek) {window.opener.form[0].ertek.value=kertek;window.close;}

Page 131: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

13.1. JAVASCRIPT 131

A window objektumhoz tartoznak a különbözo kommunikációs ablakok. Apéldákban használt alert() segítségével egy kis üzenet ablakot hívhatunk elo.A confirm() függvény segítségével egy kérdést intézhetünk a felhasználóhoz(igen, mégsem). A promt() függvény segítségével pedig adatot kérhetünk afelhasználótól.

<script type="text/javascript">alert("Heló Világ!");var valasz = confirm("Biztos vagy benne ?");var név = prompt("Írd be a neved","");</script>

Az ablak tartalmát a location tulajdonságával tudjuk megváltoztatni. Alocation objektum reload() metódusával tudjuk az oldalt újratölteni.

<script type="text/javascript">window.location="masik.html";window.location.reload();</script>

Arra ügyeljünk, hogy a reload() metódust csak függvénybol hívjuk meg,mert egyébként végtelen ciklusba kerül a böngészonk:). Az oldal tartalmáta print() metódus segítségével tudjuk kinyomtatni.

<script type="text/javascript">window.print();</script>

Keret (Frame) Objektum

A frame objektum segítségével elérhetjük az ablakokat, melyeket a böngé-szo fo ablakába betöltöttünk. A gyerek ablakokból nézve a szülo ablakotillethetjük parent vagy top névvel. A frame objektum a window objektumleszármazottja, ezért ismeri annak összes tulajdonságát, metódusát és alá-rendelt objektumait is. Ugyanúgy sorszámmal vagy névvel hivatkozhatunka frame objektumokra, mint a rendes ablakokra, csak a gyökértol kezdve kelloket megcímezni(top, parent).

Page 132: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

132 FEJEZET 13. KLIENS OLDALI PROGRAMOZÁS

<html><frameset rows="10%,*" frameborder="1"><frame name="felso" src="a.html"><frame name="also" src="b.html"></frameset></html>

A fenti oldal kereteit fogjuk megcímezni, az elso sorba névvel, a másodikbanszámmal. Amennyiben a keret objektumait szeretnénk elérni, akkor a keretdocument objektumán keresztül tudjuk oket elérni.

<script type="text/javascript">function urlvaltoztato(){parent.felso.location.href="b.htm"parent.frames[1].location.href="a.htm"parent.frames[1].document.forms[0].bevmez.value="Új érték"}</script>

Urlap (Form) Objektum

A form objektum által, mely a JavaScript objektum hierarchiában a docu-ment objektum alatt található, adatokat gyujthetünk. Egy weboldalon többurlapunk is lehet. Minden urlapnak van egy-egy kezelo oldala (action="va-lami.php"). Az egyes urlapon elhelyezkedo elemeket az urlapon keresztültudjuk elérni. Az urlapokat háromféle módon szólíthatjuk meg :

• sorszámmal

windows.document.forms[0].eleme.value = "-x-"

• névvel

windows.document.forms["also"].eleme.value = "-x-"

• közvetlenül az urlap nevével

windows.document.also.eleme.value = "-x-"

Page 133: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

13.1. JAVASCRIPT 133

A form objektum és a hozzá tartozó objektumok rendelkeznek esemény-kezelokkel. Ilyen pl.: az onSubmit tulajdonság melyben definiálhatjuk azelküldéskor meghívandó ellenorzo függvényt. Ha az ellenorzo függvényhamis értékkel tér vissza, akkor az urlap nem kerül elküldésre.

<html><head><script type="text/javascript">function ellenor(){txt=document.bevitelurlap.bevitelmezo.valueif (txt>=1 && txt<=5){return true}else{alert("A számnak 1 és 5 között kell lennie!")return false}}</script></head><body><form name="bevitelurlap" action="cel.php"onsubmit="return ellenor()">Írj be egy számot 1 és 5 között:<input type="text" name="bevitelmezo"><input type="submit" value="Elküld!"></form></body></html>

Az egyes beviteli elemek is rendelkeznek eseménykezelokkel. Ilyen pl.: on-focus, onchange, onblur, onkeydown, onkeyup, onkeypress, onclick, onmousedown,onmouseup, onmouseout. Segítségükkel reagálhatunk a felhasználó akció-ira. Például egy beírt értéket azonnal ellenorizhetünk. A focus() metódussegítségével ki tudjuk jelölni az aktív objektumot oldalunkon. Az ese-ménykezelo függvények és a focus() metódus segítségével rá tudjuk vennia felhasználót a megfelelo formátum használatára. JavaScript-et foleg ilyencélból szokták weboldalakon alkalmazni. Ritkábban fordul elo, hogy azoldal design-ját javítják vele. Például a kép elemre definiálom az onmouse-out vagy onmouseover eseménykezeloket és segítségükkel megváltoztatomaz adott eseményre a kép forrását. Így tudjuk például elérni, hogy a menüegér alatti része világosabb legyen.

Page 134: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

134 FEJEZET 13. KLIENS OLDALI PROGRAMOZÁS

<html><head><title>Példa</title><script type="text/javascript">function ellenoriz(bev){if (document.forms[0].elements[bev].value < 10){alert("A "+document.forms[0].elements[bev].name+" mezöbecsak 10-nél negyobb számirható");document.forms[0].elements[bev].value = 10;document.forms[0].elements[bev].focus(); }}</script></head><body><form action="cel.php" method="post" name="teszt">bev<input name="bev" onblur="ellenoriz(0)" >bev1<input name="bev1" onblur="ellenoriz(1)"></form></body></html>

Page 135: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

13.2. VISUAL BASIC SCRIPT 135

13.2. Visual Basic Script

A Microsoft Visual Basic Script, a Visual Basic programcsalád tagja. Lehetovéteszi szkript futtatását, írását Internet Explorer-en csakúgy, mint Microsoft In-ternet Information Server-en. A VBScript elonyeként egyszeruségét szoktákemlíteni. Ha valaki ismeri a Visual Basic nyelv alapjait, akkor nyelvcsaládtagjaival sok különbözo feladatot meg tud oldani (Access, WEB, Outlook,Exchange Server... programozás). A Visual Basic-bol származik ugyan, deattól több ponton is eltér. Mivel internetes alkalmazásfejlesztésre készült,ezért a VBScript-bol nem tudunk a felhasználó gépén lévo dll-ekhez köz-vetlenül, a fájlrendszerhez pedig egyáltalán nem tudunk hozzáférni. AzInternet-rol letöltheto ActiveX komponenseket pedig digitálisan alá lehetírni. A programot futás közben fordítja le és futtatja a VBS interpreter.

13.2.1. Változók

A VBScript-ben csak egy adattípusunk lehet a Variant. A Variant egy speci-ális adattípus, mely több különbözo információt is képes tárolni, az infor-máció használatától függoen. Mivel a Variant a VBScript egyetlen változója,ezért ez a függvények visszatérési értéke is. A 13.8 táblázatban látható tí-pusokat tudja alkalmazni. Változóinkat nem kötelezo elore deklarálni, azértékadástól lehet oket használni, azonban a késobbi hibák elkerülése vé-gett érdemes a függvények ill. a program elején deklarálni azokat. A Dimszó segítségével tudjuk ezt megtenni. Változóink láthatósága a deklaráláshelyétol függ. Alapesetben minden változó lokális és az adott objektu-mon belül lévo objektumok, függvények számára látható. A szkriptbendeklarált változók (tehát a függvényeken kívüli) számára módosíthatjuka láthatóságot a public és az private módosítókkal. Az elso esetben válto-zónk minden szkript, projekt és függvény számára látható lesz. A másodikesetben változónk csak az ot tartalmazó szkripten belül látható. A változóélettartama szintén a deklarálás helyétol függ. A szkript szintu változók(melyek a függvényeken kívül lettek deklarálva) élettartama deklarálástól aszkript futásának végéig tart. A függvény szintu változók (melyek függvé-nyekben lettek deklarálva) élettartama a deklarálástól a függvény futásánakvégéig tart. Amennyiben meg szeretnénk hosszabbítani a függvény szintuváltozónk élettartamát, akkor a static kifejezést is használnunk kell. Vál-tozóink lehetnek skalárok és tömbök. A tömbök lehetnek statikusak ésdinamikusak. A dinamikus tömböket a ReDim parancs segítségével tudjukátméretezni. A változók elnevezésére kialakult szokások vannak, melye-ket érdemes követni. Célszeru felváltva használni a kis és a nagybetuket,illetve a változó nevében a típusát is megadni.

Page 136: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

136 FEJEZET 13. KLIENS OLDALI PROGRAMOZÁS

13.8. táblázat. VBScript AdattípusokTípus Leírás

Empty a Variant nincs inicailizálvaértéke számok esetén 0, ka-rakterláncok esetén ""

Null a Variant nem tartalmaz érvé-nyes információt

Boolean értéke True vagy FalseByte egész számot tartalmaz 0 és

255 között

Integer egész számot tartalmaz –32768 és 32768 között

Currency értéke -922,337,203,685,477.5808és 922,337,203,685,477.5807.között változik

Long értéke -2,147,483,648 és2,147,483,647. közöttváltozik

Single egyszeres pontosságú lebe-gopontos szám

Double dupla pontosságú lebego-pontos szám

Date dátumot tartalmazhat 100.január 1. és 9999. december31. között

String karaktereket tartalmazhat 2millárd karakterig

Object objektumot tartalmaz

Error egy hibaszámot tartalmaz

<script language="VBScript">Dim strNev ="Bilicki Vilmos"Dim intEletkor=27Dim nevekTomb(20)ReDim VnevekTomb(20)ReDim VnevekTomb(25)</script>

13.2.2. Operátorok

A VBScript-ben használható operátorok a 13.9 táblázatban láthatóak.

Page 137: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

13.2. VISUAL BASIC SCRIPT 137

13.9. táblázat. VBScript AdattípusokOperátor Leírás

+ összeadás

- kivonás

And logikai és

Not logikai nem

Or logikai vagy

Xor logikai kizárólagos vagy

& szöveg összefuzés

/ osztás

* szorzás

Eqv logikai egyenloség

> nagyobb mint

< kisebb mint

<= kisebb vagy egyenlo

>= nagyobb vagy egyenlo

<> nem egyenlo

ˆ hatvány

\ egész osztás

Mod modulus

Is objektum egyenloség

<script language="VBScript">Dim strNev ="Bilicki "&"Vilmos"Dim strNev ="Bilicki "+"Vilmos"</script>

13.2.3. Feltétleles utasítások, ciklusok

Két feltételes utasítást használhatunk az egyik az if feltétel then utasítás elseutasítás end if szerkezetu. A másik a select case feltétel case érték utasítás ... endselect szerkezettel használható. Ciklusok közül a következoek használha-tóak:

Page 138: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

138 FEJEZET 13. KLIENS OLDALI PROGRAMOZÁS

Do While feltételutasításLoop

While feltételutasításWend

For kezdöérték To végértékutasitásNext

For Each elem in halmazutasításNext

13.2.4. Függvények

Két függvénytípust használhatunk a VBScript környezetben. Egyik a Sub amásik a Function. A Sub és End Sub parancsok közé zárt utasításhalmaz egyeljárást határoz meg, mely nem ad vissza értéket. A Function és End Functionutasítások között elhelyezkedo utasítások halmaza pedig egy függvénythatároz meg, melynek van visszatérési értéke.

Sub kiir(valami)msgbox valamiEnd Sub

Function szamlalo(x)szam = 32*xEnd Function

Függvényt két módon tudunk meghívni egyik

kiir("Ezt")Call kiir "Ezt"Call kiir ("Ezt")

Saját függvényeink mellett használhatjuk a beépített függvényeket is.

Egyébb függvények

Inputbox Felhasználói bevitelre szolgál.

Page 139: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

13.2. VISUAL BASIC SCRIPT 139

InputBox(kiírás, cím, alapértelmezett, xpos, ypos, súgófájl,súgó) pl.:InputBox("Írd be a neved")

MsgBox Segít kommunikálni a felhasználóval. A gombok tulajdonságá-nak többek között a következo értékei lehetnek: 0; OK; 1, OK, Cancel,

MsgBox(kiírás, gombok, cím, súgófájl, súgó)pl.:MsgBox("Biztos törölni szeretnéd ?",1)

VarType Segítségével kideríthetjük a változó típusát. Bevitel ellenorzés-nél hasznos.

VarType(érték)pl.:tipus=VarType(változó)

Karaterlánc függvények

Trim A karakterlánc elejérol és végérol törli a szóközöket. Szintén hasznosés használandó az adatbevitelnél.

Trim(str)pl.:a=Trim(str)

InStr Szövegkereso függvény, mely egy karakterláncot keres egy másikkarakterláncban.

Instr(startpoz,string1,string2,tipus)pl.:pozició=Instr(0,"Ezt","Itt szerpel az Ezt szó",1)

Left,Mid,Right A szöveg megfelelo részét adják vissza.

Left(str,poz),Mid(str,poz1,poz2),Right(str,poz)pl.:bal3=Left("123eddig tart",3)

Page 140: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

140 FEJEZET 13. KLIENS OLDALI PROGRAMOZÁS

UCase,LCase A karakterláncot kicsi vagy nagy betussé alakítják.

UCase(str),LCase(str)pl.: kicsi=LCase("NaGY")

Konvertáló Függvények

A Variant típus altípusai között tudjuk az adatot átalakítani. Ahhoz, hogypéldául egy string altípusként szereplo számmal muveleteket tudjunk végez-ni, elobb át kell alakítanunk számmá.

CByte, CInt, CDnl CLng, CStr A megfelelo altípussá alakítják az adatot.

CByte(kif), CInt(kif), CDbl(), CLng(kif), CStr(kif)pl.: szam=CInt("12,3")szam=szam+1

Ido, Dátum függvények

Nagyon hasznos függvények, az idopontok, dátumok korrekt kezelésétsegítik elo.

Date A rendszer idot adja vissza.

datum=Date()

DateValue A bementként kapott karakterláncot próbálja értelmezni, mintdátumot. Nagyon hasznos függvény.

datum=DateValue("2002. január 1")datum=DateValue("2002/január/1") ...

Day, Hour, Year, WeekDay, Minute, Month, Hour, Second A dátum adottrészét adják vissza. (Vasárnap=1)

datum=DateValue("2002. január 1")nap = WeekDay(datum)

Page 141: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

13.2. VISUAL BASIC SCRIPT 141

Time A rendszeridot adja vissza.

ido=Time()

TimeValue Hasonlóan a DateValue függvényhez, karakterlánc a beme-nete, melyet megpróbál idopontként értelmezni.

ido=TimeValue("17:01:10")ora = Hour(ido)

13.2.5. Objektumok

A VBScript használni tudja a JavaScript-ben megismert objektumok több-ségét. Amikor számmal címezünk meg egy objektumot, akkor itt a kerekzárójeleket kell használnunk.

window.frames(0).document.bgcolor = "#ff00ff"

Az eseménykezelésre a VBScript belso eseménykezelojét is használhatjuk.A függvény nevében szerepelnie kell az esemény nevének és a hozzá tartozóobjektum nevének.

Sub gomb1_OnClickmsgbox "Az egyes gomb lett lenyomva"End Sub

13.2.6. ActiveX

Az ActiveX technológia a dinamic link library technológia utódja. Segítsé-gével elore elkészített elemeket tudunk weboldalunkon felhasználni. Ilyenlehet például egy táblázatkezelo. Mielott használnánk egy ActiveX ele-met regisztrálnunk kell az operációs rendszer registry-ben. Minden Acti-veX elem rendelkezik egy egyedi azonosítóval (CLSID). Ezen azonosítókatkell regisztrálnunk az operációs rendszer leíró adatbázisában. A CLSID-thasználjuk a HTML oldalon is, ha egy ActiveX elemet akarunk használni.Weboldalunkba az OBJECT elem segítségével tudjuk beilleszteni.

Page 142: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

142 FEJEZET 13. KLIENS OLDALI PROGRAMOZÁS

<OBJECT ID="Label1" WIDTH=104 HEIGHT=27CLASSID="CLSID:99B42120-6EC7-11CF-A6C7-00AA00A47DD2"><PARAM NAME="_ExtentX" VALUE="2752"><PARAM NAME="_ExtentY" VALUE="714"><PARAM NAME="Caption" VALUE="Label Control"></OBJECT>

A CLASSID tulajdonságnál tudjuk megadni az ActiveX elem azonosítóját, aPARAM elemekkel pedig paraméterezni tudjuk. A beillesztett objektumraa szokásos módon tudunk hivatkozni.

Sub Label1_Click()Dim aa = Label1.CaptionIf a = "Start" Thena = "Stop"Elsea = "Start"End IfLabel1.Caption = aEnd Sub

A kliens csak akkor tudja használni az ActiveX elemet, ha az regisztrálva vanés rendelkezésére áll. Amennyiben a kliens gépen nincs meg a komponens,akkor azt le lehet tölteni. A letöltés a böngészo biztonsági beállításaitólés a komponenstol függoen automatikus is lehet. Az object elemben megtudjuk adni a komponens elérhetoségét is. Lehetoség van az ActiveX elemekdigitális aláírására is.

<OBJECTID=iexr2TYPE="application/x-oleobject"CLASSID="clsid:0CA4A620-8E3D-11CF-A3A9-00A0C9034920"CODEBASE="http://activex.microsoft.com/controls/iexplorer/iestock.ocx#Version=4,70,0,1161"WIDTH=300HEIGHT=50>

VBScript-et ott érdemes használni, ahol foleg Microsoft technológiát alkal-maznak. Segítségével nagyfokú integráció érheto el, a különbözo Microsoftalkalmazások között. Az IE-n kívül a legtöbb böngészo nem tudja futtatnia VBScript-et. Az ActiveX technológiával sok hasznos elemet létre lehetugyan hozni, de hasonló funkciókat meg tudunk valósítani Java Applet se-gítségével is.

Page 143: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

14. fejezet

3 rétegu architektúrák

Az 1980-as években az elso PC hálózatok a fájl megosztást (file sharing)használták a közös adatbázisok elérésére. Itt a szerveren található adat-bázist a kliensek letöltötték és a kliensen futó alkalmazások elvégezték aszükséges muveleteket. Ez a megközelítés volt többnyire a jellemzo azún. Xbase típusú rendszerekre dBASE, FoxPro és Clipper). A fájl megosztásegyszeru és muködik is addig, amíg ritkán frissítik illetve kevesen hasz-nálják az adatbázist, valamint a hálózat elviseli a terhelést. A 90-es évekelején megjeleno GUI-t és a felhasználók számának növekedését nem tudtakövetni a fájl megosztás technológia. Kevés olyan rendszer volt, amelymegfelelo sebességgel egy tucat felhasználónál többet ki tudott volna szol-gálni. A megoldást a két rétegu (2 tier) architektúra megjelenése jelentette.A fájl szerver lecserélésével egy igazi adatbázisszerverre, a hálózaton csakaz adatbázis lekérdezést és annak eredményét kellett átvinni, nem az egészfájlt. Ennek a megoldásnak egyik elonye tehát a hálózati forgalom lénye-ges csökkenése volt. Segítségével megoldhatóak voltak a több felhasználósadatmanipulációk (mivel valódi adatbázis kezelot használtak). A mai napighasználják ezt a széles körben elterjedt megoldást. A kliensek RPC-vel vagySQL-el kommunikálnak a szerverrel. Az adatbázis szerverek dönto több-sége támogatja a tárolt eljárásokat és a triggereket. A hatékonyabb rendszerérdekében célszerubb ezen lehetoségek segítségével, a szervereken meg-valósítani különbözo adatokhoz tartozó kényszereket (business rules). A 2rétegu architektúra kiváló megoldás a munkacsoportok számára. Nagyobbfelhasználó számnál ( >100 ), WAN-on keresztüli kommunikáció eseténazonban problémák merülnek fel. Az adatbázis kezelo minden kapcsolódókliensnek biztosít egy szálat akkor is, amikor nincs adatforgalom a kliens ésa szerver között. Ha valamilyen hiba következik be, akkor a kliensnek vé-gig kell mennie a kapcsolat inicializáló fázisain. Nagy felhasználó számnála kapcsolatok folyamatos fenntartása és a kapcsolatok újrakezdeményezésemár komoly lassulást eredményeznek. Az adatkezelo nyelv, mellyel a szer-ver oldali eljárásokat megírhatjuk, gyártófüggo, minden nagyobb gyártó

143

Page 144: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

144 FEJEZET 14. 3 RÉTEGU ARCHITEKTÚRÁK

saját eszközöket hozott létre a feladatok ellátására (trigger, tranzakció, ...).A két rétegu architektúra másik nagy problémája a rugalmasság hiánya.Miután az alkalmazást kifejlesztettük, nehéz az egyes funkciókat átvinniegyik szerverrol a másikra. Ez esetenként a szerver oldali kód újraírásávaljárhat.A három rétegu (three tier) architektúra egy közbülso réteg bevezetésévelbiztosít megoldást a fenti problémákra. Ez a réteg több feladatot is ellát-hat, ilyen pl.: a feladat sorok kezelése, alkalmazások futtatása, adatbáziskezelés . . . stb. Bebizonyosodott, hogy egy ilyen közbülso réteg használatanövelheti a teljesítményt és a rugalmasságot. Például egy feladatsor mu-ködtetésével a két rétegu megközelítés szinkron lefolyása helyett, aszinkronlefolyású lesz. A kliens elküldheti a kérését a középso réteg számára, vé-gezheti a dolgát és nemsokára választ kap. A középso réteg idozítést ésprioritás kezelést is alkalmazhat a feladatsoron.A középso réteg legegyszerubb típusa a tranzakció kezelo (TP transactionprocessing). Az adatbázis kezelok rendelkeznek ugyan tranzakció kezelés-sel, ez azonban munkacsoportokra tud megfelelo teljesítményt nyújtani.Ezeket a tranzakció kezeloket TP Lite-nak nevezzük. A megoldást a kö-zépso rétegben elhelyezett TP Heavy tranzakció kezelo nyújtja. Egyfajtakoncentrátorként funkcionál, a kéréseket egy várakozási sorba rendezi éscsak adott számú kérést engedélyez egyszerre. Segítségével több, nemfeltétlenül egy helyen lévo adatbázisban is futtathatunk adatmódosító le-kérdezéseket egy tranzakción belül. Több különbözo adatforráshoz kap-csolódhatunk (szöveg fájl, relációs adatbázis kezelo . . . ), prioritásokat ad-hatunk az egyes tranzakcióknak, komoly biztonsági rendszert alkalmazha-tunk (pl.:Kerberos).A középso réteg egy másik típusa az üzenetkezelo réteg (Messaging Server).A tranzakció kezelo második generációjának is felfogható. Az üzenetekprioritások alapján aszinkron módon kerülnek feldolgozásra. Az üzenetegy öndefiniáló objektum, mely információt hordoz arról, hogy mi is való-jában, hova kell küldeni, minek kell történnie, amikor eléri célját. Legalábbkét részbol áll minden üzenet:

• fejléc – tartalmazza a prioritást, címet és egy ID-t.

• törzs – tartalmazza az adatot, ami lehet szöveg, kép, tranzakció, . . . .

Az elsodleges különbség a TP vezérlo és az üzenet szerver között, hogyitt az intelligencia a csomagokban van, ellentétben a TP környezettel, ahola rendszer intelligencia a TP kezeloben van. A TP rendszerben a tranz-akciók egyszeru adatcsomagok, melyek az elore definiált kapcsolatokonkeresztül utazva érik el úti céljukat. A TP kezelo lefuttatja a tranzakciót,mely általában egy lekérdezés. Amennyiben a TP kezelo nem érti meg azadatcsomag tartalmát, akkor nem futtatja le. A TP kezelonek annyit kell

Page 145: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

145

tudnia, mint az adatbázis kezelonek. Ezzel ellentétben az üzenet orien-tált architektúrában az intelligenciát a csomag hordozza. Az üzenet kezeloszerver csak egy tartalmazója (container) az üzeneteknek és a bennük lévotárolt eljárásoknak. Az üzenetkezelo által végrehajtott muveletek csak akommunikációval vannak kapcsolatban (titkosítás, . . . ). Mivel az üzenetekminden információt tartalmaznak, az üzenetkezelo szerver az üzeneteketdiszkrét objektumokként kezeli. Az ilyen rendszer sokkal rugalmasabb,mint a TP. Az üzenetek egyes csoportja számára a középso réteg egyszeruútvonalválasztóként szerepelhet két hálózati alkalmazás között. Az üzene-tek másik csoportjánál a középso réteg végrehajtja az üzenetben szereplotárolt eljárást. Az üzenetkezelo rendszerek megbízhatóak. Mivel az üzene-teket tárolják, akkor sincs probléma, ha a címzett nem muködik. Ez esetbenkésobb kapja meg az üzenetet. Ezzel a megoldással a rendszer független azátviteli technológiától.Amikor a három rétegu architektúráról beszélünk, akkor a legtöbb emberaz alkalmazás szerver-re (Application Server) gondol, mint középso rétegre.Ennél a megközelítésnél a vezérlo logika nagy része a szerveren található.A kliensek egyszeru terminálként muködnek, melyeknek feladata a tarta-lom megjelenítése. Ezeket vékony kliensnek nevezik. Elonyei közé tartozika skálázhatósága (mivel a központi szerver, mely akár egy 32 processzorosgép is lehet, könnyebben skálázható, mint egy mezei PC), biztonságossága(amíg a kód a szerveren fut, kevesebbet kell törodnünk vele), a fenntartásiköltségei kisebbek (mivel csak egy gépen kell a szoftvert karbantartani, nemnéhány száz PC-n). Egy alkalmazási szerverrel sokkal könnyebb adatbázis-kezelotol független rendszert írni. A legtöbb ma használt eszköz biztosítjaa funkciók elosztását a rendszer létrehozása után (after the fact). Ez aztjelenti, hogy a kódok és a modulok áthelyezhetoek, ezzel a szerverek ská-lázhatósága tovább javul. Az alkalmazásszerver megközelítés hátránya atechnológia bonyolultságában rejlik.Az alkalmazás szerverek egy fajtája objektum orientált adatbázis kezelo-ként is muködhet (ODBMS). Ebben az esetben az ODBMS gyorstárkéntmuködik. Az adat a relációs adatbázis kezeloben általában normál alakbanvan tárolva, sok különbözo táblában. Ez az általános tárolási forma nemideális a teljesítmény szempontjából. Az ODBMS használható az adatoklekérésére és az alkalmazás igényeinek megfelelo átalakítására. Tárolhatjaa ma még hagyományos adatbázis kezelokben nem definiált videó, hangadattípusokat.

Page 146: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

146 FEJEZET 14. 3 RÉTEGU ARCHITEKTÚRÁK

Page 147: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

15. fejezet

Java

A nyelv szintaxisa és szemantikája nagyban hasonlít a sokak által ismert Cilletve C++ programozási nyelvhez. A Java nem használ mutatókat (poin-ter). A nyelv automatikusan felszabadítja a már nem használt tárterületeket(szemétgyujtés, garbage collection). A programozó absztrakt adattípuskéntviselkedo osztályokat definiálhat, az osztályok muveleteket - módszere-ket - tartalmaznak, amelyek a rejtett adatreprezentáción (egyedváltozók)operálnak. Létrehozhatunk objektumokat, azaz egyes osztályokba tartozóegyedeket. Osztályok definiálásánál felhasználhatunk már meglévo osztá-lyokat, az új osztály (a leszármazott) örökli a szülo adatait, módszereit. Ametódusok hívásánál a meghívott módszer futási idoben, objektum aktuálistípusának megfeleloen kerül kiválasztásra (virtuális módszerek, polimor-fizmus). Az egyes osztályokban definiált változók és módszerek láthatósá-gát private, protected és public módon lehet megadni. A Java-ban a beépített,egyszeru adattípusú - numerikus, logikai és karakter típus - változók kivé-telével minden objektum.Architektúra-független és hordozható Napjaink hálózatait heterogén hardver-és szoftver architektúrájú számítógépek alkotják. A Java nyelv nem tar-talmaz architektúra- vagy implementációfüggo elemeket. Ahhoz, hogy alefordított program változtatás nélkül futtatható legyen, különbözo hard-ver architektúrákon, a fordítóprogram a programot nem egy konkrét pro-cesszor gépi kódjára, hanem egy képzeletbeli hardver - virtuális gép (vir-tual machine) - utasításrendszerére fordítja le. Az így létrejött közbülso, ún.Byte kódot töltjük le a célarchitektúrára, ahol a virtuális gépet megvalósítóprogram értelmezi és hajtja végre. A hordozhatóság nem csak a virtuálisgépi utasítások, hanem a nyelv mellet szabványosított rendszerkönyvtárakszintjén is jelentkezik, ezek a könyvtárak valósítják meg a legfontosabb,operációs rendszerekhez kötodo feladatokat, mint például a be- és kivitelirendszert, vagy a programok grafikus kezeloi felületét.Interpretált és dinamikus. Az interpretált végrehajtás - kombinálva aklasszikus kapcsolatszerkeszto (linker) helyett futás ideju betöltéssel - a fej-

147

Page 148: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

148 FEJEZET 15. JAVA

lesztési ciklust nagy mértékben felgyorsítja. Sajnos az interpretált végrehaj-tásnak van egy nagy hátránya is, a programok sokkal - becslések szerint10-20-szor - lassabban futnak, mint a gépi kódú megfeleloik.Robusztus és biztonságos. Ez a két fogalom a Java esetében kéz a kézbenjár. Robusztus egy nyelv, ha megakadályozza vagy futás közben kiszuri aprogramozási hibákat, biztonságos, ha megakadályozza, hogy rosszindu-latú programok kerüljenek a rendszerünkbe. Mindkét célkituzés elérésé-hez gyakran hasonló módszereket használhatunk. A robusztusság nyelviszinten a szigorú, statikus típusosságban jelenik meg. Minden adatnakfordításkor jól definiált típusa van, nincsenek automatikus konverziók, azexplicit konverzió csak kompatibilis típusoknál sikerül, egyébként legké-sobb futtatáskor programhibát (exception) okoz. A biztonság (security) arobusztussággal kezdodik, a fordító csak korrektül viselkedo programokatad ki magából. Ez elegendo lehet önálló alkalmazásoknál, de az Appletekletöltésénél ennél többre van szükség. Kezdjük azzal, hogy ki garantálja,hogy a letöltött Byte kódot valóban egy megbízható Java fordító hozta létre,nem pedig egy bit-betyár barkácsolta össze a hexadecimális szerkesztojé-vel? A Byte kód minden utasítása információt tartalmaz az operandusoktípusáról, az osztály-betölto - függetlenül attól, hogy a helyi háttértárrólvagy a hálózatról tölt be - ellenorzi, hogy a program megfelel-e a nyelv sza-bályainak. Eldönti például, hogy minden operandus valóban a megfelelotípusú, nem használjuk ugyanazt az adatot más-más típusúként is. Ellen-orizheto az is, hogy a módszerek a vermüket konzisztensen használják-e,valamint hogy a kód nem fér-e hozzá számára nem engedélyezett - a nyelvdefiníciója szerint láthatatlan, rejtett - adatkomponensekhez, módszerek-hez.Többszálú A programok jelentos része párhuzamosan végrehajtható részle-tekre - vezérlési szálakra - bontható. Így jobban kihasználható a számítógépközponti egysége, a programok a külso - például felhasználói - eseményekregyorsabban reagálhatnak. Az egymással kommunikáló, viszonylag lazakapcsolatban álló szálakra bontott feladat könnyebben áttekintheto, meg-valósítható. A többszálú programozáshoz a Java nyelvi szinten biztosítjaaz automatikus kölcsönös kizárást: szinkronizált (synchronized) módsze-rek vagy utasítások, valamint a szálak létrehozásához, szinkronizációjánakmegvalósításához a rendszerkönyvtár tartalmaz egy ún. Thread osztályt. AJava virtuális gép a szálak futtatásához prioritáson alapuló preemptív - denem feltétlenül idoosztásos - ütemezot tartalmaz.

Page 149: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

15.1. JAVA APPLET 149

15.1. Java Applet

A Java programok önállóan futnak, közvetlenül az operációs rendszer ésaz erre épülo Java virtuális gép felügyelete alatt. Az applet-ek hálózatonkeresztüli betöltését és futtatását viszont egy Web böngészo program végzi,az Applet futási környezete maga a böngészo. Az applet-ek sokat profi-tálnak ebbol az albérletbol, használhatják a böngészoben meglévo teljesprogram-infrastruktúrát: a Web oldalból kihasíthatnak maguknak területe-ket, ahova rajzolhatnak, felhasználhatják a böngészo grafikus-, multimédiaés pl. HTML megjelenítési szolgáltatásait, kezeloi felület elemeit, esemény-kezelését, hálózati kommunikációját. A böngészo szigorúan korlátozza afelügyelete alatt futó applet-eket, megakadályozza, hogy potenciálisan ve-szélyes tevékenységet hajtsanak végre. Így például a Java nyelvbe márbeépített biztonsági rendszeren, konzisztencia ellenorzésen túl az applet-ek:

• nem, vagy csak nagyon szigorúan korlátozva férhetnek hozzá a helyiállományrendszerhez.

• csak azzal a szerverrel, az ott futó programokkal vehetik fel a kapcso-latot, ahonnan letöltodtek.

• nem indíthatnak el a helyi gépen lévo programokat, nem tölthetnekbe helyi programkönyvtárakat.

A Java Applet-ben az a speciális, hogy az Applet osztályból származtatjuk.Lefordítjuk és a bájtkódot tartalmazó fájl elérési útvonalát kell megadnunka HTML fájlban. Egy példa Applet:

import java.applet.Applet;import java.awt.Graphics;public class HelloWorld extends Applet {public void paint(Graphics g) {g.drawString("Hello world!", 50, 25);}}

A tartalmazó HTML kód:

<HTML><HEAD><TITLE>Applet</TITLE></HEAD><BODY>Itt az applet:<APPLET CODE="HelloWorld.class" WIDTH=150 HEIGHT=25></APPLET></BODY></HTML>

Page 150: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

150 FEJEZET 15. JAVA

15.1.1. Inicializálás, Futás, Kilépés

Az applet a betöltés után inicializálja magát, majd elkezdi futását. Ha azapplet-et tartalmazó weboldalt elhagyjuk, akkor leállítja futását, amennyi-ben visszatérünk, akkor újraindul. Amikor kilépünk a böngészobol, akkoraz applet elvégzi a takarítást és kilép. A megfelelo szakaszokhoz egy-egykezelo metódus tartozik, melyeket felülírhatunk.

public class Simple extends Applet {. . .public void init() { . . . }public void start() { . . . }public void stop() { . . . }public void destroy() { . . . }. . .}

A legegyszerubb alkalmazásoknál egyiket sem kell felülírnunk. Az init me-tódus az egyszeri inicializálásnál használható. Olyan kódot helyezhetünkbele, amit normál esetben a konstruktorba tennénk. Az olyan alkalmazások-nak, melyek inicializálás után feladatot végeznek (pl.: reagál a felhasználóiakciókra) felül kell írnia a start metódust, mely általában egy vagy többszálat indít el. Gyakran használnak szálakat olyan esetben, amikor egyfeladatot többször kell elvégezni. Egy tipikus alkalmazás egy olyan app-let amely animációt futtat. Ilyenkor szükség van egy olyan szálra, amelyadott idointervallumonként újrarajzolást kér. Másik alkalmazás lehet egyolyan applet, amely adatokat olvas a szerverrol (chat program). Ezeket aszálakat a start metódusban indítják. Leállításukról a stop metódusokbangondoskodnak.

Page 151: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

15.1. JAVA APPLET 151

import java.awt.Graphics;import java.util.*;import java.text.DateFormat;import java.applet.Applet;public class Clock extends Applet implements Runnable {

private Thread clockThread = null;public void start() {if (clockThread == null) {

clockThread = new Thread(this, "Clock");clockThread.start();

}}public void run() {Thread myThread = Thread.currentThread();while (clockThread == myThread) {

repaint();try {

Thread.sleep(1000);} catch (InterruptedException e){// a VM nem akar aludni többet,// így indulhat a munka}

}}public void paint(Graphics g) {

// lekérdezi az idöt és átkonvertálja dátummáCalendar cal = Calendar.getInstance();Date date = cal.getTime();// format it and display itDateFormat dateFormatter =

DateFormat.getTimeInstance();g.drawString(dateFormatter.format(date), 5, 10);

}// felülírjuk az Applet stop metódusátpublic void stop() {

clockThread = null;}

}

A this a new Thread(this)-ban azt jelzi, hogy az applet biztosítja a szál törzsétazon keresztül, hogy megvalósítja a java.lang Runnable interfészt, mely ah-hoz szükséges, hogy a run metódust használni tudjuk a törzsben. A szálellenorzi, hogy a jelenlegi szál neve megegyezik-e a saját nevével, ha igen,akkor folytatja futását. Amennyiben NULL értéket adunk a szálat leíró ob-jektumnak, akkor a szál kilép. Szálakat használhatunk inicializáláskor is,amikor hálózatról töltünk le valamit.

Page 152: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

152 FEJEZET 15. JAVA

15.1.2. Rajzolás, Eseménykezelés

Amennyiben az Applet-et nem az Applet hanem a JApplet osztályból szár-maztatjuk, akkor használhatjuk a Swing osztály komponenseit is, melyektöbb lehetoséget nyújtanak a grafikus felület kialakítására. Segítségévelegyszeruen tudunk gombokat, . . . egyéb elemeket használni.

import javax.swing.*;import java.awt.*;public class HelloSwingApplet extends JApplet {public HelloSwingApplet() {

getRootPane().putClientProperty("defeatSystemEventQueueCheck",Boolean.TRUE);

}public void init() {

JLabel label = new JLabel("You are successfully running a Swing applet!");label.setHorizontalAlignment(JLabel.CENTER);label.setBorder(BorderFactory.createMatteBorder(1,1,2,2,Color.black));getContentPane().add(label, BorderLayout.CENTER);

}}

Az Applet osztályból származtatott alkalmazások esetén, két módon tudunka képernyore rajzolni. Az egyik a paint(), a másik az update() metódusfelülírása. Mindkét metódus az Applet osztályból, azon belül pedig az AWT(Abstract Window Toolkit ) osztályból származik. Az alábbi objektumokathasználhatjuk:

• Nyomógomb (java.awt.Button).

• Jelölonégyzet (java.awt.Checkbox).

• Egysoros szöveg bevitel (java.awt.TextField).

• Nagyobb szöveg bevitel (java.awt.TextArea).

• Feliratok (java.awt.Label).

• Listák (java.awt.List).

• Választó listák (java.awt.Choice).

• Gördülo lécek (java.awt.Scrollbar).

• Rajz területek (java.awt.Canvas).

Page 153: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

15.1. JAVA APPLET 153

• Menük (java.awt.Menu).

• Tárolók (java.awt.Panel, java.awt.Window).

Az egyes elemeket az add metódussal tudjuk hozzáadni felületünkhöz, aremove-val tudjuk elvenni onnan. A setLayout metódussal a megjelenítéstdefiniálhatjuk.

...TextField field;public void init() {field = new TextField();field.setEditable(false);setLayout(new java.awt.GridLayout(1,0));add(field);validate();addItem("inicializálás... ");}....

Az eseménykezelést az Applet osztály esetén a java.awt.Event osztály bizto-sítja. Az elején implementálnunk kell a megfelelo eseménykezelot. pl.:

import java.awt.event.MouseListener;import java.awt.event.MouseEvent;import java.applet.Applet;import java.awt.Graphics;public class SimpleClick extends Appletimplements MouseListener{...

Minden eseményre felül kell írni az absztrakt osztály eseménykezelojét.

public void mouseEntered(MouseEvent event) {}public void mouseExited(MouseEvent event) {}public void mousePressed(MouseEvent event) {}public void mouseReleased(MouseEvent event) {}public void mouseClicked(MouseEvent event) {addItem("click!... ");}

Page 154: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

154 FEJEZET 15. JAVA

15.2. JDBC

A JDBC-t adatbázisok elérésének alacsony szintu, közvetlenül az SQL utasí-tások szintjét használó könyvtárnak szánták. A könyvtár tervezésénél nemkellett teljesen új dolgokat kitalálni, a tervezok az X/OPEN konzorciumSQL CLI (Call Level Interface) specifikációjából indultak ki, amely nagyonhasonló az ipari szabványnak tekintheto ODBC (Open Database Connecti-vity) specifikációhoz. A JDBC - legalábbis a felso rétege - nem egyszeruenaz ODBC hívási felületének becsomagolása, hanem teljesen Java-ban imp-lementálódott, így az implementáció megorizte a Java kód architektúra-függetlenségét, hordozhatóságát.

15.2.1. Rétegek

15.1. ábra. Rétegek

A könyvtár lényege, az ún. JDBC menedzser tulajdonképpen 2 felületetspecifikál. A felépítés a 15.1 ábrán látható. A felso felülete az a progra-mozói interfész, amely segítségével a programozók elérhetik az adatbázisszolgáltatásait. A menedzser alsó szintje viszont a különbözo adatbázi-sok elérését megvalósító meghajtó programok implementációjánál játszikszerepet. A meghajtók implementálására több mód kínálkozik. Készülhetolyan meghajtó, amely valamilyen gyártó specifikus módon kommunikálaz adatbázis-kezelovel. Másik módszer, hogy egy már meglévo, szabvá-nyos ODBC meghajtót megfejelnek egy vékony réteggel, amely a kívántspecifikációra konvertálja az ODBC felületet. Lehetoség kínálkozik arra is,

Page 155: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

15.2. JDBC 155

hogy valamilyen nyilvános, általános protokollon keresztül kapcsolódjunkegy adatbázis-kezelohöz. E két utóbbi megoldás elonye, hogy több gyártóadatbázisát is ugyanazon meghajtó szolgálhatja ki, igaz viszont, hogy álta-lában kissé lassabban, mintha specifikus meghajtót használnánk.

15.2.2. A fontosabb JDBC objektumok használata

15.2. ábra. Fontosabb JDBC osztályok

A 15.2 ábrán látható osztályokat és metódusaikat használhatjuk az adat-bázissal kapcsolatos muveletekre. Mielott a kapcsolatot felépítenénk a get-Connection metódus segítségével, be kell töltenünk az adatbázis kezelonk-höz tartozó megfelelo meghajtót.

Class.forName("jdbc.DriverXYZ");pl.:Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

Miután ezt megtettük létrehozhatjuk a kapcsolat (connection) objektumot akövetkezo módon:

Connection con = DriverManager.getConnection(url,"myLogin", "myPassword");

A JDBC programokban az adatbázisokra URL (Uniform Resource Locator)szintaxissal lehet hivatkozni:

Page 156: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

156 FEJEZET 15. JAVA

jdbc:<alprotokoll>:<adatbázis hivatkozás>

Az alprotokoll neve a meghajtók kiválasztásánál játszhat szerepet, hiszen aJDBC egyes kapcsolatokhoz más-más meghajtót használhat. Az adatbázishivatkozás pedig már meghajtó specifikus szöveg lehet, bár az ajánlásokszerint ahol lehet, használjuk a szokásos URL szintaxist. Például a

jdbc:odbc:employee;UID=scott;PWD=tiger

egy ODBC feletti meghajtó használatát írja elo az employee adatbázishoz,kiegészíto paraméterként megadva a felhasználó nevét és jelszavát, míg a

jdbc:dbnet://vala.hol.com:2100/records

a vala.hol.com gép 2100-as kapuját használva a records adatbázisra hivatko-zik, az általános hálózati protokollt használó meghajtón keresztül. Miutánsikeresen meghívtuk a DriverManager getConnection metódusát egy nyitottkapcsolattal rendelkezünk, mely segítségével JDBC kifejezéseket használva,SQL parancsokat küldhetünk az adatbázis kezelonek. A kifejezés (state-ment) objektumokat olyan lekérdezések futtatására használhatjuk, melyeknem futnak le gyakran, mivel ilyenkor az átvitt SQL utasítást adatbáziskezelo fordítja le. Amennyiben olyan lekérdezésünk van, amit gyakrabbanszeretnénk futatni és nem változik, akkor elokészített kifejezés (prepared sta-tement) objektumot célszeru használni, mivel ez a már lefordított SQL kódotadja át az adatbázis kezelonek ezzel is csökkentve terhelését.

Statement stmt = con.createStatement();PreparedStatement updateSales = con.prepareStatement("UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ?");

A kifejezés objektum két metódusát szokták gyakran használni, az egyik aexecuteUpdate az adatmódosítások végrehajtására, a másik az executeQuerya lekérdezések végrehajtására.

String query="select nev, kor from ent_nevek"; ResultSetrs=stmt.executeQuery(query);String uquery="update ent_nevek set kor=20 where nev like ’Trisztán’";stmt.executeUpdate(query);

Page 157: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

15.2. JDBC 157

Lekérdezés esetén egy ResultSet objektumot kapunk eredményként, melyenegy while ciklussal tudunk végigjárni.

while (rs.next()) {String s = rs.getString("nev");int n = rs.getInt("kor");System.out.println(s + " " + n);}

15.1. táblázat. JDBC AdattípusokSQL típus Java típus

CHAR String

VARCHAR String

LONGVARCHAR java.io.InputStream

NUMERIC java.sql.Numeric

DECIMAL java.sql.Numeric

BIT boolean

TINYINT byte

SMALLINT short

INTEGER int

BIGINT long

REAL float

FLOAT float

DOUBLE double

BINARY byte[]

VARBINARY byte[]

LONGVARBINARY java.io.InputStream

DATE java.sql.Date

TIME java.sql.Time

TIMESTAMP java.sql.Timestamp

A ReslutSet objektum elemeit getXXX függvénnyel tudjuk lekérdezni,ahol XXX az adott adattípus. A 15.1 táblázatban látható adattípusok hasz-nálhatóak. Elvileg minden adattípusra alkalmazható a getString() metódus,azonban ilyenkor az eredményt String típusból a megfelelo típusra kell kon-vertálni. Az elokészített kifejezés (Prepared Statement) esetén a következomódon tudunk lekérdezést definiálni:

Page 158: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

158 FEJEZET 15. JAVA

String query="select nev, kor from ent_nevek where nev like ?";PreparedStatement lekerdezes = con.prepareStatement(query);lekerdezes.setString(1, "Trisztan");ResultSet rs=lekerdezes.executeQuery();

A lekérdezés karakterláncban a kérdojel jelzi a paraméter helyét. A para-méternek a PreparedStatement objektum setXXX metódusával tudunk érté-ket adni. A lekérdezést az executeQuery vagy executeUpdate metódusokkaltudjuk lefuttatni. Az eredmény feldolgozása a kifejezés objektumnál leírtmódon végezheto el. Az SQL utasításban természetesen használhatóak aJOIN-ok, UNION-k, . . . stb.

15.2.3. Tranzakció kezelés

A JDBC a tranzakciók kezelésével megvalósítja az ún. ACID feltételeket.

• Atomicity – vagy mindent végrehajt vagy semmit sem.

• Consistency – a rendszert konzisztens állapotban hagyja.

• Isolation – biztosítja a párhuzamosságot, egymástól független mukö-dést.

• Durability – a változások tartósak (a merevlemezre van írva).

Amikor a kapcsolat objektumot létrehozzuk akkor auto-commit módbanvan, azaz minden egyes SQL kifejezést külön tranzakcióként kezel és auto-matikusan továbbít, miután lefutattuk. Amennyiben azt szeretnénk, hogyegy vagy több lekérdezésünk egyszerre fusson le, akkor az auto-committulajdonságot hamisra kell állítani.

con.setAutoCommit(false);PreparedStatement updateSales = con.prepareStatement("UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ?");updateSales.setInt(1, 50);updateSales.setString(2, "Colombian");updateSales.executeUpdate();PreparedStatement updateTotal = con.prepareStatement("UPDATE COFFEES SET TOTAL = TOTAL + ? WHERE COF_NAME LIKE ?");updateTotal.setInt(1, 50);updateTotal.setString(2, "Colombian");updateTotal.executeUpdate();con.commit();con.setAutoCommit(true);

Page 159: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

15.2. JDBC 159

Ekkor a commit metódussal tudjuk lekérdezéseinket lefuttatni. Ha hibátészlelünk, akkor a tranzakció vissza tudjuk vonni a kapcsolat objektumrollback() metódusa segítségével.

...catch(SQLException ex) {System.err.println("SQLException: " + ex.getMessage());if (con != null) {try {System.err.print("Transaction is being ");System.err.println("rolled back");con.rollback();} catch(SQLException excep) {System.err.print("SQLException: ");System.err.println(excep.getMessage());}}

Page 160: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

160 FEJEZET 15. JAVA

15.3. Java Servlet

A Servlet-ek protokoll és platform független szerver oldali komponensekJava nyelven írva. Általános környezetet biztosítanak a kérés-válasz elvenmuködo szolgáltatásoknak. Az elsodleges feladatuk a biztonságos adathoz-záférés segítségével dinamikus, interaktív weboldalak szolgáltatása. Nincsgrafikus interfészük (mivel a szerveren futnak). Felfoghatóak a kliens oldaliJava Applet-ek szerver oldali párjának is. Olyan Java alkalmazások, melyekakkor és ott töltodnek le, ahol szükség van rájuk. A Servlet-ek felhasználásiterületeibol néhány:

• Egy egyszeru Servlet fel tudja dolgozni a HTTP protokoll POST cso-magjában érkezo adatokat.

• Mivel a Servlet-ek támogatják a párhuzamosságot, így segítségükkelegy közös munkavégzo környezet is kialakítható.

• Együtt tudnak muködni egymással, így a rendszerek közötti adatcse-rét is támogathatja.

• Egy Servlet a kéréseket át tudja küldeni egy másik szervernek, ígymegfelelo terhelés elosztás lehetséges.

15.3. ábra. Java Servlet

A sokoldalúsága mellett megfelelo teljesítményt is tud nyújtani, jobbat, minta CGI. CGI esetén minden egyes kérésre egy-egy új gyerek process indul. Ezta hibát már a FastCGI is kiküszöbölte, mivel ott már csak egy példányban futaz alkalmazás. Java Servlet-ek esetén szintén egy példányban, több szálonfut a Servlet. Jobb teljesítményt nyújt az FCGI-nél is, mivel Java Servlet-eknek könnyu szál váltó környezete van, ellentétben az FCGI nehéz szálváltó környezetével. A Java Virtual Mashine elonyeit kihasználva, a Javaprogramok minden további beavatkozás nélkül futnak több processzorosrendszeren is.

Page 161: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

15.3. JAVA SERVLET 161

15.3.1. A Servlet architektúra

A javax.servlet csomag tartalmazza azokat az interfészeket, osztályokat me-lyek szükségesek a servlet írásához. Minden servlet megvalósítja a Servletinterfészt közvetlenül, vagy egy olyan osztályból származtatva, mely meg-

15.4. ábra. Java Servlet osztályok

valósítja azt (pl.: HttpServlet). A Servlet interfész deklarálja, de nem valósítjameg azokat a metódusokat, melyek segítségével a servlet a kommunikációjátbonyolítja. A programozóknak kell ezek közül a megfeleloket megvalósí-tani. Amikor a servlet a klienssel kommunikál, megkapja a következo kétobjektumot:

• ServerRequest – magába foglalja a kliens-szerver kommunikációt, hoz-záférést biztosít a következokhöz:

– a kliens által biztosított információk (HTTP fejléc).

– a beviteli adatfolyamot (InputStream). A HTTP protokoll PUT ésPOST funkcióival elküldött adathoz férhet hozzá.

• ServerResponse – magába foglalja a szerver-kliens kommunikációt.Olyan eljárásokat biztosít a szerver számára melyekkel:

– a szerver specifikálhatja a válasz MIME kódját hosszát.

– biztosít egy kiviteli adatfolyamot (OutputStream), amin keresztüla servlet adatokat küldhet.

Egy egyszeru servlet:

Page 162: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

162 FEJEZET 15. JAVA

public class SimpleServlet extends HttpServlet{public void doGet (HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException{PrintWriter out;String title = "Simple Servlet Output";// beállítja a content type fejlécetresponse.setContentType("text/html");// adatokat ír a válaszbaout = response.getWriter();out.println("<HTML><HEAD><TITLE>");out.println(title);out.println("</TITLE></HEAD><BODY>");out.println("<H1>" + title + "</H1>");out.println("<P>Ez egy egyszerü servlet");out.println("</BODY></HTML>");out.close();}}

Felülírtuk a doGet metódust, mely akkor hívódik meg, amikor a kliensGET kérést intéz a szerverhez. A válasz a HttpServletResponse objektumbaníródik.

15.3.2. Együttmuködés a kliensekkel

A HTTP Servlet a service metódusán keresztül tartja a kapcsolatot a kliensek-kel. A service metódus minden szabványos HTTP kéréshez tartalmaz egymetódust, mely az adott szolgáltatást biztosítja. Például a service metódusmeghívja a doGet metódust. A service metódus a következo metódusokatbiztosítja:

• doGet – a GET a feltételes GET és a HEAD kérések kezelésére.

• doPost– a POST kérések kezelésére.

• doPut– a PUT kérések kezelésére.

• doDelete– a DELETE kérések kezelésére.

Alapértelmezésként ezek a metódusok BAD_REQUEST (400) hibaüzenetetküldenek vissza, azonban módunkban áll ezeket a metódusokat felülírni.A HttpServlet service metódusa meghívja a doOptions metódust, amikor aservlet egy OPTIONS kérést kap, a doTrace metódust. Ezek a metódusok aHTTP leírásai szerinti válaszokat adnak.

Page 163: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

15.3. JAVA SERVLET 163

public class BookDetailServlet extends HttpServlet {public void doGet (HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException{...response.setContentType("text/html");PrintWriter out = response.getWriter();out.println("<html>" +"<head><title>Book Description</title></head>" +...);String bookId = request.getParameter("bookId");if (bookId != null) {...}out.println("</body></html>");out.close();}...}

Felülírtuk a doGet metódust. A kérés paramétereit a request objektum get-Parameter("paraméter") metódusával tudjuk lekérdezni, válaszolni pedig aresponse objektum getWriter() metódusával beállított kimentre tudunk. Haegyszerre több kérés érkezik a szerverhez, akkor a servlet konténer többszálat indít el. Ezt úgy tudjuk megakadályozni, hogy az osztályunk meg-valósítja a SingleThreadModel interfészt. Ekkor csak egy példányban futhata servlet.

public class ReceiptServlet extends HttpServletimplements SingleThreadModel {public void doPost(HttpServletRequest request,HttpServletResponse response)...

A getServletInfo() metódus segítségével közzé tudjuk tenni a servlet felada-tának és egyéb paramétereinek rövid leírását mely bárki számára lekérdez-heto.

public class BookStoreServlet extends HttpServlet {...public String getServletInfo() {return "egy példa servlet " +"mely nem sok mindent csinál";v }}

Page 164: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

164 FEJEZET 15. JAVA

15.3.3. A Servlet életciklusa

A Java Servlet életciklusát a Servlet-et tartalmazó konténer (container) hatá-rozza meg. Amikor egy kérés érkezik, melynek teljesítése a Servlet-hez vankötve, a konténer a következo lépéseket hajtja végre:

• amennyiben nincs még betöltve, akkor:

– betölti a servlet osztályt.

– létrehozza egy példányát.

– inicialziálja az init metóduson keresztül.

• ha be van töltve, akkor meghívja a service metódust, átadva a requsetés response objektumokat.

• a szerver megsemmisíti a servlet-et (ez gyakran csak a szerver kikap-csolásánál fordul elo).

A servlet inicializálás csak betöltéskor fut le. Az init() metódus felülírásávaltudunk saját inicializálásról gondoskodni. Amennyiben nem sikerült a fo-lyamat, akkor azt jeleznünk kell a UnavailableException kivétel segítségével.

public void init() throws ServletException {try {

databaseUrl = getInitParameter("databaseUrl");connection = DriverManager.getConnection(databaseUrl,user, password);

} catch(Exception e) {throw new UnavailableException (this,"Nem tudom megnyitni az adatbázist!");

}

A servlet megsemmisítésérol is gondoskodhatunk. Oda kell figyelnünkarra, hogy a servlet leállításakor minden feladata megfeleloen befejezodjön.Amennyiben a servlet-nek vannak olyan feladatai, melyek hosszú ideigfutnak, akkor ezekkel a következo módon tudunk foglalkozni:

• követni kell az aktuálisan futó szálak számát.

• tiszta kilépést kell biztosítani úgy, hogy értesíteni kell a hosszú futá-sideju szálakat és meg kell várni a befejezést.

• a hosszú futásideju szálaknak idonként le kell ellenorizniük, hogyvan-e kilépés, ha igen, akkor be kell fejezniük a munkát és ki kelllépniük.

Page 165: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

15.3. JAVA SERVLET 165

Számláláspublic ShutdownExample extends HttpServlet {private int serviceCounter = 0;private Object lock = new Object();...//Access methods for serviceCounterprotected void enteringServiceMethod() {synchronized(lock) {serviceCounter++;}}protected void leavingServiceMethod() {synchronized(lock) {serviceCounter�;if (serviceCounter == 0 && isShuttingDown())notifyAll();}}protected int numServices() {synchronized(lock) {return serviceCounter;}}}

A fenti példa esetén a service metódus minden hívásánál növelni kell aszámlálót, kilépésnél pedig csökkenteni. Ezt úgy tudjuk megtenni, hogyfelülírjuk a metódust és a muveletek elvégzése után hívjuk meg az os servicemetódust.

protected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException{enteringServiceMethod();try {super.service(req, resp);} finally {leavingServiceMethod();}}

A tiszta kilépésnél a destroy() metódusnak nem szabad megsemmisíteniesemmilyen megosztott forrást, mindaddig amíg az összes igény ki nemlett elégítve. Egyrészt ellenorizni kell a futó szálak számát, másrészt érte-síteni kell a hosszú futásideju metódusokat arról, hogy bezár a bazár. Amuvelethez egy új állapotjelzo mezore van szükségünk.

Page 166: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

166 FEJEZET 15. JAVA

public ShutdownExample extends HttpServlet {private boolean shuttingDown;...//Access methods for shuttingDownprotected void setShuttingDown(boolean flag) {shuttingDown = flag;}protected boolean isShuttingDown() {return shuttingDown;}}

Az alábbi destroy() metódus értesíti a még futó szálakat a befejezésrol ésamíg van futó szál, addig vár.

public void destroy() {synchronized(lock) {if (numServices() > 0) {

setShuttingDown(true);}while(numServices() > 0) {

try {wait();

} catch (InterruptedException e) {}}}

}

A másik oldalon pedig a szálaknak figyelniük kell az állapotjelzot és a fela-datuktól függoen mindent rendbe tenni és kilépni, amennyiben felszólítjákoket a kilépésre.

public void doPost(...) {...for(i = 0; ((i < lotsOfStuffToDo) && !isShuttingDown()); i++) {

try {partOfLongRunningOperation(i);} catch (InterruptedException e) {}

}}

15.3.4. A kliens állapot elmentése

A kliens állapotának elmentésére két módszert használhatunk. Egyik akapcsolat követés (session tracking), a másik a sütikkel (cookies) történo álla-potmentés. A kapcsolat követés segítségével adott idotartam alatt a kérések

Page 167: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

15.3. JAVA SERVLET 167

során nyomon követjük a kliens állapotát. Egy kapcsolatot több servlet iskiszolgálhat.

Állapot követés (Session Tracking)

Az állapot követésnek a következo elemei lehetnek:

• le kell kérni a kapcsolathoz tartozó HttpSession objektumot.

• a szükséges adatokat lekérdezi vagy eltárolja a HttpSession. objek-tumban

• érvényteleníti a HttpSession objektumot (opcionális).

A HttpServletRequest objektum getSession metódusa segítségével tudjuk afelhasználói viszony (session) objektumot lekérdezni. Amennyiben a lét-rehozás (create) argumentum igaz érétku, akkor ha nincs ilyen objektum,létrehozza azt. A megfelelo muködés érdekében a getSession metódust méga kimenetre írás elott meg kell hívnunk.

public class CatalogServlet extends HttpServlet {public void doGet (HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException{// Get the user’s session and shopping cartHttpSession session = request.getSession(true);...out = response.getWriter();...}}

A HttpSession interfész a következo lekérdezo és módosító metódusokatbiztosítja:

• a szabványos viszony tulajdonságokat pl.: viszony azonosító kezelometódusok.

• alkalmazás adat kezelo metódusok.

Az alkalmazás adatok név-érték páronként vannak elmentve, itt a név egySting, az érték pedig egy objektum. Mivel több servlet is hozzáférhet azadatokhoz, egy megfelelo elnevezési módot kell kialakítanunk az egyesalkalmazások adatainak elmentéséhez. Ez megakadályozhatja a servlet-eket egymás adatainak felülírásában. Egy ilyen megoldás lehet a servlet-névelnevezési szabály. Itt a servlet-név a teljes servlet nevet takarja, beleértve atartalmazó csomagokat is.

Page 168: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

168 FEJEZET 15. JAVA

public class CatalogServlet extends HttpServlet {public void doGet (HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException{HttpSession session = request.getSession(true);ShoppingCart cart =(ShoppingCart)session.getAttribute("examples.bookstore.cart");if (cart == null) {

cart = new ShoppingCart();session.putAttribute("examples.bookstore.cart", cart);

}...

}}

A fenti példában a felhasználó kosárban lévo könyveket követi a rendszer(ShoppingCart). Mint a fenti példánkban láthattuk, a felhasználói viszo-nyokhoz (session) objektumokat rendelhetünk. A következo példában egykönyvet fogunk hozzáadni a kosárhoz.

public void doGet (HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException{HttpSession session = request.getSession(true);ShoppingCart cart =(ShoppingCart)session.getAttribute("examples.bookstore.cart");...

String bookId = request.getParameter("Buy");String bookToAdd = request.getParameter("Buy");if (bookToAdd != null) {

BookDetails book = database.getBookDetails(bookToAdd);cart.add(bookToAdd, book);out.println("<p><h3>" + ...);

}}

A felhasználó viszonyát meg lehet szüntetni manuálisan és automatiku-san is (pl.: a Java Web Server automatikusan megszünteti a kapcsolatot 30perc inaktivitás után), manuálisan az invalidate metódus segítségével tudjukmegszüntetni (ez azt jelenti, hogy a HttpSession objektumot megszüntetjük).

Page 169: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

15.3. JAVA SERVLET 169

public class ReceiptServlet extends HttpServlet {public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {

...scart=(ShoppingCart)session.getAttribute("examp.bookstore.cart");...session.invalidate();response.setContentType("text/html");out = response.getWriter();...

}}

Sütik (Cookies)

Sütik segítségével tárolhatunk információt a kliens gépen. A válasz HTTPfejléc mezokben tudjuk átküldeni, a kliens pedig automatikusan küldi akérés fejléc mezokben. Minden HTTP kérés és válasz fejlécnek van neve, asüti esetén ezt mi választjuk ki pl.: BookToBuy, értéket szintén mi adhatunkpl.: 304qty1. Ezek az értékek azt jelenthetik, hogy a kliens meg akarja vennia 304-es számú könyvet egy példányban. Több sütit is tudunk egyszerre(max 12, ill. darabonként max. 4 kbyte.) küldeni, melyeknek a neveazonos lehet. A sütik, melyeket a szerver a kliensen tárol, csak a szervernekadhatók vissza, így a szerveren lévo servlet-ek közösen használják a sütiket.A süti elküldése a következo lépésekbol állhat:

• a süti objektum létrehozása.

• a megfelelo paraméterek beállítása.

• a süti elküldése.

Információ kinyerése sütibol:

• minden süti kinyerése a kérés objektumból.

• a megfelelo süti kikeresése.

• az érték lekérdezése.

Page 170: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

170 FEJEZET 15. JAVA

public void doGet (HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException{...if (values != null) {

bookId = values[0];Cookie getBook = new Cookie("Buy", bookId);getBook.setComment("User has indicated a desire " +"to buy this book from the bookstore.");response.addCookie(getBook);

}...}

A new Cookie() metódussal létrehozzuk a süti objektumot, majd megjegyzéstfuzünk hozzá, ezután a válasz objektumhoz csatoljuk (addCookie()). Értékkeresése a sütiben:

public void doGet (HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException{

...String bookId = request.getParameter("Remove");...if (bookId != null) {

Cookie[] cookies = request.getCookies();for(i=0; i < cookies.length; i++) {

Cookie thisCookie = cookie[i];if (thisCookie.getName().equals("Buy") &&

thisCookie.getValue().equals(bookId)) {thisCookie.setMaxAge(0);

}}

}response.setContentType("text/html");PrintWriter out = response.getWriter();out.println("<html> <head>" +"<title>Your Shopping Cart</title>" + ...);

15.3.5. Információ megosztás Servlet-ek között

A kliensek kiszolgálásához a servlet-eknek idonként szükségük van másservlet-ektol származó információkra. Amennyiben a másik servlet egy má-sik gépen található, akkor például egy HTTP kérés keretében tudja lekér-dezni a szükséges információt. Most azt az esetet vizsgáljuk meg, amikor a

Page 171: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

15.3. JAVA SERVLET 171

kommunikáló servlet-ek egy gépen vannak. Ez esetben a RequestDispatcherobjektumra van szükségünk, melynek elééréséhez meg kell adnunk a célservlet elérési útvonalát (URL). pl.:

• /servlet/myservlet

• /servlet/tests/MyServlet.class

• /myinfo.html

Más Servlet eroforrásainak használata

public class BookStoreServlet extends HttpServlet {public void service (HttpServletRequest request,HttpServletResponse response)

throws ServletException, IOException {RequestDispatcher dispatcher =

getServletContext().getRequestDispatcher("/bookstore/bookstore.html");if (dispatcher == null) {response.sendError(response.SC_NO_CONTENT);

}}}

A fenti példában azt is ellenoriztük, hogy van-e ilyen eroforrás, ha nincs,akkor egy hibaüzenetet küldünk. Miután sikeresen megszereztük az ero-forrás leíróját, át tudjuk neki adni a kérést. A továbbítás igen hasznoslehet amikor például egy servlet feldolgozza a kérést, de a válasz általános.Ilyenkor a kérést feldolgozás után továbbíthatja a válaszadó servlet-nek.

public class BookStoreServlet extends HttpServlet {public void service (HttpServletRequest request,HttpServletResponse response)

throws ServletException, IOException {...

HttpSession session = request.getSession();dispatcher.forward(request, response);

...}}

A forward metódus használata esetén nem szabad használnunk a ServletOut-putStream-et. Amennyiben már megtettük, az include metódus segítségéveltudjuk továbbküldeni a kérést (egyébként hibát jelez).

Page 172: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

172 FEJEZET 15. JAVA

public class ReceiptServlet extends HttpServlet {public void doPut(HttpServletRequest req,HttpServletResponse res)

throws ServletException, IOException {...res.setContentType("text/html");PrintWriter toClient = res.getWriter();...toClient.println("Thank you for your order!");RequestDispatcher summary =getServletContext().getRequestDispatcher("/OrderSummary");if (summary != null)

try {summary.include(req, res);

} catch (IOException e) {} catch (ServletException e) {}

toClient.println("Come back soon!");toClient.println("</html>");toClient.close();

}

Mivel a servlet a RequestDispatcher.include metódust hívja meg, használhatjaa PrintWriter objektumot, hogy válaszoljon a kliensnek. A példában azelso servlet megköszöni a kliensnek a vásárlást, a másik pedig, amennyibenlehetséges, kilistázza a megvásárolt árukat.

Eroforrásmegosztás Servlet-ek között

Az egy szerveren futó, egy feladathoz tartozó servlet-ek idonként megoszt-ják az eroforrásaikat. A ServletContext interfész metódusai segítségévelmanipulálhatják a ServletContext interfész tulajdonságait (setAttribute, ge-tAttribute, removeAttribute). Az ütközések elkerülése végett, itt is célszerubizonyos elnevezési szabályokat betartani, ilyenek például a csomag alap-ján elnevezett változók: examples.bookstore.database.BookDBFrontEnd. AServletContext.setAttribute metódus segítségével lehet egy tulajdonságot be-állítani, ezt a muveletet általában az inicializálás során végzik el a servlet-ek,ilyenkor oda kell figyelniük arra, hogy más nem állította-e be már a változóértékét.

Page 173: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

15.3. JAVA SERVLET 173

public class CatalogServlet extends HttpServlet {public void init() throws ServletException {

BookDBFrontEnd bookDBFrontEnd = ...if (bookDBFrontEnd == null) {

getServletContext().setAttribute("examples.bookstore.database.BookDBFrontEnd",BookDBFrontEnd.instance());

}}

...}

Page 174: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

174 FEJEZET 15. JAVA

Page 175: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

16. fejezet

Szerver oldali programozás

175

Page 176: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

176 FEJEZET 16. SZERVER OLDALI PROGRAMOZÁS

16.1. PHP

A PHP (PHP: Hypertext Preprocessor) egy széles körben használt, nyílt for-ráskódú, általános célú programozási nyelv, különösen jó web fejlesztéstámogatással és HTML-be ágyazási képességekkel. A szintakszisa a C, Javaés Perl nyelvekre épül, könnyen megtanulható. A nyelv fo célja lehetoségetteremteni dinamikusan generált weboldalak gyors készítésére, de a PHPennél sokkal többre is képes. A PHP foleg szerver-oldali szkriptek írásárakészült, azaz bármire képes, amit más CGI programok el tudnak végezni,ilyen funkciók az urlap adatok feldolgozása, dinamikus tartalom generá-lása, vagy sütik küldése és fogadása. Három fo területen használnak PHPprogramokat.

• Szerver oldali programozás. – Ez a hagyományos és fo használatiformája a PHP-nek. Három komponens szükséges ahhoz, hogy ezt aformát használhassuk: PHP értelmezo (CGI vagy szerver modul for-májában), webszerver és webböngészo. Egy webszerverrel minden-képpen rendelkezni kell, megfeleloen telepített és beállított PHP-vel.A PHP program kimenetét a webböngészovel lehet megtekinteni, aszerveren keresztül elérve a szkriptet.

• Parancssori programozás. – PHP programok szerver és böngészonélkül is futtathatóak. Ha ilyen környezetben szeretnénk használni aPHP-t, csak a PHP értelmezore van szükségünk. Ebben a formábangyakran cron-al (ütemezo Windows-on) futtatott programokat írnak,vagy egyszeru szövegfeldolgozó szkripteket készítenek.

• Kliens-oldali ablakozós alkalmazások írása. – A PHP-GTK-t felhasz-nálva kliens oldali operációsrendszer független programokat írha-tunk.

A PHP használható a legfontosabb operációs rendszereken. A PHP a leg-több webszervert is támogatja. A legtöbb szerverhez a PHP modul szintutámogatást nyújt, de más a CGI szabványt támogató szerverekkel is együtttud muködni CGI feldolgozóként. A PHP támogatja a kommunikációt másszolgáltatásokkal is különbözo protokollok segítségével, úgy mint LDAP,IMAP, SNMP, NNTP, POP3, HTTP, COM , . . . . A PHP rendkívül jó szö-vegfeldolgozó képességekkel rendelkezik, a POSIX és Perl reguláris kifeje-zésektol az XML állományok kezeléséig. Az XML dokumentumok feldol-gozásához és eléréséhez a SAX és DOM szabványok is használhatók.

16.1.1. Alapveto szintaxis

Amikor a PHP feldolgoz egy fájlt, akkor egyszeruen a kimenetre másol min-den karaktert, amíg nem találkozik valamelyik speciális jelöléssel, amelyet

Page 177: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

16.1. PHP 177

PHP kódrészlet kezdeteként értelmez. Ekkor a PHP futtatni kezdi a zá-rójelölésig található összes kódot. Ezzel a muködési elvvel lehet könnyenHTML oldalakba elhelyezni PHP kódot, mivel mindent, ami a PHP nyitó-és zárójelölésein kívül esik, teljes mértékben békén hagy és csak az ezekenbelüli tartalmat értelmezi programkódként. Négyféle jelöléssel lehet az ál-lomány bizonyos részeit PHP kódként megjelölni. Ezek közül csak kettohasználható bármilyen esetben:

<?php. . .?>és a<script language="php">. . .</script>

A másik ketto ki és bekapcsolható a php.ini konfigurációs fájlban. Bára rövid vagy az ASP-stílusú formák kényelmesnek tunnek, egyszersmindkevésbé hordozhatók, mint a hosszabb változatok. Emellett, ha XML vagyXHTML fájlokba kell PHP kódot illeszteni, azt csak<?php...? > alakkal lehet- igazodva az XML ajánláshoz.

1. <? echo ("Ez a egy XML processing utasítás\n"); ?><?= $valtozo; # Ez egy rövidítése a "<? echo ..?>"-nak ?>2. <?php echo("Ha XHTML vagy XML dokumentumokat is akarunkszolgáltatni," ."ez hasznos lehet.\n"); ?>3. <script language="php">echo ("Ez is megadási mód");</script>4. <% echo ("Használhatunk ASP-stílusú tag-eket"); %><%= $valtozo; # Ez egy rövidítése a "<% echo ..%>"-nak %>

A PHP a következo struktúrák használatát is megengedi:

<?php if ($igazez) { ?><strong>Igaz a változó tartalma</strong><?php } else { ?><strong>Hamis a változó tartalma</strong><?php } ?>

Nagy méretu szövegblokkok kiíratásakor hatékonyabbnak bizonyulhat ide-iglenesen elhagyni a PHP módot, mint mindezt a szöveget echo(), print()vagy ehhez hasonló függvényekkel kiíratni. Az utasítások - a C és a perlnyelvhez hasonlóan - pontosvesszovel végzodnek. A záró tag (? >) szinténfeltételezi az utasítás végét, tehát az alábbiak egyenértékuek:

Page 178: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

178 FEJEZET 16. SZERVER OLDALI PROGRAMOZÁS

<?phpecho "Ez egy teszt";?><?php echo "Ez egy teszt" ?>

16.1.2. Változók

PHP-ban a változókat egy dollárjel utáni változónév jelöli. A változónevekérzékenyek kis- és nagybetuk különbözoségére. A változó típusát rendsze-rint nem a programozó adja meg, hanem a PHP futási idoben határozzameg a változó környezetétol függoen. Ha egy változó típusát egy adotttípusra kell konvertálnunk, átalkíthatjuk (cast) a változót, vagy alkalmaz-zuk rá a settype() függvényt. A változó különbözoképp viselkedhet bizo-nyos helyzetekben, attól függoen, hogy az adott pillanatban milyen típusú.Közvetlen érték adás mellet lehetoségünk van a változó referencia szerintihozzárendelésére is, amihez egyszeruen & jelet kell az átadandó változóneve elé írni.

<?php $a = ’Bob’;$b = &$a; ?>

A PHP számos elore definiált változót biztosít számára, a legtöbb CGI (12.fejezet) változót támogatja.

A változók hatásköre

A legtöbb esetben minden PHP változónak egyetlen hatásköre van. Ez ki-terjed az include és a require segítségével használt fájlokra is. A felhasználóifüggvényekkel a lokális függvényhatáskör kerül bevezetésre. Alapértel-mezés szerint minden, függvényen belül használt változó ebbe a lokálisfüggvényhatáskörbe tartozik. A globális változók alapesetben nem érhe-toek el a függvények belso hatókörébol. Két módon tudjuk elérhetové tenniglobális változónkat: global kulcsszóval kell deklarálni a függvényekben,vagy a PHP által definiált speciális $GLOBALS tömb használata.

Page 179: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

16.1. PHP 179

$a = 1;$b = 2;function Osszead(){static ezmarad;global $b;$GLOBALS["b"] = $GLOBALS["a"] + $b;}Osszead();echo $b;

A változók élettartama

A függvények belso változói a függvényhívások között megszunnek. Astatic kulcsszóval megoldhatjuk egy változó rögzítését.

$a = 1;$b = 2;function Osszead(){static $c;global $a;$c=$c+$a;}Osszead();echo $b;

Változók a PHP-n kívülrol

Egy HTML urlap (form) elküldésével az urlap összes beviteli mezojénekértéke automatikusan elérhetové válik a szkript számára, a PHP segítségé-vel. Ezek a változók a $HTTP_POST_VARS, $HTTP_GET_VARS és $HTTP_POST_FILES, asszociatív tömbökben foglalnak helyet a változók forrásánakmegfeleloen.

<form action="foo.php" method="post">Name: <input type="text" name="usernev"><br><input type="submit"></form>. . .foo.php:<?php echo "A bevitt név:"+$HTTP_POST_VARS[’usernev’]; ?>

Ha a register_globals beállítás aktív, akkor ez a változó elérheto lesz $usernevglobális változóként is. A PHP támogatja a Netscape specifikációja általdefiniált HTTP sütiket. A sütiket a setcookie() függvénnyel lehet beállítani.

Page 180: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

180 FEJEZET 16. SZERVER OLDALI PROGRAMOZÁS

$Szamlalo++;setcookie("Szamlalo", $Szamlalo, time()+3600);

16.1.3. Konstansok

A konstans egy egyszeru érték azonosítója (neve). A program futása soránnem változik meg az értéke. A konstansok alapesetben érzékenyek a kis-és nagybetus írásmódra. Megállapodás szerint általában csupa nagybetusneveket adunk a konstansoknak, melyeket a define() függvénnyel lehet lét-rehozni. Definiálásuk után késobb nem lehet törölni vagy megváltoztatniaz értéküket. Csak skaláris adat (boolean, integer, double vagy string típusú)lehet egy konstans tartalma.

<?phpdefine("KONSTANS", "Helló világ!");echo KONSTANS; // kiírja, hogy "Helló világ!"?>

16.1.4. Operátorok

Az aritmetikai, bitorientált, összehasonlító, növelo/csökkento, logikai ope-rátorok a C++ nyelvben használt operátorok. A PHP-ban létezik egyprogram-végrehajtó operátor: a visszaidézojel ( ‘ ‘). A PHP megpróbáljaa karakterlánc tartalmát parancssorból futtatandó utasításként végrehaj-tani, amelynek a kimenete lesz az operátor értéke. Ez nem egyszeruen akimenetre kerül, hanem hozzárendelheto egy változóhoz.

<?php$output = ‘ls -al‘; echo "<pre>$output</pre>"; ?>

Két karakterlánc operátor van. Az egyik az összefuzés operátor (’.’), amelybal és jobb oldali operandusának összefuzöttjével tér vissza. A másodikaz összefuzo-hozzárendelo operátor (’.=’), amely hozzáfuzi a jobb oldalonszereplo szöveges értéket a bal oldali operandus végéhez.

<?php$a = "Para ";$b = $a . "Zita"; // most $b értéke "Para Zita"$a = "Dárdarázó ";$a .= "Lajos"; // most $a értéke "Dárdarázó Lajos"?>

Page 181: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

16.1. PHP 181

16.1.5. Vezérlési szerkezetek

Az alábbi vezérlési szerkezeteket használhatjuk:

• if – PHP a C-ben megismerthez hasonló if szerkezettel bír:

if ($a > $b) print "a nagyobb, mint b";

• else

if ($a > $b) { print "a nagyobb, mint b"; } else { print "a NEM nagyobb,mint b"; }

• elseif

if ($a == "jó válasz") {print "ó válasz!";} elseif ($a == ’rossz válasz’) {print "rossz válasz!";} else {print "Ez vajon milyen lehet?";}

• while

while ($i <= 10) {print $i++;}

• do..while

$i = 0;do {print $i++;} while ($i<10);

Page 182: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

182 FEJEZET 16. SZERVER OLDALI PROGRAMOZÁS

• for

for ($i = 1; $i <= 10; $i++) {print $i;}

• foreach – A tömbökön végez iterációt.

foreach ($tomb as $kulcs => $ertek) {echo "Kulcs: $kulcs, Érték: $ertek<br>\n";}

• break – A break azonnal kilép az aktuális for, foreach, while, do..whileciklusból vagy switch szerkezetbol.

• continue – A continue ciklusok belsejében használható arra, hogy átu-gorjuk az aktuális iteráció hátralevo részét, és a végrehajtást a követ-kezo iterációval folytassuk.

• switch

switch ($i) {case 0:print "i most 0";break;case 1:print "i most 1";break;case 2:print "i most 2";break;v }

• declare – A declare egy kódblokk számára adott futtatási direktívákbeállítását teszi lehetové. A declare blokk utasítás része mindig egyszerfut le. Az, hogy miképp és milyen mellékhatásokkal, a direktívarészben megadottaktól függ.

• return – A return() utasítás függvényen belül használva azonnal be-fejezi a folyó függvény futását és a paramétereként megadott értékszolgáltatja a függvény visszatérési értékét.

Page 183: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

16.1. PHP 183

• require() – A require() beilleszti és feldolgozza a megadott fájlt. Ha aznem létezik akkor megszakítja a program futását (fatális hibát jelez)

<?phprequire ’prepend.php’;require $valamifajl;require (’valamifajl.txt’);?>

• include() Az include() beilleszti és feldolgozza a megadott fájlt. Ha aznem létezik, hibát jelez, de nem szakítja meg a program futását.

valtozok.php<?php$szin = ’zöld’;$gyumolcs = ’alma’;?>teszt.php<?phpecho "Egy $szin $gyumolcs"; // Egyinclude ’valtozok.php’;echo "egy $szin $gyumolcs"; // Egy zöld alma?>

• require_once() – Az require_once() beilleszt és feldolgoz fájlokat a pro-gram futása közben. Ez hasonló a require() muködéséhez, azzal afontos különbséggel, hogy a már egyszer beillesztésre került kódot aPHP nem próbálja meg ismét betölteni

• include_once() – Az include_once() beilleszt és feldolgoz fájlokat a pro-gram futása közben. Ez hasonló az include() muködéséhez, azzal afontos különbséggel, hogy a már egyszer beillesztésre került kódot aPHP nem próbálja meg ismét betölteni.

16.1.6. Függvények

Függvényeket a következo szintaxis szerint definiálhatjuk:

function foo ($arg_1, $arg_2, ..., $arg_n){echo "Példa függvény.\n";return $retval;}

Page 184: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

184 FEJEZET 16. SZERVER OLDALI PROGRAMOZÁS

Bármely érvényes PHP kód megjelenhet egy függvényen belül, akár mégmás függvény vagy osztály definíciók is. A PHP nem támogatja a függvé-nyek polimorfizmusát (többalakúságát), a függvény definíciókat nem lehetmegszüntetni vagy újradefiniálni. A PHP támogatja az érték szerinti (ez azalapértelmezett) referenciakénti paraméterátadást is, és az argumentumokkezdoértékét. Ha egy függvényargumentumot mindig referencia szerintkell átadni, akkor a függvénydefinícióban az argumentum neve elé egy &jelet kell írni.

function fgv_extrakkal(&$string){$string .= ’és a szükséges plusssz.’;}$str = ’Ez egy karakterfüzér, ’;fgv_extrakkal($str);echo $str;

A függvény skalár argumentumainak megadhatunk kezdoértéket a C++szintakszisnak megfeleloen:

function kavet_csinal ($tipus = "cappucino")

return "Csinálok egy pohár " . $tipus . "t.\n";

echo kavet_csinal ();echo kavet_csinal ("espresso");

16.1.7. Osztályok, objektumok

A C++ nyelvtanához nagyon hasonló módon tudunk itt is osztályokat de-finiálni, példányosítani. Használhatjuk az öröklodést is (extends), valamintkonstruktor metódust.Viszont nincs destruktor. A :: operátor segítségé-vel hivatkozhatunk az ososztály metódusaira. Erre a célra használhatjuk aparent kulcsszót is.

Page 185: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

16.1. PHP 185

class A{

function pelda(){

echo "Én A::pelda() vagyok <br>\n";}

}class B extends A{

function pelda(){

echo "Én B::pelda() vagyok több funkcióval.<br>\n";parent::pelda();

}}$b = new B;// Ez a B::pelda() metódust hívja, ami az A::pelda()-t hívja$b->pelda();

aosztaly.inc:class A{var $egy = 1;function egyet_mutat(){

echo $this->egy;}}

elso.php:include("aosztaly.inc");$a = new A;$s = serialize($a);$fp = fopen("tarolas", "w");fputs($fp, $s);fclose($fp);

masodik.php:include("aosztaly.inc");$s = implode("", @file("tarolas"));$a = unserialize($s);// most már használható az egyet_mutat() metódus$a->egyet_mutat();

Objektumainkat elmenthetjük a serialize() metódus segítségével, visszatöl-teni pedig a unserialize() metódussal tudjuk. Arra oda kell figyelnünk, hogymentésnél és beolvasásnál is definiálva legyen osztályunk (mivel a függvé-nyek nem mentodnek el, enélkül egy stdClass osztály egy példánya lesz azeredmény)

Page 186: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

186 FEJEZET 16. SZERVER OLDALI PROGRAMOZÁS

16.1.8. Együttmuködés Webszerverrel

Három különbözo módja lehetséges.

• Az elso lehetoség, hogy a PHP-t CGI-ként használjuk. Így mindenoldal lekérésekor és feldolgozásakor egy új példány fut le a PHP fel-dolgozóból. Mivel a szkript futtatása után egy ilyen példány leáll,minden eroforrás, amit lefoglalt (beleértve az adatbázis kapcsolatoto-kat), megszunik.

• A második forma, amikor a PHP-t modulként futtatjuk egy több pro-cess-es webszerverben, mely webszerver tipikusan rendelkezik egyszülo process-el, ami koordinálja a többi kapcsolódó process (a gyerme-kek) munkáját, melyek valójában a weboldalak kiszolgálását végzik.Ha kérés érkezik egy klienstol, akkor egy éppen szabad gyermek-process kapja meg a kiszolgálásra az utasítást. Ez azt jelenti, hogyha ugyanaz a kliens egy újabb kapcsolatot kezdeményez, esetleg egymásik gyermek-process-hez jut, mint az elso alkalommal.

• A harmadik módszer, hogy a PHP-t plug-in-ként használjuk egy több-szálú web szerverben. Ez azt jelenti, hogy az ISAPI, WSAPI, és NSAPI(Windows alatt) formák használhatóak a PHP-vel. A PHP alkalmasplug-in szintu együttmuködésre a Netscape FastTrack (iPlanet), aMicrosoft Internet Information Server (IIS), és az O’Reilly Web-Site Pro szerverekkel, valamint más, a fenti szabványokat támogatószerverekkel.

16.1.9. Együttmuködés adatbázisokkal

Az egyik legjobb és legfontosabb tulajdonsága a nyelvnek az adatbázisokszéles köru támogatása. Adatbázisokat kezelo weblap készítése PHP se-gítségével hihetetlenül egyszeru. A PHP rendelkezik egy DBX adatbázisabsztrakciós kiterjesztéssel is, amellyel egyöntetuen és áttetszo módon lehetkezelni bármilyen adatbázist, amit ez a kiterjesztés támogat. Ezen kívül aPHP támogatja az ODBC-t, ezért bármilyen más, ezt a szabványt támogatóadatbázishoz is lehet kapcsolódni. Az adatbázis kapcsolatot a megfelelo il-leszto függvénnyel tudjuk létrehozni. A kapcsolat lehet állandó és változó.Állandó kapcsolat esetén a szkript futtatása után nem bontódik a kapcso-lat. Ha egy állandó kapcsolatot kérünk, a PHP ellenorzi, hogy van-e mármegegyezo kapcsolat (ami még az elozo kérésekbol maradhatott meg), ésha létezik, akkor azt használja. MySQL esetén:

resource mysql_pconnect ( [string server [, string username [, stringpassword]]])

Page 187: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

16.1. PHP 187

A mysql_pconnect() függvény létrehoz egy kapcsolatot a MySQL szerverrel.Az elhagyott paraméterek az alábbi értékeket veszik fel: server = ’local-host:3306’, username = annak a felhasználónak a neve, akié a szerver folya-mat és végül: password = üres jelszó. A kapcsolat sikeres felépítése utánamennyiben nem az alapértelmezett adatbázist használjuk, ki kell válasz-tanunk a megfelelot. Erre a mysql_select_db függvényt használhatjuk.

bool mysql_select_db ( string database_name [, resourcelink_identifier])

A mysql_select_db() függvény az adott kapcsolat-azonosítójú szerverkapcso-lat adatbázisát módosítja. Ha nincs kapcsolat-azonosító megadva, akkor azutoljára megnyitott kapcsolatban választ adatbázist. Ezután lefuttathatjuka lekérdezésünket. Erre a mysql_query() függvény használható.

resource mysql_query ( string query [, resource link_identifier])

A mysql_query() függvény kérést küld a megadott kapcsolat-azonosítójúszerver aktív adatbázisához. Ha nem adunk meg kapcsolat-azonosítót, ak-kor a legutóbb megnyitott kapcsolatot használja a függvény. Eredménykéntegy result objektumot ad vissza melybol több különbözo módon is kinyer-hetjük az adatokat. Egyik mód a mysql_fetch_object() metódus használatamely olyan objektumokat ad vissza ahol az objektum tulajdonságainak ne-vei megegyeznek a lekérdezésnél használt érték mezokkel és az értékeikpedig az értékekkel.

object mysql_fetch_object ( resource result [, int result_type])

Az eddigiek egy példában:

<?phpmysql_connect ($host, $felhasznalo, $jelszo);$eredmeny = mysql_db_query ("adatbázis", "select * from table");while ($sor = mysql_fetch_object ($eredmeny)) {

echo $sor->user_id;echo $sor->fullname;

}mysql_free_result ($eredmeny);?> }

Page 188: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

188 FEJEZET 16. SZERVER OLDALI PROGRAMOZÁS

16.2. ASP (Active Server Pages)

Az ASP egy nyílt alkalmazás környezet, melyben HTML kódok, szkriptek ésActiveX objektumok segítségével dinamikus weboldalakat generálunk. AzASP a VBScript és a JScript szkriptnyelveket támogatja, viszont csak IIS (In-ternet Information Server)-en futtatható. Megadhatjuk melyik szkriptnyelvetszeretnénk használni. A VBScript az alapértelmezett.

<%@ language="javascript" %><html>...

Az ASP fájlban, hasonlóan a PHP fájlhoz, HTML kód és szkript részek keve-réke található. Az ASP szkript kód <% itt van%> jelek között helyezkedikel. Kezelése hasonló, mint a PHP esetén megismert. A kód több különállórészben helyezkedhet el és a különálló részben lévo végrehajtott utasításokvonatkoznak a közrefogott egyéb kódra is.

<% for i=0 to 5%><li> ezt fogja 5-ször kiírni<% next%>

A szkriptnyelvek minden lehetoségét kihasználhatjuk, mivel ezeket a 13.2fejezetben és a 13.1 fejezetben már leírtuk, itt nem térünk ki a szintaxisra.Figyelem ! A HTML objektumokat, metódusokat természetesen nemtudjuk használni, mivel a szkript még a szerveren lefut a HTML válaszkészítése közben. Lehetoségünk van egyes kód részleteket több helyen isfelhasználni. Az #include parancs segítségével fájlok tartalmát fuzhetjük bekódunkba.

<html><body><h3>Példa</h3><p><!�#include file="tarolo\1.inc"�></p><h3>Második:</h3><p><!�#include virtual="tarolo/2.inc"�></p></body></html>

A virtual kulcsszóval a virtuális könyvtáron belüli útvonalat adhatjuk meg.A file kulcsszóval a fájlrendszerbeli relatív adhatjuk meg.

Page 189: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

16.2. ASP (ACTIVE SERVER PAGES) 189

16.2.1. Az Objektum modell

Az ASP szkript környezet egy objektum modellen alapul. A beépített ob-jektumok segítségével érhetjük el a különbözo szolgáltatásokat.

Viszony (Session) objektum

Az ASP egy egyedi sütit generál minden felhasználónak, melyet elküldszámára. Ezt az interfészt megvalósító objektumot nevezik viszony objek-tumnak. A viszony objektumban tárolják a felhasználóról rendelkezésreálló információkat. A leggyakrabban tárolt információ a név,az id és a beál-lítások. A szerver minden egyes új felhasználónak új viszony objektumotgenerál. A lejárt objektumokat megsemmisíti. Egy viszony kezdodik, ha:

• Egy új felhasználó kér egy asp fájlt és a Global.asa fájl tartalmazza aSession_OnStart eljárást.

• Amikor egy értéket eltárolunk a viszony objektumban.

• Amikor egy felhasználó asp fájlt kér és a Global.asa fájl az <object>elemet tartalmazza egy a viszonyhoz fuzodo objektum létrehozására.

Egy viszony akkor szunik meg, amikor a felhasználó inaktív egy adottidotartamig (20 perc az alapértelmezett). Ezt könnyen megváltoztathatjuka Timeout tulajdonság segítségével.

<%Session.Timeout=5%>

A viszonyt bonthatjuk az Abandon metódus segítségével.

<%Session.Abandon%>

Viszony objektumokban saját adatokat is tárolhatunk. A Contents metódussegítségével adatot olvashatunk ki, míg a Session("valtozónév") segítségévelsaját adatokat adhatunk hozzá. A Remove metódussal törölhetünk változót.

<%Session("nev")="Nagy Lajos"Resopnse.Write Session.Contents("nev")Session.Contents.Remove("nev")%>

Page 190: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

190 FEJEZET 16. SZERVER OLDALI PROGRAMOZÁS

Ciklust használhatunk a tárolt adatok listázásra:

<%dim iFor Each i in Session.ContentsResponse.Write(i & "<br>")Next%>

Alkalmazás (Application) objektum

Az olyan asp fájlok csoportját, mely együttmuködik egy közös cél érde-kében, alkalmazásnak nevezzük. Az alkalmazás objektum feladata ezenfájlok összefogása. A viszony objektumhoz hasonlóan, változókat tárolha-tunk benne. A különbség az, hogy míg minden felhasználó számára különviszony objektum van, addig a felhasználók osztoznak az alkalmazás ob-jektumon. Az adatok írása olvasása ugyanúgy muködik, mint a viszonyobjektumnál, azzal a külömbséggel, hogy itt a többfelhasználós jellegéboleredoen lehetoségünk van az objektum zárolására a Lock metódussal.

<%Application.LockApplication("kliensszam")=Application("kliensszam")+1Resopnse.Write "Online: "+Application("kliensszam")Application.Unlock%>

Válasz (Response) objektum

Az ASP válasz objektum segítségével küldünk információkat a kliensnek.A következo kollekciókkal collections rendelkezik:

• Sütik Cookies – Beálltja a süti értékét, ha nincs, akkor létrehozza.

<%Response.Cookies("firstname")="Alex"Response.Cookies("firstname").Expires="May 10,2002" %>

A következo tulajdonságokkal rendelkezik:

• Buffer – Beállíthatjuk, hogy tárolni szeretnénk a lapot, vagy pedigazonnal küldeni.

Page 191: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

16.2. ASP (ACTIVE SERVER PAGES) 191

<%response.Buffer=true%><p>Ezt nem fogja elküldeni<%response.Clear%><p>Ezt elküldi<%response.Flush%></body></html>

• CacheControl – Beállíthatjuk, hogy a proxy szerver tárolhatja-e a lapot.

<%response.CacheControl="Public"%>vagy<%response.CacheControl="Private"%>

• Charset – A content-type fejlécmezo charset mezojének értéket állíthat-juk be.

<%response.Charset="ISO-8859-2"%>

• ContentType – A HTTP content-type mezo értékét állíthatjuk be.

<%response.ContentType="text/HTML"%>

• Expires – Elévülési ido a böngészo számára.

<%response.Expires=1440%>

• ExpiresAbsolute – Elévülési dátum a böngészo számára.

<%response.ExpiresAbsolute=#October 11,2003 16:00:00#%>

Page 192: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

192 FEJEZET 16. SZERVER OLDALI PROGRAMOZÁS

• IsClientConnected – Le lehet kérdezni a kliens állapotát (csatlakozvavan-e)

<%If response.IsClientConnected=true thenresponse.write("Csatlakozva van!")elseresponse.write("Nincs csatlakozva!")end if %>

• Pics – Hozzáad egy értéket a PICS (Platform for Internet Content Selec-tion) fejléc mezohöz (Ez a tartalom értékelésére szolgál)

• Status – A szerver által küldött állapotleírást adhatjuk meg.

<%ip=request.ServerVariables("REMOTE_ADDR")if ip<>"194.248.333.500" thenresponse.Status="401 Üdv ide nem johetsz be."response.Write(response.Status)response.Endend if%>

A következo metódusokat használhatjuk:

• AddHeader – Egy új HTTP fejlécet ad a HTTP válaszhoz.

<%Response.AddHeader "WARNING","Error message text"%>

• AppendToLog – Egy karakterláncot ad a szerver log bejegyzéséhez.

<%Response.AppendToLog "My log message"%>

• BinaryWrite – Az adatot konverzió nélkül a kimenetre küldi.

Page 193: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

16.2. ASP (ACTIVE SERVER PAGES) 193

<% Set objBinaryGen=Server.CreateObject("MyComponents.BinGen")pic=objBinaryGen.MakePictureresponse.BinaryWrite pic%>

• Clear – Törli a tárolt HTML kimenetet

• End – Befejezi a szkript futtatását és visszatér az eddig a pontig fel-dolgozott eredménnyel.

<html><body><p>Ez elmegy<%Response.End%>Ez nem</p></body></html>Kimenet:Ez elmegy

• Flush – A HTML kimenetet elküldi.

• Redirect – Átirányít egy másik URL-re

<% Response.Redirect "http://wilma.cab.u-szeged.hu/" %>

• Write – A kimentre írja a megadott karakterláncot

Kérés (Request) objektum

Amikor a böngészo lekér egy oldalt a szervertol akkor a kérés objektumtartalmazza a szerveren a kérés paramétereit. A következo gyujteményekettartalmazza:

• ClientCertificate – A kliens bizonyítványának minden mezojét tartal-mazza.

• Cookies – A sütik értékeit tartalmazza.

Page 194: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

194 FEJEZET 16. SZERVER OLDALI PROGRAMOZÁS

variablename=Request.Cookies(name)[(key).attribute]<%fname=Request.Cookies("firstname")response.write("Firstname=" & fname)%>

• Form – A HTML urlap értékeit tartalmazza.

Request.Form(element)[(index)|.Count]Példa:<form action="submit.asp" method="post"><p>First name: <input name="firstname"></p><p><input type="submit"></p></form>...submit.asp:Üdv!, <%=Request.Form("firstname")%>!

• QueryString – A GET függvénnyel átküldött adatokat tartalmazza (akérdojel után).

Request.QueryString(variable)[(index)|.Count]Példa:<form action="submit.asp" method="get"><p>First name: <input name="firstname"></p><p><input type="submit"></p></form>...submit.asp:Üdv!, <%=Request.QueryString("firstname")%>!

• ServerVariables – A szerver változóit tartalmazza.

<%for each x in Request.ServerVariablesresponse.write(Request.ServerVariables(x) & "<br />")next%>

Page 195: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

16.2. ASP (ACTIVE SERVER PAGES) 195

A változók:

• TotalBytes – A kliens által a kérés törzsben átküldött bájtok számátolvashatjuk ki.

<%dim aa=Request.TotalBytes%>

A metódusok:

• BinaryRead – A kliens által a POST függvénnyel elküldött adatokattárolja el egy tömbben.

<%dim a,ba=Request.TotalBytesb=Request.BinaryRead(a)%>

Szerver (Server) objektum

Az ASP szerver objektum segítségével érjük el a szerver metódusait, tulaj-donságait. Tulajdonságai:

• ScriptTimeout – Beállítja, vagy lekérdezi azt idotartamot, amíg a szkriptfuthat, ha ettol hosszabb ideig tart, akkor leállítódik.

<%Server.ScriptTimeout=200response.write(Server.ScriptTimeout)%>

Metódusai:

• CreateObject – Létrehoz egy adott típusú objektumot.

Page 196: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

196 FEJEZET 16. SZERVER OLDALI PROGRAMOZÁS

<%Server.CreateObject(progID)Példa:set conn=Server.CreateObject("ADODB.Connection")conn.Provider="Microsoft.Jet.OLEDB.4.0"conn.Open "c:/webdata/northwind.mdb"%>

• Execute – Egy másik ASP fájlban lévo szkriptet lefuttat.

<%response.write("1. fájl 1. rész!<br />")Server.Execute("file2.asp")response.write("1. fájl 2. rész!")%>File2.asp:<%response.write("2. fájl 1. rész!<br />")%>

• GetLastError – Egy ASPError objektummal tér vissza, mely az utolsóhibát írja le.

<%Server.GetLastError()%>

• HTMLEncode – HTML kódolást alkalmaz a megadott karakterláncra.

<%response.write(Server.HTMLEncode("A kép elem: <img>"))%>Kimenet:A kép elem: &lt;img&gt;

• MapPath – Hozzárendel egy megadott útvonala a fizikai útvonalhoz.

Page 197: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

16.2. ASP (ACTIVE SERVER PAGES) 197

<%response.write(Server.MapPath("test.asp") & "<br />")%>Kimenet:c:\inetpub\wwwroot\script\test.asp

• Transfer – Egy ASP fájl minden információját átküldi egy másikba. Azelso fájl a többi utasítást nem dolgozza fel.

<%response.write("1. fájl 1. sor<br />")Server.Transfer("file2.asp")response.write("1. fájl 2. sor<br />")%>File2.asp:<%response.write("2. fájll 1. sor<br />")response.write("2. fájll 2. sor<br />")%>A kimenet:1. fájl 1. sor2. fájl 1. sor2. fájl 1. sor

• URLEncode – URL kódolást alkalmaz a karakterláncon.

<%response.write(Server.URLEncode("http://wilma.cab.u-szeged.hu"))%>A kimenet:http%3A%2F%2Fwilma%2Ecab%2Eu-szeged%2Ehu

16.2.2. Adatkezelés, ADO (ActiveX Data Objects)

Az ADO egy interfész, mely segítségével elérhetjük az adatbázisokat. Ál-talában a következo lépésekbol áll egy adatlekérés:

1. Létrehozunk egy ADO kapcsolatot az adatbázishoz.

2. Megnyitjuk az adatbázis kapcsolatot.

3. Létrehozzuk az ADO rekord sorozatot (recordset).

Page 198: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

198 FEJEZET 16. SZERVER OLDALI PROGRAMOZÁS

4. Megnyitjuk a rekord sorozatot.

5. Kiolvassuk az adatot a rekord sorozatból.

6. Bezárjuk a rekord sorozatot.

7. Bezárjuk a kapcsolatot.

Egy példa:

<%set conn=Server.CreateObject("ADODB.Connection")conn.Provider="Microsoft.Jet.OLEDB.4.0"conn.Open "c:/webdata/northwind.mdb"set rs = Server.CreateObject("ADODB.recordset")rs.Open "Select * from Customers", conndo until rs.EOF

for each x in rs.FieldsResponse.Write(x.name)Response.Write(" = ")Response.Write(x.value & "<br />")

nextrs.MoveNext

looprs.closeconn.close %>

A következokben megismerjük a legfontosabb objektumokat.

ADO csatlakozás (Connect) objektum

Az ADO kapcsolat objektum segítségével tudunk egy adatforráshoz csatla-kozni. A szerver objektum CreateObject metódusával tudjuk létrehozni. Afontosabb tulajdonságai:

• Provider – A kapcsolat objektum szolgáltatóját kérdezhetjük le vagyállíthatjuk be. Alapértelmezett értéke : MSDASQL . A következoértékei lehetnek:

– ADSDSOObject– Active Directory Services.

– Microsoft.Jet.OLEDB.4.0 – Microsoft Jet adatbázisok

– MSDAIPP.DSO.1 – Microsoft Internet Publishing.

– MSDAORA – Oracle adatbázisok.

– MSDAOSP – Egyszeru szövegfájlok.

– MSDASQL – Microsoft OLE DB szolgáltató ODBC számára.

– MSDataShape – Microsoft Data Shape.

Page 199: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

16.2. ASP (ACTIVE SERVER PAGES) 199

– MSPersist – Helyi fájlok.

– SQLOLEDB – Microsoft SQL Server.

<%set conn=Server.CreateObject("ADODB.Connection")conn.Provider="Microsoft.Jet.OLEDB.4.0"conn.Open "c:/webdata/northwind.mdb"response.write(conn.Provider)conn.close%>

• ConnectionString – Az adatbázis csatlakozás részleteit lehet manipu-lálni.

<%objconn.ConnectionString="par1=érték;par2=érték;stb;"Egy példa:objconn.ConnectionString="Provider=SQLOLEDB;Database=Intezmenytorzs;Data Source=Teszt;Trusted_Connection=yes" %>

A fenti példában egy MSSQL adatbázishoz csatlakozunk Windowshitelesítéssel (Trusted_Connection=yes), az adatforrás neve Teszt, azadatbázis neve Intezmenytorzs.

Fontosabb metódusok:

• Open – Megnyit egy kapcsolatot.

connection.Open connectionstring,userid,psword,optionsPélda:<%set conn=Server.CreateObject("ADODB.Connection")conn.Provider="Microsoft.Jet.OLEDB.4.0"conn.Open "c:/webdata/northwind.mdb", "teszt", "12345"%>

A fenti példában egy MSAccess adatbázishoz csatlakozunk a tesztnevu felhasználóval és 12345 jelszóval.

• Execute – Lefuttatunk a egy SQL parancssort.

Page 200: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

200 FEJEZET 16. SZERVER OLDALI PROGRAMOZÁS

Set objrs=objconn.Execute(commandtext,ra,options)Példa:<%sql="SELECT companyname FROM Customers"Set rs=conn.Execute(sql)%>

• Close – Segítségével lezárhatjuk a kapcsolatot.

ADO rekordsorozat (recordset)

Az ADO Recordset objektum a lekérdezés eredményét tárolja, fejléceket ésértékeket egyaránt. Segítségével manipulálhatjuk az adatokat az adatbá-zisban. Létrehozása:

set objRecordset=Server.CreateObject("ADODB.recordset")

Fontosabb gyujteményei:

• Fields – Segítségével hozzáférhetünk a recordset objektum egyes me-zoihez.

<%Do While NOT intezmenyek.EOF%><tr><td class="korfa"><%Response.Write intezmenyek.Fields("vch_intezmeny_nev")%></td></tr><%intezmenyek.MoveNextLOOP%>

Fontosabb tulajdonságai:

• BOF, EOF – -1-et ad vissza, ha a recordset elején vagy végén vagyunk.

• RecordCount – Az eredmény rekordjainak száma.

Fontosabb metódusok:

• MoveFirst, MoveLast, MoveNext, MovePrevious – Megfelelo módon köz-lekedik a recordsetben.

Page 201: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

16.2. ASP (ACTIVE SERVER PAGES) 201

<%set conn=Server.CreateObject("ADODB.Connection")conn.Provider="Microsoft.Jet.OLEDB.4.0"conn.Open(Server.Mappath("northwind.mdb"))set rs = Server.CreateObject("ADODB.recordset")sql="SELECT Companyname, Contactname FROM Customers"rs.Open sql, conn%><table border="1" width="100<%while rs.EOF=false%><tr><%for each x in rs.Fields%><td><%Response.Write(x.value)%></td><%nextrs.MoveNext%></tr><%wendrs.closeconn.close%>

16.2.3. Global.asa fájl

A Global.asa fájl egy opcionális fájl, mely tartalmazhatja az objektumok,változók, metódusok deklarációit. Ezekhez az alkalmazás bármely fájlábólhozzáférhetünk. A fájlt az alkalmazás gyökér könyvtárában kell tárolnunk.A Global.asa a következoket tartalmazhatja:

• Alkalmazás események.

• Viszony események.

• <object> deklarációk.

• TypeLibrary deklarációk.

A következo események lehetnek:

• Application_OnStart – Akkor következik be, amikor az elso felhasználólekér egy oldalt.

• Application_OnEnd – Akkor következik be, amikor az utolsó felhasz-náló kilép. (tipikusan, amikor a web szerver leáll).

• Session_OnStart – Minden egyes új felhasználó esetén lefut.

• Session_OnEnd – Lefut ,amikor a felhasználó kilép vagy sokáig inaktív.

Egy példa Global.asa fájl, mely segítségével nyomon követhetjük a jelen lévofelhasználók számát:

Page 202: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

202 FEJEZET 16. SZERVER OLDALI PROGRAMOZÁS

<script language="vbscript" runat="server">Sub Application_OnStartApplication("visitors")=0End SubSub Session_OnStartApplication.LockApplication("visitors")=Application("visitors")+1Application.UnLockEnd SubSub Session_OnEndApplication.LockApplication("visitors")=Application("visitors")-1Application.UnLockEnd Sub</script>

A következo módon férhetünk hozzá:

<html><head></head><body><p>Jelenleg <%response.write(Application("visitors"))%>felhasználó van bejelentkezve!</p></body></html>

Page 203: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

16.3. JSP( JAVA SERVER PAGES) 203

16.3. JSP(Java Server Pages)

A JSP a webalkalmazások fejlesztésének legfrissebb Java technológiája melya 15.3 fejezetben bemutatott Java Servlet technológiára épül. A szervleteknagyon hasznosak ugyan, de alapvetoen a programozók eszköztáráhoztartoznak és olyan alacsony szintu alkalmazási környezetben célszeru oketalkalmazni ahol nincs túl gyakran változás. A JSP alkalmazások megje-lenítés központúak. A HTML oldalak kezelésére JSP oldalakat célszeruhasználni. A JSP technológia által nyújtott lehetoségek:

• Egy nyelv mely alkalmas olyan JSP oldalak létrehozására melyek szö-veg alapúak, és leírják hogyan kell feldolgozni akérést és hogyan kellkialakítani a választ.

• Eszközök a szerver oldali objektumok elérésére.

• Módszer a JSP nyelv bovítésére.

16.3.1. A JSP áttekintése

A JSP oldal hasonló felépítéssel bír mint a PHP vagy ASP oldal. Az oldalmindazon részét amely nem tartalmaz JSP elemt sablonszövegnek (templatetext) nevezzük. A JSP elemeknek három típusa létezik: direktívák, akciók,szkript elemek. A direktívák feladata a lappal kapcsolatos azon információkspecifikálása melyek a lap elérései közben nem változnak. Ilyen példáula lapon használt szkript nyelv, a viszony figyelmmel kisérésének igénye. . . stb.

16.1. táblázat. JSP dirketívákDirektíva elem Leírás<%@page . . . %> A lappal kapcsolatos olyan att-

ribútumokat ad meg, mint aszkript nyelv, a hibalap, és apufferelési követelmények.

<%@include . . . %> Beilleszt egy lapot a fordításifázisban

<%@taglib . . . %> A lapon használt egyedi akció-kat tartalmazó elem föggvény-tárat definiálja

Az akcióelemek tipikusan valamilyen akciót hajtanak végre az aktuálisinformációk alapján, melyek akkor álnak rendelkezésre amikor az ügyféllekéri az adott oldalt (pl.: adatbázis lekérdezés . . . stb.). A JSP sepcifikálnéhány akcióelemet továbbá biztosít egy keretrendszert új elemek definiá-lására. A 16.3 táblázatban felsorolt szkript elemek segítségével rövidkódokat vehetünk fel egy JSP lapra. Az akcióelemkhez hasonlóan a szkript

Page 204: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

204 FEJEZET 16. SZERVER OLDALI PROGRAMOZÁS

16.2. táblázat. JSP Standard akcióelemekAkcióelem Leírás<jsp:useBean> Elérhetové tesz a lapon egy Ja-

vaBeans komponenst

<jps:getProperty> Kivesz egy tulajdonságértéketa JavaBeans komponenesbol ésbeteszi a válaszba.

<jps:setProperty> Értéket rendel egy JavaBeans tu-lajdonsághoz.

<jps:include> Beilleszt egy szervletbol vagyJSP lapból származó választ akérésfeldolgozás fázisában.

<jps:forward> A kérés feldolgozását egy JSPlaphoz vagy egy szervlethez to-vábbítja

<jps:param> Felvesze egy paramétert azelobbi két elmemmel történotovábbításhoz.

<jps:plugin> Azt a HTML kódot gene-rálja mely az appletet vaslósítjameg.

elmek is a lap elkérésekor kerülnek végrehajtásra. A JSP akcióelemeit ésa szkript elmeit gyakran használják úgy, hogy együttmuködjönek JavaBe-ans komponensekkel. A JavaBeans nem más mint egy Java osztály amelybizonyos kódolási eloírásoknak felel meg. A JavaBeans komponenseket ál-talában olyan adatok tartályaként használják, amelyek egy alkalmazásonbelül bizonyos egységeket, például egy vevot vagy egy rendelést írnak le.

16.3.2. Dinamikus tartalom generálása

A JSP lap úgy ahogy van nem küldheto el a böngészonek, a benne szereploJSP elemeket elobb fel kell dolgoznia a kiszolgálónak. A feldolgozás ese-tünkben azt jelenti, hogy át kell alakítania szervletté majd le kell fordítaniaa szervletet és végül le kell futtatnia azt. Ahogyan a kiszlgálónak szük-sége van egy szervlet konténerre melyen keresztül szolgáltatásokat nyújt aszervleteknek, ugyanígy szükség van egy JSP konténerre a JSP lapok fel-dolgozásához. Ezt a kétféle konténert gyakran egy csomgba kombináljákössze és közös néven web konténernek (web container) hivatkoznak rá. A JSPkonténer feladata a JSP lap feldolgozása mely két részbol áll:

• A JSP lap szervletté alakítása

• A szervlet lefordítása

Ez a két rész alktja a fordítási fázist. A lap elso elérésekor a JSP konténerautomatikusan elindítja a fordítást. A fordítás miatt az elso kéro késobb

Page 205: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

16.3. JSP( JAVA SERVER PAGES) 205

16.3. táblázat. JSP Szkript elemekSzkrip telem Leírás<%. . . %> Szkript kód beágyazásához

használható.

<%=. . . %> Java kifejezés beágyazásáhozhasználatos kifejezés amikor azeredményt be kell venni a vá-laszba.

<%!. . . %> A JSP lapot megvalósítóosztály példányváltozóinak ésmetódusainak deklarálásáhozhasználható deklaráció.

kapja meg a lapot. A fordítási fázis a lap kérése nélkül is kezdeményezheto,ezt nevezik elofordításnak. A JSP konténer felel a lapot megvalósító osztálymeghívásáért is, amleyet követoen feldolgozásra keülnek az egyes kérések,és generálódnak a válaszok. Ezt nevezik feldolgozási fázisnak. Amíga JSP lap nem változik az összes többi kérés a feldolgozási fázisba kerül.A lap futtatásakor lefut a jspInit() metódus kilépéskor pedig a jspDestroy()metódus. Ezeket mi felülírhatjuk.

1.<%@ page language="java" contentType="text/html"%>2.<html>3.<body>4.<jsp:useBean id="naptar" class="java.util.Date"/>5.A kiszolgálón az aktuális nap:6.<ul>7.<li> Nap:<jsp:getProperty name="naptar" property="date"/>8.</ul>9.</body>10.</html>

A példa 4. sorában egy akcióelemet látunk melyel közöljük a JSP konténer-rel a használható bab osztályát és egy nevet rendelünk hozzá. A konténeresetünkben megnézi, hogy van-e már ilyen nevu bab, amennyiben van ak-kor azt használja, ha nincs akkor létrehoz egyet és elérhetové teszi az egészoldal számára. A bab adatait a tulajdonságai tartalmazzák. Miután létre-hoztuk a babot a tulajdonságait a másik akcióelemmel tudjuk lekérdezni (7.sor).

16.3.3. Beépített Objektumok

JSP lapokon az objektumok széles skáláját tudjuk használni beleértve ida válatati babokat is. A JSP technológia automatikusan elérhetové tesznéhány objektumot, de saját objektumokat is létrehozhatunk. A legtöbb

Page 206: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

206 FEJEZET 16. SZERVER OLDALI PROGRAMOZÁS

beépített objektumot a szervlet technológiánál 15.3 fejezetben ismertetettmódon tudjuk használni. A JSP szkriptben a Java nyelv minden lehetoségétkihasználhatjuk.

Page 207: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

III. rész

Web szerverek

207

Page 208: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,
Page 209: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

17. fejezet

Bevezeto

A web szerverek feladata a kliensek kiszolgálása megfeleo tartalommal.Mint a jegyzet elso felében láthattuk a kapcsolat tartásra a HTTP protokollthasználják. A tartalom tárolására, eloállítására sok megoldás született. Atantárgy keretében megismerkedtünk a dinamikus, statikus tartalom elo-állításának több módjával. A következokben két web szerver fontosabbtulajdonságaival ismerkedünk meg.

209

Page 210: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

210 FEJEZET 17. BEVEZETO

Page 211: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

18. fejezet

Apache

Az Apache projekt célja egy robosztus, kereskedelmi minoségu, ingyenesenhasználható, hozzáférhetó forráskódú web szerver megalkotása és tovább-fejlesztése. A programot önkéntesek csoportja irányítja és fejleszti a világminden tájáról. A csoport neve Apache Group. Több száz felhasználó ötle-tei kódrészei és dokumentumai szerepelnek a projektben. A Netcraft webszerver áttekintésében, az Apache webszerver a legnépszerubb 1996 áprilisaóta.

18.1. Szabványok támogatása

Támogatja a HTTP 1.1-es szabványt. SNMP támogatás csak egy kereske-delmi termék felhasználásával érheto el. ISAPI modulokat támogatja dea szuroket nem. Támogatja az SSL 2/3 és a TLS 1 protokollokat, azonbanez a modula csak az USA-án kívül használható ingyenesen. USA-án belülnonprofit célra lehet ingyen használni. Támogatja a WebDav protokollt.Használhatunk CGI-t, FCGI-t dinamikus tartalom eloállítására. Server SideIncludes (SSI)-t is használhatunk egyszerubb feladatok megoldására.

18.2. Környezet

Unix, Linux, Windows, OS/2 operációs rendszerek alatt és a legtöbb architek-túrán alkalmazható. Az Apache Portable Runtime (APR) interfész segítségé-vel a webszerver és a futtató környezet közé mely elrejti a különbözo rend-szerek rendszerhívási közötti különbséget. Lehetové teszi az adott funk-ciók (I/O, szálkezelés, osztott memória kezelés) optimalizálását az adottplatformra.

211

Page 212: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

212 FEJEZET 18. APACHE

18.3. Adminisztrálás

Sok beépített funkcióval rendelkezik ezek közül néhány:

• A web szerever adminisztrálása szkriptek segítségével

• Támogatja a több hardware virtual server létrehozását különbözo IPcímekkel (Több IP cím több dokumentum gyökérhez)

• Támogatja a több software virtual server létrehozását egyforma IP cí-mekkel (Több dokumentum gyökér egy IP cím)

• Több web szervert menedzselhetünk mint egy szervert

• Hivatalos grafikus adminisztrációs felülettel egyenlore nem rendel-kezik de több megoldás is született (http://gui.apache.org/)

18.4. Események mentése (log)

Képes több log fájl kezelésére hagyományos és bovített fomrátumban is.Személyre szabhatjuk a formátumot. A régi logfájlokat autómatikusanbezárja és újat nyit egy megszabott ido elteltével. Tud ODBC adatbázisbais logolni egy pussz szoftver segítségével. Rengeteg eszköz van a logfájlokkezelésére elemzésére.

18.5. Biztonság

A következo hozzáférési csoportosításokat támogatja:

• tartomány név

• felhasználó név

• felhasználó csoport

• könyvtár/fájl

• IP cím

Többek között a következo azonosítási módokat támogatja:

• Basic Authentication

• Digest Authentication (mod_auth_digest)

Támogatja a felhasználónév jelszó páros adatbázisban történo tárolását.(mod_auth_db and, mod_auth_dbm).

Page 213: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

18.6. PROCESS-EK SZÁLAK KEZELÉSE 213

18.6. Process-ek szálak kezelése

Képes hibrid szál process módban futni minden olyan platformon amelytámogatja a process-eket és a szálakat is. Multiple-Processing Modules (MPM)segítségével a webszerver kezeli a szálakat és a process-eket egyaránt. Ígymegvalósítható a megbízhatóság amit több process nyújt a a skálázhatóság-gal amit több szál nyújt. A szálak és process-ek kezelése platformonkéntkülönbözo lehet. A Linux például a legjobb megoldás ha több process-ünkvan töb szálal, ha egy szál meghal a szerver a többi kérést még tudja kezelni.A Windows viszont nem kezeli túl jól a process-eket így ott célszerubb egyprocesszt futtatni több szálal. A probléma abból adódi, hogy a különbüözoplatformokon hogyan rendeljük hozzá a kéréseket az egyes process-ekhez,szálakhoz. Megoldást jelent minden eset külön modulként kezelése azMPM technológia segítségével.

Page 214: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

214 FEJEZET 18. APACHE

Page 215: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

19. fejezet

iPlanet Web szerver

Az iPlanet Web Server egy több szálas, biztonságos, nyílt szabványokra épüloweb szerver. A következo szolgáltatásokat nyújtja:

• Cégszintu menedzselés –Ide tartozik a meghaztalmazott (delegated),nyalábolt (cluster) mód. Támogatja az LDAP (Lightweight DirectoryAccess Protocol) protokollt melynek a címtár (directory) szerverrel tör-téno integrációja lehetové teszi a felhasználók, csoportok tárolásátegy központi címtárban. SNMP (Simple Network Management Protocol)protokollon keresztül valós idoben figyelhetjük a web szerver para-métereit.

• Biztonság – A felhsználók titkosított, azonosított hozzáféréssel ren-delkezhetnek a web szerverhez az SSL3.0 protokollon keresztül. Ezenkívül az iPlanet web szerver támogatja a következoket:

– nyilvános kulcsú titkosítás (PKCS) mely egy interfészt definiálaa PKCS és az SSL modulok között.

– Federal Information Processing Standards (FIPS)-140

– speciális bizonyítványokat (56,128,168 bit)

• Hozzáférés vezérlés – A fontos információkat tartalmazó fájlokat,könyvtárak hozzáférését korlátozhatjuk felhasználóné, jelszó, tarto-mány és IP cím szerint. A NSAPI tartalom menedzselo plug-in segít-ségével az egyes felhasználók beállíthatják a saját eroforrásaik hozzá-férhatoségét (nem kell a rendszergazdának szólni).

• Nagy teljesítmény – A dinamikus és biztonságos tartalom geneárálásatöbbszálú környezetben, SSL hardveres gyorsítók támogatásásval.

• Szabványokon alapul – A szabványok széles körét támogatja beleértvea JDK1.2, Servlets 2.2, JSP 1.1, HTTP1.1, . . . stb.

215

Page 216: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

216 FEJEZET 19. IPLANET WEB SZERVER

• Szerver oldali Java Servlet és JSP támogatás – lehetové teszi a fejlesztoszámára plug-in-ek, dinamikus tartalom, JDBC adatbázis elérés hasz-nálatát.

• Egyéb lehetoseégek – Támogatja több process futtatását, a process-ek fi-gyelését, automatikus regenrálódást (automatic recovery), és a logfájlokdinamikus rotálását.

19.1. iPlanet Web Server Architektúra

Az iPlanet Web Server moduláris felépítésu ami lehetové teszi az iPlanetcsalád többi tagjával történo együttmuködést. Biztosít egy adminsztrátorinterfészt melyen keresztül az összes webszervert melyekhez megfelelojogokkal rendelkezünk menedzselhetjük. Az iPlanet Web Server magábafoglalja a következo moudulokat

• Tartalom kezelok – A felhasználói adatok manipulálására szolgálnak.A következo részekbol állnak:

– HTTP Web server – Az iPlanet Web Server magját alkotja. A többirész erre épül.

– Content Management – Segítségével tudjuk a tartalmat kezelni.Létrehozhatunk és tárolhatunk HTML, JSP fájlokat de leheto-ségünk van képek, videók, és egyébb adatok tárolására a szerve-ren.

– Search – Lehetové teszik a felhasználók számára a tárolt doku-mentumok tartalma és tulajdonságai közötti keresést. Külön-bözo kereso felületeket definiálhatunk melyelekkel a legkülön-bözobb tatralmakban kereshetünk (HTML, PDF, MSWord, WordPerfect). Az iPlanet Web Server képes különbözo típusú doku-mentumokat HTML formátumúvá konvertálni.

• Szerver Bovítmények (Server Extensions ) – Segítségükkel kibovít-hetjük, lecserélhetjük a szerverünk egyes funkcióit. A következobovítmények részei az alap architektúrának:

– Common Gateway Interface (CGI)– Netscape Server Application Programming Interface (NSAPI) – olyan

bovíto függvények írását teszi lehetové melyek segítségével a ké-rések feldolgozását az optimális lépésekre oszthatjuk a nagyobbsebesség és rugalmasság érdekében.

– Java Servlets és JavaServer Pages

• Futási környezetek (Runtime Environments) – a különbözo bovítmé-nyek segítségével a következo környezet használhatóak:

Page 217: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

19.1. IPLANET WEB SERVER ARCHITEKTÚRA 217

– CGI Processor

– NSAPI Engine

– Java Virtual Machine (JVM)

• Alkalmazás szolgáltatások (Application Services)– Több alkalmazásspecifikus szolgáltatást biztosít ezek közül néhány:

– Security & Access Control

– Session Management Service

– File System Service

– Mail Service

Page 218: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

218 FEJEZET 19. IPLANET WEB SZERVER

Page 219: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

20. fejezet

Servlet Engine-k

219

Page 220: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

220 FEJEZET 20. SERVLET ENGINE-K

20.1. Bevezeto

Servlet-ek tulajdonképpen egy .class fájlok melyek Java-t futtató webszerve-rekbe beilleszthetoek. A Servlet engine egy környezet mely lehetové tesz aszerveren Servlet-ek futtatását. A következo feladatokat látja el:

• Betölti a Servlet-et a virtuális gépbe (elso futtatáskor)

• Futtatja a Servlet-et és egy környezetet biztosít a számára

A .class fájl csak az elso futtatáskor kerül betöltésre. Ezután esetenkéntújra kell indítani a Servlet Engine-t ha a módosított Servlet-et be szeretnénktölteni. Vannak azonban olyan implementációk amelyek újra tudják tölteniváltozás esetén. A Servlet Enginek-ek legfontosabb jellemzoi:

• A módosított Servlet-ek dinamikus újratöltése

• Servlet-ek csomagolása (.zip, .jar)

• Servlet inicializálási paraméterek.

• Servlet láncolás és szurés. Szurés esetén a fogadó Servlet pl. a MIMEtípus alapján a kérést egy másik Servlet-nek tivábbítja. Láncolásnálegy feldolgozási sort definiálunk melyben az egyes elemek Servlet-ek.

Page 221: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

20.2. TOMCAT 221

20.2. Tomcat

Tomcat egy szervlet konténer mely a hivatalos referencia megvalósítása aJava Servlet és Java Server Pages technológiáknak (ez régebben a JSWDK volt).Hasonlóan az Apache szerverhez nyílt forráskódú, ingyenes és sok önkéntesáltal fejlesztett szoftver. Jelenleg a 4.0.2-es verziónál tart. A 4.0.x verzió egyúj szervlet konténert valósít meg melynek Catalina a neve és támogatja aServlet 2.3 és a JSP 1.2-es változatát. Az új változat a következo elonyökkelrendelkezik:

• Moduláris felépítésu – A modularitás elsosegíti legtöbb konténer alapfunkció megváltoztatását az igényektol függoen. Minden modul jóldefiniált interfésszel rendelkezik a többi modul irányában. Minenmodul futás közben cserélheto. A modulok segítségével lehetoségünkvan:

– közvetlen beillesztehto integrációra a régi rendszerekkel

– ingyenes vagy kereskedlmi komponensek változatos implemen-tációi

– a Catalina moduláris beágyazására nagyobb alkalmazásokba

• A legújabb Java Servlet specifikációt valósítja meg.

• Teljes integrált Virtual Hosting támogatás – Segítségével a kódok egy-szerubbek és hatékonyabak lesznek (mivel nem kell kód szinten leke-zelni a több alkalmazás futtatását).

• Sokoldalú, bovítheto kérés feldolgozás – A kéréseket több szintentudjuk szurni. A web szerver és a web alkalmazás elkülönítheto. Se-gítségével könyebben követheto a web alkalmazások teljesítménye ésúj kérés válasz szuréseket vezethetünk be a web alkalmazás kódjánakmegváltoztatása nélkül.

• Beépített nagy teljesítményu web szerver – Egy teljesen Java nyelvenírt web szerver is a csomaghoz tartozik melyel tulajdonképpen azadatbázist kivéve egy alkalmazás szerverként funkcionálhat.

• Beépítheto kérés protokollok – A legtöbb ma elérheto szervlet kon-téner csak HTTP kéréseket képes kezelni és nem tudják kezelni azRMI, CORBA vagy a közvetlen, vezetékmentes hívásokat. A Cata-lina azonban úgy lett megtervezve, hogy könnyen lehessen connectormodulokkal bovíteni.

• Beépített WebDav 2 támogatás – A WebDav támogatás segítségévelkönnyen menedzselhetjük web könyvtárainkat.

Page 222: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

222 FEJEZET 20. SERVLET ENGINE-K

20.3. JRUN

A JRun konténer J2EE bizonyítvánnyal rendelkezik. Moduláris felépítésu.Jelenleg három verzióban kapható:

• JRun Server 3.1 Enterprise Edition – Segítségével olyan megoldásokvalósíthatóak meg melyekben szerepel a tranzakció kezelés az üzletilogika jelentos támogatása. Teljes funkcionalitású JEE alkalmazásszervert biztosít számunkra a EJB teljes támogatásával. Támogatja aJMS, JTA szolgáltatásokat is fürtbefogott (clustered) rendszerekben is.

• JRun Server 3.1 Advanced Edition– Olyan cégek számára ajánlott me-lyek kritikus feladatokat ellátó szervlet és JSP akapú dinamikus webalkalmazában gondolkodnak. Fejlett JDBC meghajtóval rendelkezikés szintén támogatja a fürtök létrehozását.

• JRun Server 3.1 Professional Edition – Egyszerveres környezetben JSPalapú megodások kivitelezésére alkalmas.

20.1. táblázat. JRun szolgáltatásokProfessional Advanced Enterprise

JSP 1.1 x x x

Servlet 2.2 x x x

JDBC Drivers x x

Load Balancing x x

Fail Over x x

EJB 1.1 x

JMS 1.0 x

JTA 1.0 x

Page 223: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

IV. rész

Alkalmazás szerverek

223

Page 224: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,
Page 225: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

21. fejezet

Bevezeto

A több rétegu Java alkalmazások futtatásához, fejlesztéséhez alkalmazásszerverre van szükségünk1. Az alkalmazás szerver a kopmlex, egymássalegyüttmuködo több rétegu, több komponensu alkalmazások alapja mely.Az alkalmazás szerver a ragasztó melyel az adatbázist és a klienset össze-ragasztjuk. Az alkalmazás szerver biztosítja számunkra az adatfolyamátmeneti tárolásást és vezérlését (cache, control) a jobb teljeítmény és a ská-lázhatóság érdekében. Rendelkezik olyan eszökztárral mely segítségével azadatforgalom biztonsága szavatolható. Az alkalmazásszerverek kiosztja azadatokat az adatbázisból az egyes alkalmazások számára megelozve ezzelazt, hogy minden alkalmazás külön-külön forduljon az adatbázishoz. Adinamikus web jellegébol fakadóan három rétegu: egy vagy több adatbá-zis, egy web szerver és egy kliens központú alkalmazás(web böngészo). Azadat menedzselése az alkalmazás funkcionalitásával együtt nem csupán egyfeladat a megfelo alkalmazás tervezében, hanem egyenesen szükségszeru.Az alkalmazás szervereket tertmészetesen nem szükségszeruen Java-banfejlesztik ill. nem feltétlenül kell Java alkalmazásokat kiszolgálniuk. Mi aJ2EE alapú alkalmazás szerverek közül fogunk néget áttekinteni.

1http://www.devx.com/premier/mgznarch/Javapro/2001/bgfall01/rg01bg/rg0113p.asp

225

Page 226: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

226 FEJEZET 21. BEVEZETO

Page 227: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

22. fejezet

J2eesdk

22.1. Referencia megvalósítás

A J2EE egy platform független teljes rendszerintegrációt biztosító megoldásmely egy olyan nyitott piacot teremt ahol bármely eladó bármely vevovelüzelete köthet. Az ilyen piacon a gyártóknak nem érdeke az, hogy az in-kompatibils megoldásokon keresztül kössék a vevoket saját termékükhözhanem egy egészséges verseny alakul ki a jobb teljesítmény, egyszerubbimplementálás és hasonló a vásárlóknak hasznos paraméterek körében. AJ2EE SDK1 egy nem kereskedelmi referencia megvalósítása a J2EE platform-nak. Magába foglalja a J2EE alkalmazás szervert, egy web szervert, relációsadatbáziskezelot, J2EE API-kat és egy teljes fejleszto telepíto környezetet.Letölthetjük a SUN2 honlapjáról. A SUN azzal a céllal készítette, hogy be-mutassa a termék fejlesztoknek azokat a funkciókat melyeket nekik is megkell valósítaniuk. Az adott termék J2EE kompatibilitását a J2EE Compatibi-lity Test Suite készlet segítségével tudják tesztelni. Az alkalmazás fejlesztok-nek szintén lehetové teszi termékeik tesztelését, melyel megállapíthatják,hogy termékük teljes mértékben hordozható-e a J2EE kompatibilis platfor-mok között.

22.2. Adatbázis elérés

Az alkalmazás adatok állandó tárolója a relációs adatbázis. A J2EE mevaló-sításnak nem kell egy adott típusú adatbázist támogatnia, azaz a különbözoJ2EE megvalósítások különbözo adatbázisokat támogathatnak.

1http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Overview6.html2http://java.sun.com/j2ee/download.html#sdk

227

Page 228: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

228 FEJEZET 22. J2EESDK

22.3. J2EE API-k

A Java 2 Platform, Standard Edition (J2SE) SDK szükséges a J2EE SDK fut-tatásához, és o biztosítja az alap API-kat a különbözo J2EE komponensekmegírásához. A J2EE SDK a következo API-kat biztosítja a J2EE alkalma-zások számára:

• Enterprise JavaBeans Technology 2.0 – A vállalati bab a vállalati üzletilogikát megvalósító mezok és metódusok hordozója. Üzeleti logikaalatt értjük azt a kódot amely teljesíti az alkalkmazás feladatát. AJ2EE szerveren építotéglaként használható az üzleti folyamatok meg-valósítására egyedül, de a többi építotéglával együttmuködve is . Avállalati baboknak három csoportja van:

– session bean

– entity bean

– message-driven bean

A vállalti babok gyakran használnak adatbázisokat. Az entity beanegyik haszna, hogy nem kell SQL kódot írnunk vagy JDBC API-thasználnunk , az EJB konténer lekezeli ezt helyettünk. Amennyibensession bean segítségével szeretnénk elérni az adatbázist úgy azt ahagyományos módon tudjuk megtenni.

• JDBC API 2.0(15.2) – Segítségével tudunk SQL parancsokat kiadniJAVA metódusokból. Akkor tudjuk használni vállalati babban ha fel-ülírjuk az alapértelmezett metódust. Szervletbol vagy egy JSP oldalrólközvetlenül is használhatjuk vállalati bab nélkül.

• Java Servlet Technology 2.3(15.3) – Segítségével HTTP specifikus osztá-lyokat definiálhatunk. Kiterjesztik a szerver képesséeit.

• JavaServer Pages Technology 1.2(15.3) – Lehetové teszi a szervlet kódbeillesztését egy HTML dokumentumba.

• Java Message Service 1.0(??) – Lehetové teszi a J2EE alkalmazások kö-zötti üzenetváltást.

• Java Naming and Directory Interface 1.2 – Névtár és könytár zolgál-tatást biztosít. Olyan metódusokat definiál melyek segítségével ahagyományos könyvtár muveletek és tulajdonságok objektumokhozrendelése egyaránt megoldható. Kereshetünk objektumokat tulajdon-ságaik alapján. A JNDI segítségével a J2EE alkalmazás minden típusúJava objektumot elérhet. Mivel a JNDI független az implementációtólsegítségével az alkalmazások olyan különbözo név és könyvtárrend-szerket használhatnak mint LDAP, NDS, DNS, NIS.

Page 229: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

22.4. ESZKÖZÖK 229

• Java Transaction API 1.0 – Egy jól definiált interfészt biztosít a tranzak-ciók elkülönítésére. A J2EE architektúra egy egyszeru módszert defi-niál az auto commit-ot a tranzakciók futtatásának (commit) és visszavo-násának (rollback) kezelésére. Bármely alkalmazás amely az adatokatolvassa a frissített adatokat fogja olvasni minden olvasás vagy írásmuvelet után. Azonban bonyolultabb esetben elofordulhat, hogy kétvagy több olyan adatbázisba írunk melyek kapcsolatban vannak egy-mással, ilyenkor a JTA API-t kell használnunk, hogy végrehajtsukazokat az adatbázis muveleteket amelyek egymástól függenek.

• JavaMail API 1.2 – A J2EE alkalmazások használhatják e-mail értesíté-sek küldésére. Két részbol áll az egyik az alkalmazás szintu interfészmelyet az alkalmazás komponensei használnak levél küldésre a másika szolgáltatás biztosítóból interfész.

• JavaBeans Activation Framework 1.0 – A csomaghoz tartozik mert a Java-Mail használja. Segítségével megállapítható egy adatcsomag típusa,becsomagolható, feltérképezhetoek az adaton végezheto muveletekés létrehozható a megfelelo JavaBeans komponens.

• Java API for XML Processing 1.1 – Segítségével feldolgozhatóak az XMLdokumentumok úgy DOM mint SAX modell szerint.

• J2EE Connector Architecture 1.0 – A J2EE eszköz gyártók használjákolyan eroforrás illesztok létrehozására melyek segítségével a vállalatiinformációs rendszer adatai hozzáférhetové válnak.

• Java Authentication and Authorization Service 1.0 – Felhasználók, cso-portok azonosításának egy módját biztosítja a J2EE alkalmazásokszámára. Egy szabványos beillesztheto azonosítási modulként vanmegvalósítva (Pluggable Authentication Module (PAM)).

22.4. Eszközök

A J2EE referencia megvalósítás egy alkalmazás telepíto eszközt és sok szk-riptet biztosít az alkalmazások lefordítására, telepítésére, . . . . Létezik pa-rancssoros és grafikus megoldás is. A GUI megoldás a következo funkciókattámogatja:

• A J2EE alkalmazások csomagolása, konfigurálása, telepítése.

• Az üzleti babok csomagolása, konfigurálása.

• A web komponensek csomagolása, konfigurálása.

• Az alkalmazás kliensek csomagolása, konfigurálása.

• Az eroforrás csatolók csomagolása, konfigurálása.

Page 230: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

230 FEJEZET 22. J2EESDK

Page 231: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

23. fejezet

JRun

Három változata van. A vállalati verzió rendelkezik a legteljesebb funk-cionalitással. A helyi és az elosztott tranzakciókat egyaránt kezeli a JTAAPI segítségével. Az EJavaBean-ek futtatását egy EJB konténeren keresz-tül támogatja. Segítségével használhatjuk a JMS 1.0-ás verzióját. A JRunServer Tags technológia segítségével a fejlesztok a JSP kódot újrahasználhat-ják. JavaBeans, Java Servlet alkalmazások telepítése esetén használhtunk WebArchive (WAR) fájlokat. Beépített XML értelmezovel és XSLT átalakítóvalrendelkezik. Olyan biztonsági szolgáltatásokat nyújt melyek segítségévelaz e-commerce alkalmazások megfelelo környezeteként szolgálhat. Elosztotteroforrás felszabadítása valamint a lekérdezések összegyujtésével (pooling)megfelelo teljesítményt tud nyújtani. Elérheto: Windows 95/98/NT/Me/2000,Solaris, Red Hat Linux, HT-UX, AIX, IRIX, és Tru64 Unix környezetben.

Honlap: http:\\www.macromedia.com

231

Page 232: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

232 FEJEZET 23. JRUN

Page 233: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

24. fejezet

Webogic

A BEA WebLogic Enterprise alkalmazás szerver két technológára épül (24.1ábra): egy nagy teljesítményu Java alkalmazásszreverre (J-motor) és egyskálázható tarnzakciós platformra (T-motor).

24.1. ábra. WEBlogic architektúra

24.1. T-motor (T-engine)

A T-engine a BEW-Tuxedo termékre épül, mely egy skálázható tranzakciósplatformot biztosít. Segítségével több programozási modellt is használha-tunk: CORBA, J2EE és Tuxedo alkalmazások számára egyaránt teljes tranz-akció menedzsment környezetet biztosít. Néhány fontosabb szolgáltatása:

233

Page 234: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

234 FEJEZET 24. WEBOGIC

• Szerver oldali komponensek: BEA Tuxedo, CORBA C++ORB, CORBAJava ORB, EJB tároló, RMI támogatás

• Adatbázis kezelés Java alkalmazásokból két fázisú végrehajtás (two-phase commit) lehetoségével a BEA JDBC-XA meghajtók segítségével.Az XA komplatibilis adatbázisok támogatása Tuxedo , C++ segítségé-vel.

• Management Information Base (MIB) mely definiálja a WebLogic Enterp-rise alkalmazások legfontosabb paramétereit (programozási interfészis rendelkezésre áll a MIB elérésére).

• Biztonsági szolgáltatások az azonosítás, jogosultságok kezelésére. Min-den EJB komponens saját ACL(Access control list) listával rendelkezik.

• SSL támogatás.

• . . .

24.2. J-motor (J-engine)

A J-Engine a BEA WebLogic Server technolóigájára épülve teljes érétku Javaalkalmazás szerver környezetet biztosít. Néhány szolgáltatása:

• WML támogatás

• XML támogatás

• együttmuködés a Microsoft COM objektumaival

• Java SNMP támogatás

• Zero Administration Client (ZAC) mely lehetové teszi Java appletek,alkalmazások telepítését.

• Oracle, Informix, Sysbase, MS SQL támogatás

• saját grafikus fejlesztoi környezet

• . . .

Részletesebb információ a http://edocs.bea.com/wle/getstart/overview.htm ol-dalon található.

Page 235: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

25. fejezet

iPlanet

A SUN, Netscape szövetség terméke. Három változata van itt az EnterprisePro változatot tekintjük át mely egy igazi nehéz súlyú versenyzo. Az iPlanet1

egy robosztus, J2EE platformot megvalósító a vállalat menedzselést és azüzleti folyamatokat széles körben támogató alkalmazás szerver.

25.1. Jellemzok áttekintése

25.1.1. Alap szolgáltátsok

• J2EE Compatibility Test Suite által tesztelt, teljesen kompatibilis a J2EEspecifikációval.

• Magába foglal egy integrált tarnzakció feldolgozó eszközt mely biz-tonságos elosztott tranzakciók kezelését végzi több adatforráson.

• Terhelés kiegyensúlyozást biztosít válasz ido, szerver terhelés, súlyo-zott round-robin, intra-server process level alapján mely JSP oldalkra,szervletekre és RMI/IIOP interfészekre egyaránt alkalmazható. inter-faces

• Fejlett gyorstár (cache) technikát alkalmaz az adatbázisok elérésénekmeggyrosítására.

• Támogatja fürtök létrehozását, folyamatos üzemet és tranzakció keze-lést. Automatikusan detektálja és újraindítja a problémás szerverektvagy process-eket.

• Rendelkezik egy XML értelmezovel és egy XSLT feldolgozóval elose-gítve ezzel az üzlet-üzlet integrációt.

• Egy széles köru biztonsági architektúrát valósít meg a csoportok, fel-használók, SSL, bizonyítványok alkalmazásával.

1http://iplanet.com/products/iplanet_application_ep/ds_application_ep.html

235

Page 236: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

236 FEJEZET 25. IPLANET

25.1.2. Vállalti és üzlet-üzlet intgrálási szolgáltatások

• Magába foglalja a Unified Integration Framework mely jó hatásfokú egy-szerusített válalati alkalmazás integrálást tesz lehetové sok különbözoháttér rendszerrel.

• Gyors, skálázható kapcsolódási lehetoséget teremt a kapcsolat ösze-gyujtésével és menedzselésével a háttér adatforrásokkal és az örököltrendszerekkel.

• Az adatelemzéshez biztosít egy adatbányász eszközt.

• Lehetové teszi a Messaging-Oriented Middleware (MOM) rendszerekintegrálását.

• Szabványos JMS megvalósítás

• Lehetové teszi az üzlet-üzlet együttmuködéseket és taranzakciókat azXML, EDI rendszerekkel az iPlanet ECXpert szerver szoftver segítsé-gével.

• Biztosítja a szabványos relációs adatbáziskezelok integrációját ODBCés JDBC interfészen keresztül.

• Olyan vállalati csatolókat biztosít melyek segítségével SAP R/3, Peop-leSoft, IBM CICS és BEA Tuxedo rendszereket integrálhatunk a J2EEplatformba.

25.1.3. Process menedzselo rendszer

• Átfogó web alapú J2EE megoldásokat biztosít az automatizált üzletifolyamatok tervezésében, telepítésében, menedzselésében.

• A Dynamic application enhancement lehetové teszi az üzleti folyamatalkalmazásainak frissítését a szerver leállítása nélkül.

• Lehetové teszi azon üzleti folyamatok automatizálását melyek valósideju integrálást igényelnek ERP rendszerekbe, mainframe-be.

• Elosegíti az üzleti folyamatokban a tranzakciók naplózását és vezér-lését.

• Támogatja a páhuzamos feldolgozást, idozítok használatát.

• LDAP alapú könyvtárban tárolja különbözo jogosultségi szabályokatés objektumokat.

Page 237: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

25.1. JELLEMZOK ÁTTEKINTÉSE 237

25.1.4. Business Process fejleszto környezet

• Olyan fejlesztoi környezetet biztosít mely elosegíti a gyors fejlesztést,módosítást és az automatizált üzleti részek újrahasznosítását.

• Lementi a process futását könnyen áttekintheto formában.

• Olyan EJB komponenseket generál amelyek megvalósítják az auto-matizált folyamat által végzett munkát.

• Minta automatizált uzleti alkalmazásokat biztosít.

25.1.5. J2EE fejleszto környezet

• Integrált a Forte fo Java vállati csoportmunkát támogató fejleszto esz-közökkel.

• Közvetlen csatlakozás több harmadik fél által fejlesztett fejleszto kör-nyezettel.

25.1.6. Integrálás az iPlanet Directory szerverrel és a iPlanet Webszerverrel

Magába foglalja az iPlanet Directory Server-t és a iPlanet Web Server-t.

25.1.7. Támogatott platformok

• Sun Solaris Operating Environment 2.6 és 2.8

• Microsoft Windows NT 4.0

Page 238: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

238 FEJEZET 25. IPLANET

Page 239: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

Irodalomjegyzék

[1] Vannevar Bush. As We May Think.http://www.theatlantic.com/unbound/flashbks/computer/bushf.htm. 7

[2] Theodor Holm Nelson. Memex. http://jefferson.village.virginia.edu/elab/hfl0155.html.7

[3] IETF. Hypertext Transfer Protocol – http/1.1. http://www.ietf.org/rfc/rfc2068.txt. 14, 19,20

[4] IETF. Uniform Resource Identifiers (URI): Generic Syntax.http://www.ietf.org/rfc/rfc2396.txt. 14

[5] http://www.ietf.org/. 14

[6] IETF. Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types.http://www.ietf.org/rfc/rfc2046.txt. 20

[7] IETF. HTTP Authentication: Basic and Digest Access Authentication.http://www.ietf.org/rfc/rfc2617.txt. 21

[8] IETF. Multipurpose Internet Mail Extensions (MIME) Part One: Format of InternetMessage Bodies. http://www.ietf.org/rfc/rfc2045.txt. 22

[9] IETF. The MD5 Message-Digest Algorithm. http://www.ietf.org/rfc/rfc1321.txt. 22

[10] IETF. The Secure HyperText Transfer Protocol. http://www.ietf.org/rfc/rfc2660.txt. 27

[11] IETF. Cryptographic Message Syntax. http://www.ietf.org/rfc/rfc2630.txt. 27

[12] IETF. MIME Object Security Services. http://www.ietf.org/rfc/rfc1848.txt. 27

[13] IETF. Diffie-Hellman Key Agreement Method. http://www.ietf.org/rfc/rfc2631.txt. 27

[14] Netscape. The SSL Protocol Version 3.0.http://home.netscape.com/eng/ssl3/draft302.txt. 29

[15] Microsoft. Microsoft Corporation’s PCT Protocol.http://activex.adsp.or.jp/Japanese/Specs/pct.htm. 29

[16] IETF. The TLS Protocol Version 1.0. http://www.ietf.org/rfc/rfc2246.txt. 29

[17] W3C. HTML 4.01 Specification. http://www.w3.org/TR/html. 31

[18] W3C. Cascading Style Sheets 2 Specification. http://www.w3.org/TR/REC-CSS2/. 53

[19] W3C. Extensible Markup Language (XML) 1.0 (Second Edition).http://www.w3.org/TR/2000/REC-xml-20001006. 61

[20] W3C. Extensible Markup Language (XML) 1.0.http://www.xml.com/axml/testaxml.htm. 61

[21] W3C. XSL Transformations (XSL). http://www.w3.org/TR/xsl/. 67

[22] W3C. XML Path Language (XPath). http://www.w3.org/TR/xpath. 67

[23] W3C. XSL Transformations (XSLT). http://www.w3.org/TR/xslt20/. 67

239

Page 240: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

240 IRODALOMJEGYZÉK

[24] IETF. HTTP Extensions for Distributed Authoring – WEBDAV.http://www.ietf.org/rfc/rfc2518.txt. 75

[25] WAP Forum. Wap Architecture. http://www.wapforum.org. 79

[26] Nokia. WML reference 1.1. http://www.forum.nokia.com. 90

Page 241: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

Táblázatok jegyzéke

6.1. A háttér tulajdonságai . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566.2. A szöveg tulajdonságai . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576.3. A betuk tulajdonságai . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576.4. A keretvonalak (border) tulajdonságai . . . . . . . . . . . . . . . . . . . . . . . 586.5. A margók (margin) tulajdonságai . . . . . . . . . . . . . . . . . . . . . . . . . . 586.6. Padding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586.7. Listák . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

7.1. DTD Ismétlodés operátorok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

13.1. Javascript Aritmetikai operátorok . . . . . . . . . . . . . . . . . . . . . . . . . . 12413.2. Javascript Összehasonlító operátorok . . . . . . . . . . . . . . . . . . . . . . . . 12513.3. Javascript Logikai operátorok . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12513.4. Javascript Objektumok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12613.5. Javascript String Objektum Metódusok . . . . . . . . . . . . . . . . . . . . . . . 12713.6. Javascript Array Objektum Metódusok . . . . . . . . . . . . . . . . . . . . . . . 12813.7. Javascript Array Objektum Metódusok . . . . . . . . . . . . . . . . . . . . . . . 12913.8. VBScript Adattípusok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13613.9. VBScript Adattípusok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

15.1. JDBC Adattípusok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

16.1. JSP dirketívák . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20316.2. JSP Standard akcióelemek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20416.3. JSP Szkript elemek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205

20.1. JRun szolgáltatások . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222

241

Page 242: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

242 TÁBLÁZATOK JEGYZÉKE

Page 243: Jegyzet a Fejlett Webes technológiák elõadáshoz A Sysdata ...bilickiv/fpt_2006_1/jegyzet/WebesTechnologiak.pdf · mában szeretné viszontlátni az adatokat (pl.: mobil készülék,

Ábrák jegyzéke

1.1. WEB vertikális metszet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.1. A Proxy szerver helyzete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.2. Üzenetcsere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

5.1. Egy egyszeru HTML oldal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325.2. Cég bemutató . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355.3. Listák . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375.4. Egyszeru táblázat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385.5. Formázott táblázat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405.6. Összevont cellák . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415.7. Csoportosított oszlopok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425.8. Többkeretes dokumentum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445.9. Képkezelés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465.10. Egymásba ágyazott dokumentumok . . . . . . . . . . . . . . . . . . . . . . . . 475.11. Nem ismert objektum esetén a belso objektumot kerül feldolgozásra . . . . . 495.12. Urlap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

7.1. Egy egyszeru transzformáció . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687.2. Egy elem értéke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 707.3. For-each ciklus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

9.1. Egy egyszeru WML oldal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 849.2. Szövegformázások . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 859.3. Hivatkozások . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 869.4. Választó . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 889.5. Timer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

15.1. Rétegek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15415.2. Fontosabb JDBC osztályok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15515.3. Java Servlet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16015.4. Java Servlet osztályok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

24.1. WEBlogic architektúra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233

243