42
1 Elosztott alkalmazá sok jegyzet II. rész JSP alkalmazá sfejlesztés Angster Erzsébet E ré sz elsajá tí tá sá hoz elengedhetetlenek az alapvető HTML, há ló zati é s programozá si ismeretek. Mó dosí tá sok tö rténete Dá tum Fá jlné v Oldal Vá ltozá s elő ző verzió hoz ké pest 2005.12.14 JSP jegyzet-2005-12-14.pdf 31 Első kiadá s 2005.12.20. JSP jegyzet-2005-12-20.pdf 42 Csak a 30. oldaltó l vá ltozott Tartalomjegyzék 1. Á ttekinté s, fogalmak tiszt á zá sa ................................ ................................ ....................... 3 1.1. Há ló zati alapfogalmak ................................ ................................ ............................. 3 1.2. HTTP erő forrá sazonosí tó ................................ ................................ ........................ 5 1.3. Webalkalmazá s ................................ ................................ ................................ ........ 7 1.4. A HTTP ké ré s/vá lasz modellje ................................ ................................ ................ 8 1.5. Java technoló giá k ................................ ................................ ................................ .. 10 1.6. Mi a szervlet? ................................ ................................ ................................ ........ 11 1.7. Mi a JSP? ................................ ................................ ................................ ............... 15 1.8. Mi kell egy JSP program futtat á sá hoz? ................................ ................................ . 17 2. Javá s webalkalmazá sok futtatá sa................................ ................................ .................. 19 2.1. A Tomcat webszerver telepí tése ................................ ................................ ............ 19 2.2. A webszerver elindí tá sa, leá llí tá sa................................ ................................ ......... 21 2.3. A webszerver mapparendszere ................................ ................................ .............. 23 2.4. A webalkalmazá s felé pí té se................................ ................................ ................... 23

JSP jegyzet-2005-12-20

Embed Size (px)

Citation preview

Page 1: JSP jegyzet-2005-12-20

1. Á ttekintés, fogalmak tisztázása

1

Elosztott alkalmazá sok jegyzet

II. rész

JSP alkalmazá sfejlesztés Angster Erzsébet

E rész elsajátí tásához elengedhetetlenek az alapvető HTML, háló zati és programozási ismeretek.

Módosítá sok tö rténete Dá tum Fá jlnév Oldal Vá ltozá s előző verzió hoz képest

2005.12.14 JSP jegyzet-2005-12-14.pdf 31 Első kiadás

2005.12.20. JSP jegyzet-2005-12-20.pdf 42 Csak a 30. oldaltó l változott

Tartalomjegyzék

1. Á ttekintés, fogalmak tisztá zá sa ................................ ................................ ....................... 3 1.1. Háló zati alapfogalmak................................ ................................ ............................. 3 1.2. HTTP erő forrásazonosí tó ................................ ................................ ........................ 5 1.3. Webalkalmazás................................ ................................ ................................ ........ 7 1.4. A HTTP kérés/válasz modellje................................ ................................ ................ 8 1.5. Java technoló giák ................................ ................................ ................................ .. 10 1.6. Mi a szervlet? ................................ ................................ ................................ ........ 11 1.7. Mi a JSP?................................ ................................ ................................ ............... 15 1.8. Mi kell egy JSP program futtatásához? ................................ ................................ . 17

2. Javá s webalkalmazá sok futtatá sa................................ ................................ .................. 19 2.1. A Tomcat webszerver telepí tése................................ ................................ ............ 19 2.2. A webszerver elindí tása, leállí tása................................ ................................ ......... 21 2.3. A webszerver mapparendszere ................................ ................................ .............. 23 2.4. A webalkalmazás felépí tése................................ ................................ ................... 23

Page 2: JSP jegyzet-2005-12-20

1. Á ttekintés, fogalmak tisztázása

2

2.5. Webalkalmazások telepí tése és futtatása ................................ ............................... 25 2.6. Szervletek futtatása................................ ................................ ................................ 29 2.7. Egy nagyobb alkalmazás telepí tése és futtatása – OOK................................ ........ 31 2.8. Tesztkérdések ................................ ................................ ................................ ........ 35 2.9. Feladatok ................................ ................................ ................................ ............... 35

3. A JSP lap elemei................................ ................................ ................................ .............. 36 3.1. Mintaprogram................................ ................................ ................................ ........ 36 3.2. A JSP lap elemei................................ ................................ ................................ .... 40 3.3. Megjegyzések................................ ................................ ................................ ........ 40 3.4. Direktívák................................ ................................ ................................ .............. 40 3.5. Szkriptek................................ ................................ ................................ ................ 41 3.6. Akció k ................................ ................................ ................................ ................... 43 3.7. Változó k, ható kö rö k ................................ ................................ .............................. 43 3.8. A JSP lap elő re definiált változó i ................................ ................................ .......... 43 3.9. Kérési paraméter használata ................................ ................................ .................. 44 3.10. A generált szervlet ................................ ................................ ................................ . 46 3.11. Ha nem megy a futás ................................ ................................ ............................. 47 3.12. Tesztkérdések ................................ ................................ ................................ ........ 47 3.13. Feladatok ................................ ................................ ................................ ............... 48

4. HTML formok és EJB objektumok között adatcsere................................ .................. 49 5. Lapok á tirá nyítá sa, ható körök ................................ ................................ ...................... 52 6. Szervletek és JSP lapok ................................ ................................ ................................ .. 53 7. Kapcsoló dá s az adatbá zishoz................................ ................................ ......................... 54 8. Egy nagyobb alkalmazá s elemzése ................................ ................................ ................ 55

8.1. Feladat – Egy szakmai klub honlapja ................................ ................................ .... 55 8.2. Használati esetek ................................ ................................ ................................ ... 55 8.3. Az OOK architektúrája................................ ................................ .......................... 55

9. A JSP programok tipikus architektú rá ja, tervezési elemei................................ ......... 56 9.1. Rétegek................................ ................................ ................................ .................. 56 9.2. J2EE minták ................................ ................................ ................................ .......... 56 9.3. Az OOK architektúrája................................ ................................ .......................... 56 9.4. A kész alkalmazás publikálása??................................ ................................ ........... 56

10. Függelék – HTML kisokos ................................ ................................ ............................. 58 11. Függelék – JSP fordítá si direktívá k ................................ ................................ .............. 59 12. Hivatkozá sok, ajá nlá sok................................ ................................ ................................ . 60

Page 3: JSP jegyzet-2005-12-20

1. Á ttekintés, fogalmak tisztázása

3

1. Á ttekintés, fogalmak tisztá zá sa

1.1. Há lózati alapfogalmak

Foglaljuk ö ssze rö viden az elő ző részbő l azokat a legfontosabb fogalmakat, melyeket ebben a részben intenzíven használunk:

Kiszolgá ló : más néven szerver (server). Aki/ami az ügyfél által kért feladatot elvégzi, vagyis kiszolgálja az ügyfelet.

Ü gyfél: más néven kliens (client). Aki/ami a kiszolgáló t megkéri a feladat elvégzésére.

Kiszolgá ló szá mító gép: Háló zati csomó pontban lévő számí tó gép, mely lehető vé teszi, hogy a háló zathoz csatlakozó kliens számí tó gépekrő l valamely osztott erő forrást használni lehessen. A szerver számí tó gép a rajta levő szerver programok segí tségével szolgálja ki a klienseit.

Ü gyfél szá mító gép: Valamely szerver számí tó géppel háló zati kapcsolatban álló számí tó gép. A kliens számí tó gép a rajta levő kliens szoftver segí tségével szó lí tja meg a szervert, és kér tő le szolgáltatásokat.

Kiszolgá ló szoftver: Szoftver, amely kiszolgálja a klienseit, vagyis válaszol a kliens szoftver kérésére. A szerver szoftver sohasem szó lí tja meg a klienseit, ő csak válaszol a kérésekre. A szerver szoftver jellemző en szerver számí tó gépen fut.

Ü gyfél szoftver: Olyan szoftver, mely alkalmas arra, hogy kéréseket intézzen valamely kiszolgáló szoftverhez.

IP (Internet Protokol) cím: Az internetbe kapcsolt számí tó gép (pontosabban háló zati kártya) állandó vagy ideiglenes azonosí tó ja. Négy (vagy hat) darab, 0 és 255 kö zö tti decimális számbó l áll, melyeket pontok választanak el egymástó l, és az internet címkereső gépei a számí tó gépek azonosí tására használják. A szerver gépeknek fix (állandó ) IP címük van, amelyet az internet szolgáltató k tartanak nyilván. A kliens géphez az internet szolgáltató a kapcsolat felvételekor rendel egy IP címet, mely a kapcsolat végéig érvényes. Például: 81.78.95.174 vagy 157.181.151.154.

IP címtartomá ny: Az internetbe kapcsolt számí tó gépek hierarchikus címrendszerének egy szintje. Egy ország vagy egy szervezet például kaphat egy IP címtartományt. Egy IP címtartományhoz az internet szolgáltató k egy ö sszetett logikai nevet, ún. domén-nevet rendelnek.

Page 4: JSP jegyzet-2005-12-20

1. Á ttekintés, fogalmak tisztázása

4

Domén-név: Ö sszetett logikai név, melynek részei egyre bő vülő IP címtartományokat határoznak meg (például ttk.elte.hu). A teljes domén-név meghatároz egy IP címet (például a ttk.elte.hu IP címe 157.181.151.153). A jobb oldali rész-címek meghatározzák a bennfoglaló kö vetkező szintet (például: ttk.elte.hu ð elte.hu ð hu). A teljes domén-név tehát egy számí tó gépet azonosí t, a balró l levágott domén-nevek pedig egy-egy számí tó gép-tartományt. A legfelső szintű domén (jobb oldali rész-név) általában egy országot vagy egy nagy szervezetet azonosí t (például hu, de, com, org). Például a hu tartományba tartozik az sdp-city.hu, a medzi.hu és az elte.hu.

Gazdagép (host computer): IP címmel azonosí tható számí tó gép. Egy gazdagépen tö bb domén is „lakhat”. Például a 82.79.96.173 gazda számí tó gépen található tö bbek kö zö tt az sdp-city.hu és a medzi.hu domén is.

Resource (erőforrá s): Bármi, amit egy szerver számí tó gép „kiad” a kliens számára. Erő forrás lehet egy dokumentum, egy kép, egy program, vagy egy program által előállí tott bájtsorozat.

Domén (domain): Erő forrás-halmaz, melyet az ún. domén-név azonosí t. Például: sdp-city.hu, ttk.elte.hu. Domén alatt általában a teljes domén-névvel azonosí tott erő forráshalmazt értik. Egy szerver számí tó gépen általában tö bb domén is helyet kap (például a 82.79.96.173 számí tó gépen található az sdp-city.hu és a medzi.hu domén). Egy domén tö bb számí tó gépet is elfoglalhat (például fw.hu), ekkor a domén IP címe egy elosztó számí tó gépet azonosí t.

Hasznos lehet néhány DOS parancs számí tó gépek teszteléséhez, valamint IP címének kiderí téséhez. Ehhez nyisson egy konzolablakot!

− Saját számí tó gép IP címe, statisztikája: ipconfig − Egy távoli számí tó gép IP címe, statisztikája: ping [<IP cím>/<domén-név>] − A saját számí tó gép elérési statisztikája: ping localhost

Például nézzük meg, melyik számí tó gépen „tartó zkodik” az sdp-city.hu domén (ehhez persze szükséges, hogy a kérdező gép be legyen kapcsolva az internetbe)!

C:\>ping sdp-city.hu sdp-city.hu [82.79.96.173] ...

DNS (Domain Name Server, névkiszolgá ló ): Kiszolgáló szoftver, melynek az a feladata, hogy az IP címeket és a domén neveket megfeleltesse egymásnak. A ping parancs például egy DNS-t kér meg az IP cím megadására.

URI (Universal Resource Identifier, egységes erőforrá s azonosító ): Más néven URL (Universal Resource Locator, egységes erő forrás helymeghatározó ). Egy erő forrást azonosí t az interneten. Az URI két részbő l tevő dik ö ssze: séma: erőforráscím A séma meghatározza az erő forrás címképzési szabályrendszerét. A séma általában egy kommunikáció s protokoll. Ismert kommunikáció s protokollok: http, ftp, file, mailto, gopher, telnet, news. Az erő forráscím az adott kommunikáció s protokoll szabályrendszere szerint meghatároz egy konkrét erő forrást.

Page 5: JSP jegyzet-2005-12-20

1. Á ttekintés, fogalmak tisztázása

5

HTTP: Egy kommunikáció s protokoll, mely elő í rja az ügyfél és a kiszolgáló szoftverek webes kommunikáció jának mó dját.

Webkiszolgá ló (webszerver, HTTP kiszolgá ló ): Olyan kiszolgáló szoftver, amely az ügyfél számára HTML oldalakat küld.

A két leggyakrabban használatos HTTP kiszolgáló pillanatnyilag az Apache (multiplatformra) és az IIS (Internet Information Server, Windowsra).

A HTTP protokollban megadott erő forrás általában távoli gépekrő l is elérhető ; a file protokollban megadott erő forrás (file://állományspecifikáció ) a bö ngésző t futtató gépen van. A file protokollt akkor szokás használni, ha a bö ngésző bő l csak a saját gép erő forrásait szeretnénk elérni.

1.2. HTTP erő forrá sazonosító

HTTP kommunikáció s protokoll esetén az erő forrásazonosí tás szintakszisa a kö vetkező : http://<domén-név>|<IP cím>[:<kapu>][/<állományspecifikáció>] Jelentések: − domé n-né v vagy IP cím: Egy számí tó gépet (gazdagépet) azonosí t. A helyi számí tó gép

domén-neve localhost, IP címe 127.0.0.1 − kapu (port): Egy szám, amely egy kiszolgáló szoftvert azonosí t a gazdagépen.

Alapértelmezés: 80, amely egy HTTP szerver azonosí tó ja. − állományspecifikáció : Az adott gépen található erő forrás (állomány) relatív elérési útvonala. A relatív útvonal a szerver gyö kérkö nyvtárábó l indul. A gyö kérkö nyvtár alapértelmezett helye a szerverprogram konfiguráció játó l függ. Szintaktikája Windowsban: [/<mappa>[/<mappa>...]] [<állománynév>[.<kiterjesztés>]]

Jelö lések: <> behelyettesí tendő , | vagy, [] elhagyható , ... akárhány megadható .

Például: A 8080-as kapun a Tomcat szerverbe jutunk, ahol az alapértelmezett kö nyvtár: <TOMCAT_HOME>/webapps.

Egy szerverprogramnak vannak alapértelmezései mind a kiterjesztést, mind a fájlnevet ille-tő en; ezek az alapértelmezések általában a szerverprogram konfiguráció s állományában talál-ható k. Ha például az állományspecifikáció egy kö nyvtárt azonosí t, akkor egy webszerver az index.html lapot adja oda.

HTTP erő forrás-azonosí tó k például: http://81.78.95.174/szolgaltatasok/regisztracio http://localhost:8080/OOK http://sdp-city.hu/ http://sdp-city.hu http://sdp-city.hu:8080/ http://81.78.95.174:5029

Page 6: JSP jegyzet-2005-12-20

1. Á ttekintés, fogalmak tisztázása

6

Az erő forrást egy – a gazdagépen futó – folyamat kapja meg feldolgozásra (1.1. ábra). A szerverprogram és az erő forrás azonosí tása a HTTP erő forrásazonosí tó alapján a kö vetkező lépésekben tö rténik: 1. A domén-név vagy IP cím meghatároz egy számí tó gépet (a gazdagépet). Ez lehet akár

távoli, akár helyi gép. 2. A számí tó gépen futó folyamatokat (szerverprogramokat) az operáció s rendszer kapuszá-

mokkal azonosí tja (két szoftver nem indulhat el ugyanazon a kapuszámon). Az operáció s rendszer odaadja az erő forrást a megadott kapuszámú folyamatnak feldolgozásra.

3. A szerverprogram minden doménhez, illetve a localhosthoz hozzárendel egy gyö kér-kö nyvtárat (root dir). Az állományspecifikáció ebbő l a kö nyvtárbó l indul.

4. Ha az erő forrásazonosí tó egy programot azonosí t, akkor azt a szerverprogram lefuttatja, és a program kimenetét adja át a kliensnek, egyébként pedig magát az erő forrást.

1.1. ábra. A szerverprogram és az erő forrás azonosí tása

A kapu a szerver program „bejárata”. Egy szerver számí tó gépen rengeteg szerver szoftver futhat. Még egy személyi számí tó gépen is gyakori, hogy egyszerre fut egy webszerver, egy alkalmazás-szerver, egy adatbázis szerver és egy mail szerver. Az is nyugodtan elő fordulhat, hogy tö bb „azonos nemű” szerver, például tö bb adatbázis-szerver (mysql, interbase, oracle...) is fut egyszerre. Egy szolgáltató gépén általában ennél sokkal tö bb szerver is fut egyidő ben –elképzelhető , hogy csak webszerverbő l fut ö tféle. A kapu (port) a szerver alkalmazásokat azonosí tja egy adott számí tó gépen. Amikor egy szervert elindí tunk, meg kell adni egy kapuszámot – olyant, amilyennel még nem fut a számí tó gépen szerver program. A szerver általában a telepí téskor megadott kapuszámon kezd el futni.

Page 7: JSP jegyzet-2005-12-20

1. Á ttekintés, fogalmak tisztázása

7

A http://localhost:8080/OOK például a helyi számí tó gépen futó szervereket végignézi, és az első olyan szervernek odaadja a kérést, amelynek kapu-azonosí tó ja 8080. S mivel a „talált” szerver egy Tomcat webszerver lesz, a localhost gyö kérkö nyvtára (TOMCAT_HOME) alatti OOK kö nyvtárban levő index.jsp lapot fogja odaadni a kliensnek – a Tomcat alapértelmezett lapja ugyanis az index.jsp.

Vannak foglalt és ajánlott kapuszám-tartományok. A Tomcat webszerver alapértelmezett kapuszáma a 8080, vagyis ha ezt a kapuszámot a telepí tett Tomcat-ben nem í rták át, akkor az a 8080-as kapun fogadja a parancsokat. Ez azt jelenti, hogy ha az URI-be ezt a kapuszámot í rjuk be, akkor nagy való színűséggel egy Tomcat-be „botlunk”. Nem ajánlatos ezt a kapuszámot felülbí rálni, mert ha a szokásostó l eltérő kapuszámon futtatunk egy szervert, akkor a kliensek nem fogják megtalálni.

Egy szerver megszó lí tásához a bö ngésző ben meg kell adnunk a számí tó gépet (domén-nevet vagy IP címet), valamint a kaput. Egy HTTP szerver alapértelmezett kapuszáma a 80, az a szám, ami a HTTP erő forrás-azonosí tó ban is alapértelmezett. Ha tehát a kliens bö ngésző ben nem adunk meg kapuszámot, és a HTTP szerver is alapértelmezés szerint műkö dik, akkor az erő forrást egy HTTP szerver kapja meg feldolgozásra.

1.3. Webalkalmazá s

Webalkalmazá s: Alkalmazás (program), amely egy webkiszolgáló n fut, s amely felhasználó i felületét egy általános célú ügyfél alkalmazás, például egy bö ngésző adja (1.2. ábra).

1.2. ábra. A webkiszolgáló futtatja a webalkalmazást

Page 8: JSP jegyzet-2005-12-20

1. Á ttekintés, fogalmak tisztázása

8

A webalkalmazás futtatásakor az a cél, hogy a bö ngésző nkben meg tudjunk jelení teni egy távoli gépen futó webkiszolgáló szoftver által – a kérési paraméterektő l függő en – „legyártott” dinamikus információ t. Mint tudjuk, statikus információ megjelení téséhez bő ven elegendő a HTML lapok használata. A dinamikus megjelení tés azt jelenti, hogy a megjelení tett lap tartalma a futtatási kö rülményektő l függő en más és más lehet. A felhasználó lekérdezhet például konkrét adatokat, mely adatoktó l függő en aztán más és más lehet a kö vetkező re ö sszeállí tott weblap (például kimutatás).

A kiszolgáló a kérést saját konfiguráció s beállí tásai alapján értelmezi és elégí ti ki. A legegy-szerűbb eset, ha csak visszaküld egy statikus lapot. Ha azonban az URI egy programot azonosí t (lásd 1.2. ábra), akkor lefuttatja a programot, és az általa előállí tott lapot küldi vissza az ügyfélnek. A JSP lap is egyfajta program.

Egy egyszerű webalkalmazás futtatásához elegendő maga a bö ngésző . Bizonyos webalkalma-zások futtatásához azonban csatlakoztatni kell a bö ngésző hö z más programokat is (ezek az ún plugin programok, például képmegjelení tő , pdf olvasó vagy java virtuális gép).

1.4. A HTTP kérés/vá lasz modellje

A HTTP protokoll elő í rja az ügyfél és a kiszolgáló kö zö tti kommunikáció mó dját. Azt már tisztáztuk, hogy a kérésben megszó lí tott kiszolgáló szoftver és az erő forrás azonosí tását az URI kö zvetí ti. Most arró l lesz szó , hogy az ügyfél milyen adatokat küldhet át a kéréssel együtt, és milyen mó don kap választ.

Kérés (request)

A felhasználó nak a kö vetkező lehető ségei vannak, hogy elküldjö n egy kérést a kiszolgáló hoz: − A bö ngésző címsorába beí r egy erő forrás-azoností tó t (URL-t). Az URL végére

paramétereket is í rhat. − A HTML lapon rákattint egy linkre. A link végén paraméterek is szerepelhetnek. − A felhasználó a HTML lapon rákattint egy SUBMIT gombra.

Az első két esetben a kérés ún. GET eljárással megy el a szerverhez, a harmadik esetben POST eljárással. A HTTP protokoll szerint ugyanis az ügyfél alapvető en ezen eljárások egyikével küldheti el kérését a szervernek (tö bb mó dszer is van, de azokkal most nem foglalkozunk). A két eljárás kö zö tti alapvető külö nbség, hogy − GET esetén a paramétereket az URI tartalmazza (a kérdő jel után), például:

http://www.google.com/search?hl=en&lr=&q=tomcat+download&btnG=Search − POST esetén az URI „tiszta”, nincsenek hozzáfűzve a paraméterek végeláthatatlan ö sszevisszasága. A paraméterek rejtve vannak, azokat a felhasználó nem látja.

A HTTP kérés ö sszeállí tása a bö ngésző feladata. Elö ljáró ban nézzünk meg a bö ngésző által ö sszeállí tott két kérést: az egyiket GET, a másikat POST metó dussal kérték.

Egy GET-bő l ö sszeállí tott kérés:

Page 9: JSP jegyzet-2005-12-20

1. Á ttekintés, fogalmak tisztázása

9

GET /index.html?user=Jani&pw=Nenezz HTTP/1.0 Host: sdp-city.hu User-Agent: Opera Accept: image/jpeg Accept-language: en Accept-charset: iso-8859-2

Egy POST-bó l ö sszeállí tott kérés: POST /index.html HTTP/1.0 Host: sdp-city.hu User-Agent: Opera Accept: image/jpeg Accept-language: en Accept-charset: iso-8859-2 user=Jani pw=Nenezz

A HTTP protokoll pontosan elő í rja a kiszolgáló nak küldö tt kérés részeit, formátumát. Az átküldendő adatokat az ügyfélprogramnak „ö ssze kell szednie” (URI-bó l, ügyfél programtó l stb.), és csoportosí tania kell azokat a HTTP protokoll elő í rásai szerint.

Egy HTTP kérés részei a kö vetkező k (eljárástó l függetlenül): − Kérés sora: Elö l szerepel a kérési metó dus neve (GET, POST...), utána az erő forrás útvonala paraméterekkel, majd a protokoll verzió ja. Az erő forrás lehet egy statikus állomány, program, vagy más. Az erő forrás pontos beazonosí tása a webkiszolgáló dolga.

− Fejlécek (vastagon szedve): Ebben található k az ügyféllel (bö ngésző vel) kapcsolatos adatok, mint például a bö ngésző típusa. A feladat konkrét végrehajtásához a kiszolgáló -nak szüksége lehet ezekre az adatokra.

− Törzs: A fejlécektő l egy üres sor választja el. Csak akkor van tö rzs, ha a kérés a POST eljárással került ö sszeállí tásra. A tö rzs minden egyes sora egy paraméter: név=érték párosok. Ha az elkért erő forrás program, akkor annak szüksége lehet az itt megadott futási adatokra.

A kérés angol neve: request. A kö nyv késő bbi részeiben gyakran fogunk hivatkozni ilyen nevű objektumra.

Egy HTTP kérés alapvető eljárásai a kö vetkező k: − GET: A kérés egy link megadásával indul, ahol a link tartalmazza az URI-t és az esetleges

paramétereket. A linket megadhatjuk a bö ngésző címsorában, vagy egy lap (HTML, XML...) elemeként. Az alapértelmezett mó dszer a GET, vagyis ha a címsorba csak egy csupasz URI-t í runk be, akkor az GET mó dszernek minő sül. A GET mó dszer esetén paramétereket csak az URI végén, egy lekérdezési karakterláncban adhatunk meg. A lekérdezési karakterlánc kezdetét a ? jelzi, ezután kö vetkeznek a név=érték párosok, & jellel elválasztva. Például:

http://localhost:8080/mintaprogramok/akarmi.jsp?nev=Alajos&szulev=1976

Page 10: JSP jegyzet-2005-12-20

1. Á ttekintés, fogalmak tisztázása

10

− POST: A kérés a SUBMIT gomb lenyomására indul. Ebben az esetben a paramétereket jellemző en a HTML formok mező i szolgáltatják, de az URI végén is megadható k paraméterek. Az ügyfélprogram (például a bö ngésző ) a kérés ö sszeállí tásakor a form mező inek (név, érték) párosait a tö rzsben helyezi el.

A HTTP állapot nélküli protokoll. Ez azt jelenti, hogy a kiszolgáló a kérés teljesí tése után semmit nem jegyez meg a kérésbő l. Az ügyfél tehát minden egyes kéréskor „üres lappal” indul.

Vá lasz (response)

Egy válasz például: HTTP/1.0 200 OK Last-Modified: Date: Status: Content-Type: Servlet-Engine: Content-Length: <html> <body> Ez egy HTML lap. </body> </html>

A HTTP válasz részei a kö vetkező k: − Á llapotsor: Elö l szerepel a protokoll verzió ja, ezt kö veti az eredmény kó dja és leí rása. − Fejlécek (vastagon szedve): A válaszra jellemző adatok, mint az elküldö tt lap utolsó

mó dosí tásának dátuma, a tartalom típusa stb. − Törzs: A tö rzset a fejlécektő l egy üres sor választja el. A tö rzs maga a megjelení tendő

erő forrás, például egy HTML lap.

A kérés angol neve: response. A kö nyv késő bbi részeiben gyakran fogunk hivatkozni az ilyen nevű objektumra.

1.5. Java technológiá k

Alapvető rö vidítések

− JRE (Java Runtime Environment): Java futtatási kö rnyezet. Alapcsomag a Java progra-mok futtatásához. Tartalmazza a virtuális gépet és az alapvető API-kat.

− SDK (Software Development Kit): Szoftverfejlesztési csomag.

Java programozá si nyelv

A Java programozási nyelv segí tségével vállalkozás-értékű programokat lehet í rni, amelyek futnak akár bö ngésző ben, akár asztali számí tó gépen, szerveren vagy valamely fogyasztó i

Page 11: JSP jegyzet-2005-12-20

1. Á ttekintés, fogalmak tisztázása

11

eszkö zö n fut. Egy Java programot nem kö zvetlenül a natív operáció s rendszer futtat, hanem a Java virtuális gép (JVM), biztosí tva ezzel a platformfüggetlenséget.

Java platform

A Java platform egy szoftverekbő l álló kö rnyezet, amely egy adott hardver kö rnyezetre épül, és Java alkalmazások fejlesztését és/vagy telepí tését célozza. Mivel a hardver platformok nagyon specifikusak (más a memó ria, tárolási mó dszer, háló zati csatlakozás stb.), a külö n-bö ző hardver kö rnyezetekre speciális Java platformok készülnek. Minden egyes platform a speciális hardver kö rnyezet Java virtuális gépén alapszik. Ezért, ha egy tetsző leges platformon megí runk egy Java programot, az mó dosí tás nélkül futtatható egy JVM-mel rendelkező másik hardver kö rnyezetben.

Java technológiá k

A Java technoló gia egyszerre jelenti magát a programozási nyelvet és a külö nbö ző alkalma-zásfejlesztési és -futtatási platformokat. A Java technoló gia szabványos megoldásokat ad biztonságos, hordozható , megbízható és skálázható alkalmazások fejlesztésére és telepí tésére, elosztott kö rnyezetben. Fő bb Java technoló giák: − J2SE, Java 2 platform, Standard Edition (normál kiadás). A Java maghoz és az asztali

alkalmazások elkészí téséhez biztosí tja a szoftver kö rnyezetet. Erre a platformra épül tö bb más technoló gia, mint például J2EE. A J2SE részét képezik a kö vetkező elemek: Java fordí tó program; futtatáshoz szükséges segédprogramok; Java API-k az alkalmazá-sok és appletek í rásához, teszteléséhez, telepí téséhez és futtatásához.

− J2EE, Java 2 platform, Enterprise Edition (vállalati kiadás). Szabványokat ad és szoft-ver kö rnyezetet biztosí t komponens alapú, tö bbrétegű, elosztott vállalati alkalmazások-hoz. A J2SE-n alapszik, és további szolgáltatásokat, eszkö zö ket és API-kat tartalmaz a vállalati alkalmazások elkészí téséhez.

− J2ME, Java 2 platform, Micro Edition (mikro kiadás). Szabványokat ad és szoftver kö r-nyezetet biztosí t fogyasztó i és beágyazott eszkö zö k (pl. mobil telefonok, PDA-k, printe-rek) programjainak fejlesztésére és telepí tésére.

A Java technoló giák áttekintése a Sun oldalán megtalálható : http://java.sun.com/overview.html

1.6. Mi a szervlet?

A szervlet technoló gia a J2EE technoló gia szerves része, mellyel szerveroldali Java progra-mokat lehet í rni. A HTTP szervletek arra való k, hogy javás, webes alkalmazásokat készí tsünk (itt mindegyik szó nak súlya van): − javás: Ezek az alkalmazások a szerver oldalon tudnak javául. − webes: Az ügyfél webes felületen (bö ngésző segí tségével) kommunikál az alkalmazás-

sal. − alkalmazás: Programró l van szó , dinamikus megjelení tésrő l. A bö ngésző kérésére az

alkalmazás HTML lapokat „gyárt” a webkiszolgáló kö zreműkö désével.

Page 12: JSP jegyzet-2005-12-20

1. Á ttekintés, fogalmak tisztázása

12

1.3. ábra. A szervletek alapvető osztályai

A Java szervlet egy szerver oldali Java „programocska” (class állomány), mely a kliensek kéréseire válaszokat küld. Míg az applet egy kliensoldali, a szervlet szerveroldali program. A szervletet a szerver konténer hajtja végre, és sok esetben HTML állományt állí t elő .

A szervlet egy Java osztály, mely a servlet API interfészeibő l és osztályaibó l „épí tkezik”. Egy szervletnek implementálnia kell a Servlet interfészt, melynek legfontosabb metó dusai az ún. életciklus metó dusok: az init, a destroy és a service; ezeket a webkiszolgáló hívja meg a kérés érkezésekor. A service metó dus println metó dusok hívásaival elkészí theti a webszerver által szolgáltatandó dinamikus HTML lapot. A service metó dus készen kapja a request és response objektumokat, melyeket felhasználhat a lap készí tése során.

A GenericServlet absztrakt osztály egy alapértelmezett megvaló sí tását adja a Servlet interfésznek; csak a service metó dust „hagyja nyitva”.

A HttpSzervlet osztály a GenericServlet leszármazottja, mely további segí tséget ad a HTTP kérések teljesí téséhez.

Szervletet legegyszerűbben úgy tudunk í rni, ha a kibő ví tjük a GenericServlet vagy a HttpServlet osztályt, és megí rjuk annak service metó dusát.

javax::servlet::Servlet <interfész>

init(ServletConfig) service(ServletRequest, ServletResponse) destroy() ...

java::lang::Object

javax::servlet::GenericServlet {abstract}

init(ServletConfig) service(ServletRequest, ServletResponse) destroy() ... getInitParameter(String): String getInitParameterNames(): Enumeration

javax::servlet::http::HttpServlet {abstract}

service(HttpServletRequest, HttpServletResponse) doGet(HttpServletRequest, HttpServletResponse) doPost(HttpServletRequest, HttpServletResponse) ...

Page 13: JSP jegyzet-2005-12-20

1. Á ttekintés, fogalmak tisztázása

13

Szervleteket futtató programot szervlet konténernek szokás nevezni. Ha a webkiszolgáló (más néven webkonténer) szervletet futtató kérést kap, akkor a kérést átadja a szervlet konté-nerének, aki a szervletet betö lti és végrehajtja. A szervlet a végrehajtáshoz két paraméter-objektumot kap: egy kérést (request) és egy választ (response).

Az életciklus metó dusokat a javax.servlet.Servlet interfész definiálja, és a szervlet-konténer hívja meg. Feladataik: − init: inicializálja a szervlet objektumot; elő készí ti ő t a kérések fogadására. − servive(request, response): A szervlet-konténer minden egyes kéréskor ezt a metó dus

hívja meg. A kérés és válasz objektumait paraméterben adja át. − destroy: Végrehajtja a szervlet befejező metó dusait. Ezután a szervlet már nem kap tö bb

kérést. A servlet API implementáció ja, a servlet.jar csomag megtalálható a TOMCAT_HOME alatti common kö nyvtárban. A 2.2-es Servlet API a kö vetkező címen érhető el:

http://java.sun.com/products/servlet/2.2/javadoc/

A kö vetkező egyszerű kis példa egy Java szervlet műkö dését mutatja be.

Feladat Készítsü nk egy szervletet, amely elkészíti a képen lá tható HTML lapot!

A szervlet futtatásával még egy kicsit várnunk kell; ahhoz telepí teni kell majd egy Javás webszervert. A program futását ezért csak a kö vetkező fejezetben fogjuk kipró bálni. Figyelje meg, hogy a bö ngésző címsorába ezt í rtuk:

http://localhost:8080/mintaprogramok/servlet/fej02.Hurra

A kö vetkező fejezetben majd erre is lesz magyarázat.

hurra.java package fej02; import javax.servlet.*; //1 import javax.servlet.http.*; import java.io.*; import java.util.*;

Page 14: JSP jegyzet-2005-12-20

1. Á ttekintés, fogalmak tisztázása

14

public class Hurra extends HttpServlet { //2 public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //3 response.setContentType("text/html"); //4 PrintWriter out = response.getWriter(); //5 out.println("<html>"); //6 out.println("<head>"); out.println("<title>Hurrá</title>"); out.println("</head>"); out.println("<body bgcolor=lightgray>"); out.println("<h1>Hurrá!</h1>"); out.println("Sikerült elindítanom egy webalkalmazást!<br>"); out.println("<hr size=5 color=BLUE>"); for (int i=1; i<=3; i++) //7 out.println("ingyom bingyom táliber...<br>"); out.println("</body>"); //8 out.println("</html>"); } }

A forrá skód elemzése

♦ //1: A Hurra osztály használja a javax.servlet csomagot (ebben van például a Servlet interfész és a ServletException osztály), és a javax.servlet.http csomagot (ebben van a HttpServlet osztály).

♦ //2: A Hurra egy HttpServlet. ♦ //3: csak a service metó dust í rjuk át. Ezt a metó dust majd a kiszolgáló fogja meghívni, és

híváskor a programozó rendelkezésére bocsátja a kérés (request) és a válasz (response) paramétereket.

♦ //4: A válasz kontextusa text/html. ♦ //5: A választó l elkérünk egy writert, hogy használhassuk a println metó dust. ♦ //6: Az out.println metó dusokkal épí tjük fel a HTML lapot. Ugyanúgy í runk, mintha a

konzolra í rnánk. A HTML lap felépí téséért mi vagyunk a felelő sek. ♦ //7: Kö zben í rhatunk bármilyen Java kó dot.

A fenti szervlet futásának eredménye a kö vetkező HTML lap: <html> <head> <title>Hurrá</title> </head> <body bgcolor=lightgray> <h1>Hurrá!</h1> Sikerült elindítanom egy webalkalmazást!<br> <hr size=5 color=BLUE> ingyom bingyom táliber...<br> ingyom bingyom táliber...<br> ingyom bingyom táliber...<br> </body> </html>

Page 15: JSP jegyzet-2005-12-20

1. Á ttekintés, fogalmak tisztázása

15

A HTML lap pontos tartalmáró l meggyő ző dhet a bö ngésző View Source Page parancsával.

1.7. Mi a JSP?

A JSP (Java Server Pages) egy technoló gia – a J2EE technoló gia szerves része, és a szervlet technoló giára épül. A JSP technoló gia lényege, hogy a weblap sorait nem egy szervlet készí ti kö zvetlenül, hanem az elkészí thető bármilyen „hagyományos” mó dszerrel, és az esetleges dinamizmus (program) a weblap sorai kö zé ékelő dik be. Így a webkiszolgáló által küldö tt weblap statikus részeit nem a programozó (a szervlet í ró ja) állí tja ö ssze, hanem egy erre a feladatra specializáló dott webszerkesztő .

A JSP technoló gia használatával külö n lehet választani a webszerkesztő és programozó mun-káját, aminek eredményeként sokkal hatékonyabban lehet a kor kívánalmainak megfelelő dinamikus weblapokat készí teni.

A kö vetkező egyszerű kis példa egy JSP lapot mutat be.

Feladat Készítsü nk egy JSP lapot, mely elkérésére a képen lá tható lap jelenik meg – ugyanaz, mint az elő ző pontban tá rgyalt feladatban!

A JSP futtatásával is várnunk kell a kö vetkező fejezetig. Jó l látható , hogy az előállí tott kép ugyanaz, mint amit az elő ző pont szervlete állí tott elő . Figyelje meg, hogy most a bö ngésző címsorába ezt í rtuk:

http://localhost:8080/mintaprogramok/fej02/Hurra.jsp

hurra.jsp <html> <head> <title>Hurrá</title> </head> <body bgcolor=lightgray> <h1>Hurrá!</h1> Sikerült elindítanom egy webalkalmazást! <br> <hr size=5 color=BLUE>

Page 16: JSP jegyzet-2005-12-20

1. Á ttekintés, fogalmak tisztázása

16

<% for (int i=1; i<=3; i++) out.println("ingyom bingyom táliber...<br>"); %> </body> </html>

Ez a JSP kó d annyival tö bb, mint egy normál HTML kó d, hogy van rajta egy JSP kó drészlet (vastagon szedett rész). Ez a kó drészlet tö rténetesen egy JSP szkript, melyet a <% vezet be, és a %> zár le.

Amikor elkérünk egy JSP lapot, akkor a JSP értelmező szervletet készí t belő le, majd lefordí tja és futtatja azt (1.4. ábra). A bö ngésző végül egy kész, programkó dot már nem tartalmazó weblapot lap megjelení tésre. Mindkét technoló gia (szervlet és JSP) esetében tehát a weblapot egy szervlet készí ti, csak a JSP technoló gia esetében ez a színfalak mö gö tt zajlik.

A JSP lapra csak annyi programkó dot ajánlatos rátenni, amennyi feltétlenül szükséges. Amit csak lehet, rejtsünk a színfalak mö gé, normál Java osztályokba! A JSP lapró l aztán speciális szabályok szerint lehet meghívni az osztályok által megvaló sí tott normál metó dusokat, illetve akció kat.

A JSP lapokat értelmező és szervletté alakí tó programot JSP konténernek szokás nevezni. Ha a webkiszolgáló JSP-t futtató kérést kap, akkor a kérést átadja a JSP konténerének.

1.4. ábra. A JSP lap átalakí tása és futtatása

Egy JSP lap annyival bő vebb, mint egy webes (HTML, XML vagy bármi más) lap, hogy azon JSP kó d található . A lap JSP-n kívüli része a sablonszö veg, melyet a JSP kó d bárhol megsza-

Page 17: JSP jegyzet-2005-12-20

1. Á ttekintés, fogalmak tisztázása

17

kí that. A JSP-t értő webkiszolgáló a JSP lapbó l sablonszö veget állí t elő úgy, hogy a lap eddigi sablonszö vegét figyelembe véve a JSP lapon levő kó dot futtatja.

Egy JSP alkalmazást a bö ngésző bő l indí tva futtatunk úgy, hogy a háttérben futó , JSP-t értő webszervertő l JSP lapokat kérünk el. A webszerver, mielő tt átadná a bö ngésző nek a JSP lapot, a lapon levő JSP kó dot lefuttatja, és a kó d helyére a bö ngésző által értelmezhető kó dot (pl. HTML kó dot) illeszt be.

Egy JSP lapnak jsp a kiterjesztése, és a normál, HTML kó don kívül JSP kó dot is tartal-maz(hat).

A hurra.jsp nevű JSP alkalmazás futtatásával is kicsit várnunk kell egy kicsit. Egyelő re csak képzeljük el, hogy ez a JSP lap ott ül valahol a webszerver gyö kérkö nyvtárának minta nevű mappájában. Ha ezt a JSP lapot elkérjük a webszervertő l (a bö ngésző be í rt kérési paranccsal: http://localhost:080/hurra/hurra.jsp), akkor a webszerver lefuttatja a JSP kó drészletet, mely alapján ezt a HTML lapot állí tja elő (kissé rendetlen, de hát „ez van” – szerencsére ez a lap kinézetét ez nem befolyásolja):

<html> <head> <title>Hurrá</title> </head> <body bgcolor=lightgray> <h1>Hurrá!</h1> Sikerült elindítanom egy webalkalmazást! <br> <hr size=5 color=BLUE> ingyom bingyom táliber...<br> ingyom bingyom táliber...<br> ingyom bingyom táliber...<br> </body> </html>

A bö ngésző már ezt a „lefuttatott” lapot kapja meg, amire a már látott kép tárul elénk.

1.8. Mi kell egy JSP program futtatá sá hoz?

Egy JSP alkalmazást csak egy JSP-t értő webszerver képes futtatni. Ilyen webkiszolgáló nem is egy van (pl. Tomcat, Velocity, JBoss, Blazix, SimpleW stb.), de mi most a Sun által kifej-lesztett, nyí lt, java forráskó dú, referenciaként szolgáló Apache Tomcat webszervert fogjuk műkö dtetni. A Tomcat az Apache Jacarta Project keretében készült webszerver, más néven webkonténer (Servlet és JSP konténer egyben).

Egy JSP alkalmazás futtatásához a webszerveren kívül szükség van Java futtató kö rnyezetre is, hiszen a JSP kó drészletek, és fő leg ami mö gö tte van, java kó d. Ráadásul a Tomcat egy Java alkalmazás, ezért az ő futásához is szükség van egy Java virtuális gépre.

Page 18: JSP jegyzet-2005-12-20

1. Á ttekintés, fogalmak tisztázása

18

Egy JSP program futtatásához szükségünk van a kiö vetkező kre (1.5. ábra):

a szerver számí tó gépen − egy JSP-t értő webszerverre (webkonténerre); − egy Java futtató kö rnyezetre és API-ra. A Tomcat esetében elegendő a J2SE is, mert a J2EE

technoló giához kapcsoló dó dolgokat saját maga is telepí ti. a kliens számí tó gépen pedig − egy bö ngésző re.

A szerver és a kliens számí tó gép „egybeeshet”, vagyis a Java futtató kö rnyezet és a webszerver nyugodtan telepí thető arra a számí tó gépre, ahonnan a bö ngésző t elindí tjuk.

Legyen most a szerver és a kliens számí tó gép ugyanaz a számí tó gép; tanulásra és tesztelésre ez most nekünk megfelel!

1.5. ábra. JSP futtatási kö rnyezet

Az 1.5. ábra egy JSP futtatási kö rnyezetet ábrázol. A kliens gépen van a bö ngésző , ahova beí rjuk a JSP lapot azonosí tó URL-t: most ez éppen a http://sdp-city:8080/minta/hurra.jsp. Ezt a kérést a Tomcat webszerver fogadja, mert ö vé a 8080-as kapu. A Tomcat használja a J2SE API-ját (a JSP szkriptben a println metó dus például a java.io-ban található ).

Page 19: JSP jegyzet-2005-12-20

2. Javás webalkalmazások futtatása

19

2. Javá s webalkalmazá sok futtatá sa

Ebben a fejezetben ö sszeállí tunk egy futtató kö rnyezetet, amelyen aztán külö nféle – egyszerűbb és bonyolultabb – JSP és szervlet alkalmazásokat fogunk futtatni. A programokat egyelő re csak használjuk; fejlesztő i szempontbó l még csak „ízlelgetjük” ő ket. A fogalmak tisztázása késő bb kö nnyebb lesz, ha konkrét példákhoz tudjuk kö tni azokat.

2.1. A Tomcat webszerver telepítése

A webszervert általában egy szerver gépre szokás telepí teni, szolgáltatásait pedig valamely távoli, kliens géprő l szokás igénybe venni. Nekünk azonban egyelő re – a tanulás/fejlesztés idejében – tö kéletesen megfelel, ha a szerver és a kliens gép ugyanaz. A szerver programot tehát a saját gépünkre fogjuk telepí teni, s majd a bö ngésző t is innen indí tjuk el.

Mi most Java alapú webszervert fogunk használni, amely műkö déséhez szükség van a Java kö rnyezetre. Ha a jö vő ben csak futtatni szeretnénk JSP programokat, akkor elegendő lenne csupán a futtató kö rnyezet (a JRE), de mi fejleszteni is akarunk majd, ezért használjuk inkább a fejlesztő kö rnyezetet, a J2SE-t! Mielő tt tehát telepí tenénk a Tomcat webszervert, nézzük meg, van-e a gépen Java fejlesztő kö rnyezet, és ha nincs, telepí tsük!

Az Apache Tomcat telepí tő csomagja letö lthető a http://tomcat.apache.org oldalró l. A 4.1-es verzió telepí tő állományának neve például jakarta-tomcat-4.1.31.exe. Indí tsuk el a telepí tőállományt, és telepí tsük fel gépünkre a szervert! A telepí tő mielő tt megkezdené az érdemi munkát, beazonosí tja a Java kö rnyezetet a JAVA_HOME alapján. Ü gyelni kell tehát e kö rnyezeti változó helyes beállí tására. Ezután a Tomcat kö nnyűszerrel feltelepül a kö vetkező lépésekben:

Page 20: JSP jegyzet-2005-12-20

2. Javás webalkalmazások futtatása

20

Látható , hogy a telepí téshez mintegy 33 MB-nyi helyre van szükség a merevlemezen. A tele-pí tés utolsó lépésként meg kell adnunk a szervert azonosí tó kaput (portot), valamint az admi-nisztrátor felhasználó i nevét és jelszavát – ezekkel az adatokkal lehet késő bb a szerverhez hozzáférni:

Alapbeállí tások (Basic settings):

− Http Connector Port (Http csatlakozó kapu): az alapértelmezett port. A szerver ezen a kapun fogadja a Http kéréseket. Alapértelmezés: 8080

− User name (felhasználó i név): Az adminisztrátor felhasználó i neve. Alapértelmezés: admin

− Password (jelszó ): Az adminisztrátor jelszava. Alapértelmezés: (semmi) Az adminisztrátori név és jelszó megváltoztatása a tanulás idő szakában nem ajánlatos. Ha ugyanis megváltoztatja, majd elfelejti, a továbbiakban nem tud semmilyen mó don hozzáférni a szerverhez. Egyelő re nincs is mit „elrejtenünk”.

A TOMCAT_HOME a telepí tett Tomcat localhost-hoz rendelt alapkö nyvtára. Ha a szervert alapértelmezés szerint, a C:/ lemezegységre telepí tettük, akkor

TOMCAT_HOME=C:/Program Files/Apache Group/Tomcat 4.1

Telepí tés után a TOMCAT_HOME kö rnyezeti változó automatikusan értéket kap. A további-akban a TOMCAT_HOME mindig a Tomcat alapkö nyvtárát jelenti ebben a kö nyvben is.

Page 21: JSP jegyzet-2005-12-20

2. Javás webalkalmazások futtatása

21

Telepí tés után a programok menüjében, az Apache Tomcat 4.1 programcsoport alatt a kö vet-kező programok jelennek meg: − Start Tomcat: A szerver elindí tása. Lásd késő bb. − Stop Tomcat: A szerver leállí tása. Lásd késő bb. − Tomcat 4.1 Program Directory: Belépés a TOMCAT_HOME kö nyvtárba. A kö nyvtár

felépí tését lásd késő bb. − Tomcat Administration: A webszerver adminisztráció s felülete. A bö ngésző címsorában

megjelenik a http://127.0.0.1/admin. S mivel a localhoston a webalkalmazások alapértelmezett helye a domén gyö kérkö nyvtárának webapps alkö nyvtára, ezért a helyi gépen megjelenik a %TOMCAT_HOME/%webapps/admin.xml állomány. Győ ző djö n meg ró la, hogy ez az állomány tényleg ott van-e! Vigyázat: a szolgáltatás csak akkor érhető el, ha elő ző leg a webszervert elindí tottuk! Ha sikerült elindí tani az adminisztráci-ó s felületet, akkor jelentkezzen be azzal a felhasználó i névvel (User Name) és jelszó val (Password), amelyet installáláskor megadott! A megjelenő adminisztrátori felület lehető séget ad a teljes jogot élvező adminisztrátor-nak arra, hogy megtekintse, vagy akár mó dosí tsa a webszervert elérő felhasználó k adatait, a szerver erő forrásait, beállí tásait stb.

A Tomcat Administration egy JSP-ben megí rt alkalmazás, érdemes tanulmányozni!

− Tomcat Documentation: Ez a Tomcat súgó ja. Ha a Tomcat telepí tésekor kértük a Documentation and Examples telepí tését is, akkor az a %TOMCAT_HOME%/ webapps/tomcat-docs kö nyvtárban található . A dokumentáció online mó don is elérhető a Tomcat honlapjáró l.

− Tomcat Home Page: Ugrás a Tomcat honlapjára: http://tomcat.apache.org − Uninstall Tomcat 4.1: A telepí tett Tomcat leszedése a szerver géprő l.

2.2. A webszerver elindítá sa, leá llítá sa

A bö ngésző csak akkor tud kommunikálni a szerverrel (csak akkor képes például megjelení teni egy JSP lapot), ha a háttérben fut a webszerver. A szolgáltató k webszerverei

Page 22: JSP jegyzet-2005-12-20

2. Javás webalkalmazások futtatása

22

állandó an futnak. Saját gépünkö n azonban használat után nyugodtan leállí thatjuk a szolgáltatást, hogy az ne terhelje feleslegesen gépünket.

A szervert a kö vetkező képpen indí thatjuk el: Start/Apache Tomcat 4.1/Start Tomcat, vagy a szolgáltatásokat tartalmazó bin kö nyvtárban levő startup.bat futtatásával.

Leállí tani majd így fogjuk: Start/Apache Tomcat 4.1/Stop Tomcat, vagy a szolgáltatásokat tartalmazó bin kö nyvtárba levő shutdown.bat futtatásával.

☼ Érdeklő dő knek Mindkét esetben a %TOMCAT_HOME%/bin/bootstrap.jar futtatható JAR állományt futtatjuk – start, illetve stop paraméterekkel. Errő l meggyő ző dhetünk, ha megtekintjük a Start Tomcat, illetve Stop Tomcat tulajdonságában a végrehajtandó parancsot.

A Tomcat elindí tására megjelenik egy konzolos ablak, amely a szerver futása alatt mindvégig nyitva van:

Elő fordulhat, hogy a webszerver induláskor rengeteg kivételt dob. Ez akkor fordul elő , ha a a szerver a webapps kö nyvtárban található alkalmazásokban szintaktikai hibát talál. Indí táskor ugyanis a Tomcat a webapps kö nyvtárban levő war (Web ARchive) állományokat kibontja, és mindent lefordí t, ami még nincs lefordí tva.

Tanácsok: − ha a bö ngésző nem látja a localhostot, akkor a bö ngésző ben a helyi háló zat proxy-

beállí tását kapcsolja ki: Eszkö zö k/Internetbeállítások/Kapcsolatok/LAN/proxy − Ha nem frissül a bö ngésző ben a lap, akkor frissí tés (az erő forrás erő szakos újratö ltése)

segí thet: Ctrl-F5.

Page 23: JSP jegyzet-2005-12-20

2. Javás webalkalmazások futtatása

23

2.3. A webszerver mapparendszere

Kapcsoljon le a telepí tés célhelyére: Start/Apache Tomcat 4.1/Tomcat 4.1 Program Directory. A helyi gépen ezzel belépünk a TOMCAT_HOME kö nyvtárba. A kö vetkező kö nyvtárszer-kezet tárul elénk:

Nézzük meg nagy vonalakban, mit rejtenek ezek a mappák:

− bin: Itt vannak a szerver elindí tásához és leállí tásához szükséges szolgáltatások: jar és batch állományok. Ebben a mappában van tö bbek kö zö tt a startup és a shutdown parancs (kiterjesztésük windowsban bat, linuxban sh).

− common: Az alkalmazások kö zö s API gyűjteménye. Java Archive (JAR) osztály-kö nyvtárak, például mail.jar, servlet.jar stb.

− conf: A szerver konfiguráció s állományai, például a server.xml állomány. Itt található k a minden webalkalmazásra érvényes beállí tások.

− logs: Napló fájlok. Ide kerülnek bejegyzésre a szerverrel kapcsolatos fontosabb tö rténések, mint indí tás, leállí tás stb.

− server: − shared: − temp: − webapps: A szerver által felügyelt alkalmazások, programok alapértelmezett kö nyvtára.

A webapps kö nyvtárban vannak a webalkalmazások – minden webalkalmazás egy külö n kö nyvtárban.

− work:

2.4. A webalkalmazá s felépítése

Egy webalkalmazás bö ngésző bő l futtatható , van egy kezdő lapja, ahonnan további lapok érhető k el. A lapok tö bbsége dinamikus, hiszen ettő l alkalmazás. A webalkalmazást és annak saját erő forrásait tipikusan egy – az alkalmazás nevét viselő – mappa tartalmazza. A Tomcat webszerveren a helyi alkalmazások a webapps kö nyvtárban található k – minden alkalmazás egy külö n kö nyvtárban.

Page 24: JSP jegyzet-2005-12-20

2. Javás webalkalmazások futtatása

24

Az alkalmazás JSP lapjai az alkalmazás kö nyvtárában bárhol elhelyezhető k, kivéve a WEB-INF kö nyvtárat, ahol a lapok mö gö tti alkalmazási logika „lapul”. Ezt a Java osztályokat tároló kö nyvtárat egyetlen kliens sem láthatja. A WEB-INF kö nyvtár felépí tése bizonyos szempont-bó l hasonló egy asztali alkalmazás projektkö nyvtárának felépí téséhez: a classes kö nyvtárban található k például a lefordí tott bájtkó dok, amely mapparendszere megfelel a csomagfelépí tés szabályainak. Elvileg tehetjük ide az src kö nyvtárat is, de figyelembe kell venni, hogy a webapps tipikusan futtatási kö nyvtár.

Az alkalmazá s kö nyvtá rszerkezete

A kö vetkező struktúra egy tipikus webalkalmazás mapparendszerét mutatja. Az alkalmazás kö nyvtára a webapps/[alkalmazásnév], a vastagon szedett azonosí tó k kö nyvtárnevek:

index.html jsp *.jsp images *.jpg WEB-INF web.xml lib *.jar classes *.class tlds *.tld

Az alkalmazás kö nyvtárának egyetlen kö telező alkö nyvtára van, a WEB-INF, s annak egyetlen kö telező állománya, a web.xml (az alkalmazás telepí tésleí ró ja). A WEB-INF kö nyvtárat csak a szerver látja, a kliensek nem látják – ide kell elhelyezni minden olyan információ t, amit nem akarunk kitenni a nagykö zö nség számára. A JSP lapok és más állományok a WEB-INF kö nyvtáron kívül helyezendő k el, ezek szerkezete nem kö tö tt.

Nézzük sorra az alkalmazás ajánlott kö nyvtárait: − jsp: Ha az alkalmazásnak sok JSP lapja van, akkor ebben a kö nyvtárban szokás

elhelyezni azokat. Néhány JSP lapot nyugodtan be lehet tenni az alkalmazás fő kö nyvtárába. A JSP lapok alkö nyvtárakba szervezhető k. A JSP lapok egymásró l érhető k el, és általában van egy fő lap, ami jellemző en az index.html vagy index.jsp. Az egyes lapok elvileg külö n kérésre is elérhető k.

− images: Itt szokás elhelyezni az alkalmazás képállományait. − WEB-INF: Ebben a kö nyvtárban vannak a futtatható Java osztályok és az ehhez

szükséges leí ró k. A web.xml állomány az alkalmazás telepí tésleí ró ja (lásd lent). − lib: Itt található k az alkalmazás által használt osztálykö nyvtárak. Az alkalmazás ezeken

kívül még használhatja az ö sszes webalkalmazás kö zö s kö nyvtárát (webapps/common) is.

− classes: Ez az alkalmazás „motorja”, itt vannak a programok: szervletek, babok és más, normál Java osztályok

Page 25: JSP jegyzet-2005-12-20

2. Javás webalkalmazások futtatása

25

− tlds: A JSP lapokró l ún. akció kat lehet indí tani, amelyeket Java osztályok hajtanak végre. Itt kell elhelyezni az alkalmazás akció inak leí ró állományait.

Telepítésleíró

Az alkalmazásnak tartalmaznia kell egy telepí tésleí ró t, amely az alkalmazás WEB-INF kö nyvtárában van, web.xml néven. A telepí tésleí ró minimális tartalma a rendelkező (az első sor persze értelemszerűen változhat):

<?xml version="1.0" encoding="ISO-8859-2"?> <web-app> </web-app>

Példa: A mintaprogramok egy webalkalmazás: az ő kö nyvtára a webapps/mintaprogramok, tartozik hozzá egy web.xml telepí tésleí ró .

Web ARchive (WAR)

A javás webalkalmazásokat ún. WAR állományba szokás csomagolni. A tö mö rí tés formája ZIP, ugyanúgy mint egy JAR állomány esetében. Vannak olyan webszerverek, amelyek ezt az állományt egyben tudják kezelni. A Tomcat indulásakor a webapps kö nyvtárban található ö sszes WAR állományt kibontja, és az alkalmazás állományait kibontva futtatja.

2.5. Webalkalmazá sok telepítése és futtatá sa

Van tehát egy JSP-t tudó webszerverünk. Most dolgoztassuk meg, vagyis futtassunk rajta webes, konkrétan JSP-s alkalmazásokat!

A kö nyv mintaprogramjainak telepítése és futtatá sa

Mindenekelő tt pró báljuk meg futtatni a kö nyv mintaprogramjait! Ehhez tegye meg a kö vetke-ző ket:

(1) A kö nyv mellékletének mintaprogramok.war állományát másolja a TOMCAT_HOME webapps kö nyvtárba!

(2) Indí tsa el a szervert!

(3) Indí tsa el a bö ngésző t!

(4) Írja be a bö ngésző címsorába a kö vetkező kérést (URI-t): http://localhost:8080/mintaprogramok/fej02/Hurra.jsp

Ha van a gépen Java futtató rendszer, a webszerver telepí tése rendben ment és fut is a szerver, akkor most való színüleg létrejö tt a szerverrel a kapcsolat, és a webapps kö nyvtár tartalma a kö vetkező lett:

Page 26: JSP jegyzet-2005-12-20

2. Javás webalkalmazások futtatása

26

A mintaprogramok mappa pedig így néz ki:

A kérés beí rására a már régebben is látott képnek kell megjelennie:

Egy alkalmazás indí tásakor tulajdonképpen megjelení tünk egy (kezdő )lapot a bö ngésző ben. Ez a lap lehet akár egy statikus HTML lap, vagy a bö ngésző által megjelení thető más típusú lap (DHTML, XML stb.). A lapok egymást hívogathatják. A HTML és a JSP lapok kö zö tt van egy nagy külö nbség: míg a HTML lapot a bö ngésző ö nálló an is meg tudja hibátlanul jelení teni, addig a JSP lap megjelení téséhez a webszerverre is szükség van: ha a JSP lap „nem megy át” egy szerveren, akkor a rajta levő kó dot a bö ngésző sima szö vegként fogja megjelení teni. A JSP-t tudó webszervert úgy tudjuk kö zbeiktatni, ha a lapot kö zvetlenül a

Page 27: JSP jegyzet-2005-12-20

2. Javás webalkalmazások futtatása

27

webszervertő l kérjük el. Ehhez a bö ngésző címsorába nem elegendő az állomány nevét beí rnunk – egy olyan http kérést kell megadnunk, amely egyértelműen megtalálja a webszer-vert (a kapu alapján), s azon belül az erő forrást (hogy az hol van, azt már a webszerver konfiguráció ja dö nti el). A webszerver dö nti el, hogy szükség van-e a lap valamiféle „megmunkálására” (ilyen a JSP), vagy változtatás nélkül kell-e odaadnia (ilyen a HTML).

Futtassa a mintaprogramok tö bbi JSP lapját is! Nem kell mást tennie, mint a bö ngésző ben megváltoztatni az állományspecifikáció t.

Vigyázat! A szervletet (vagy bármilyen webalkalmazást) nem lehet file protokollal futtatni, vagyis így:

file:///C:/Program%20Files/Apache%20Group/Tomcat%204.1/webapps/ mintaprogramok/fej02/Hurra.jsp

A gyö kéralkalmazá s (ROOT) futtatá sa

Indí tsa el a bö ngésző t, és í rja be a címsorába a kö vetkező t: http://localhost:8080

Az alkalmazás csak akkor fog futni, ha fut a szerver! A 8080-as portot a Tomcat webszerver figyeli! A webszerver úgy van konfigurálva, hogy ha nem adunk meg egy konkrét alkalma-záskö nyvtárat, akkor a ROOT (gyö kér) alkalmazás indul el, annak is az index.jsp lapja.

Érdekességképpen nézze meg a ROOT kö nyvtárszerkezetét! Ehhez nyissa meg a TOMCAT_HOME kö nyvtárat (Start/Programs/Apache Tomcat 4.1/Tomcat 4.1. Program Directory), majd váltson le a szerver alkalmazáskö nyvtárai kö zül a ROOT mappába:

A ROOT alkalmazás a Tomcat alapértelmezésbeli alkalmazása. Innen sokminden elérhető : a Tomcat adminisztráció s felülete, a Tomcat dokumentáció , a Tomcat mintapéldái vagy akár a Tomcat honlapja.

Gyá ri mintaprogramok – examples

A Tomcat mintapéldái a TOMCAT_HOME/webapps/examples kö nyvtárban vannak. Írja be a bö ngésző címsorába a kö vetkező t:

http://localhost:8080/examples/jsp/index.html

Page 28: JSP jegyzet-2005-12-20

2. Javás webalkalmazások futtatása

28

Megjelenik egy HTML lap, amelybő l tesztelhetjük a minta JSP fájlok futását (Execute), és mindjárt meg is nézhetjük a JSP lap forrását is (Source).

Figyelje meg:

− Bármelyik JSP állomány kö zvetlenül is futtatható , például: http://localhost:8080/examples/jsp/num/numguess.jsp http://localhost:8080/examples/jsp/dates/date.jsp

− Ha nem fut a kiszolgáló , akkor az index.html még megjelenik (azon nincs JSP kó d); még a Source kó d is megjelenik, azonban a futásssal baj lesz: az Execute-ra kattintva ezt a hibajelentést kapjuk:

Magyarul: A localhost:8080-nal való kapcsolatfelvétel vissza van utasí tva. Vagyis a helyi számí tó gépen a 8080-as kapun „nem lehet bemenni”.

Indí tsa el a kiszolgáló t!

− Egy JSP lap csak a JSP konténeren keresztül jelenik meg helyesen! Ha a JSP állományt a konténer megkerülésével jelení tjük meg (például a file protokollal, vagy a jsp laphoz a bö ngésző t társí tjuk), akkor a JSP kó d-betétek szö vegként jelennek meg (lásd kép).

Page 29: JSP jegyzet-2005-12-20

2. Javás webalkalmazások futtatása

29

ora mintaprogramok

A webapps kö nyvtárba más alkalmazások is betehető k. Kísérletképpen tö ltse le Hans Bergsten: JavaServer Pages című kö nyve 3. kiadásának mintapéldáit a kö vetkező oldalró l:

http://examples.oreilly.com/jserverpages3/

Másolja be a benne található ora kö nyvtárat a webapps alá (ugyanabba a mappába, ahol a ROOT és az examples vannak)!

Indí tsa újra a bö ngésző t, majd í rja be a bö ngésző címsorába az alkalmazás indí tó lapjának címét:

http://localhost:8080/ora/index.html

A kö nyv JSP lapjai tehát egy HTML lapró l érhető k el. Ezek a példák már nehezebbek, majd késő bb érdemes nézegetni ő ket.

2.6. Szervletek futtatá sa

A mintaprogramok alkalmazás WEB-INF/classes/fej02 kö nyvtárában van a Hurra szervlet, pontosabban a hurra.class, amely az src/fej02/Hurra.java fordí tása.

Indí tsa el a Tomcat webszervert! Írja be a bö ngésző be a kö vetkező URL-t: http://localhost:8080/mintaprogramok/servlet/fej02.Hurra

A mintaprogramok alatti servlet kö nyvtár (vastagon szedett) nem egy való s kö nyvtár. A szervlet specifikáció ja szerint ez a WEB-INF classes kö nyvtárát jelenti. Ez a leképezés a telepí tésleí ró állomány servlet-mapping tagjában van megadva. Az állományspecifikáció további részében a csomagstruktúrát Java szintaktika szerint kell megadni, vagyis a csomag-szinteket pontok választák el.

Most pró báljon Ö n is í rni egy egyszerű szervletet!

Page 30: JSP jegyzet-2005-12-20

2. Javás webalkalmazások futtatása

30

Feladat – Sikerult

Készítsen egy szervletet, amely megjeleníti a kö vetkező szö veget:

2005-ben sikerü lt 2005-ben elindítanom egy szervletet!

A weblap címe "Sikerü lt" legyen, a lap há ttérszíne legyen sá rga.

Hajtsa végre a kö vetkező lépéseket: − Hozza létre a webapps/sajat mappát! A sajat alkalmazás fogja tárolni a kö nyv ö sszes

feladatának Ö n által megadott megoldását. − Hozza létre a WEB-INF mappát, ebben lesznek a Java programok! − tegyen a WEB-INF mappába egy web.xml állományt: másolja ide a mintaprogramok/

WEB-INF mappa web.xml állományát! − Hozzon létre egy src/fej02 mappát a 2. fejezet forráskó djai számára! − Hozzon létre egy classes mappát a bájtkó d számára! − Az src/fej02 mappában hozzon létre egy Sikerult.java szervlet osztályt az alábbi

forráskó ddal.

Sikerult.java package fej02; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; public class Sikerult extends HttpServlet { public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); GregorianCalendar naptar = new GregorianCalendar(); int ev = naptar.get(Calendar.YEAR); out.println("<html>"); out.println("<head>"); out.println("<title>Sikerült</title>"); out.println("</head>"); out.println("<body bgcolor=yellow>"); out.println(ev+"-ben sikerült elindítanom egy szervletet!"); out.println("</body>"); out.println("</html>"); } }

A szervlet lefordí tásához készí tsen el egy fordit.bat állományt a WEB-INF kö nyvtárban a kö vetkező tartalommal:

Page 31: JSP jegyzet-2005-12-20

2. Javás webalkalmazások futtatása

31

javac -cp "%TOMCAT_HOME%/common/lib/servlet.jar" -d classes src/fej02/Sikerult.java pause

A classpath-ban megadtuk a %TOMCAT_HOME%/common/lib mappáját mert abban van a servlet.jar osztálykö nyvtár.

Futtassa a fordit.bat állományt! Erre keletkezik egy Sikerult.class állomány a classes/fej02 kö nyvtárban.

Írja be a bö ngésző címsorába: http://localhost:8080/sajat/servlet/fej02.Sikerult

Sikerült?

2.7. Egy nagyobb alkalmazá s telepítése és futtatá sa – OOK

Telepí tsük most az „Objektumorientált Szoftverfejlesztés Klub Java alapú webalkalmazása” (rö viden OOK, ObjektumOrientált Klub) SDP-t [2]! A szoftver feladata rö viden a kö vetkező :

A fejlesztés célja az ObjektumOrientá lt szoftverfejlesztési Klub (tová bbiakban OOK) jelenlegi, a http://www.gdf.hu/progtanszek/ook címen elérhető , csupá n statikus HTML oldalakbó l á lló honlapjá -nak lecserélése egy tö bbfelhaszná ló s, dinamikus, adatbá zison dolgozó webalkalmazá sra, hogy meg-kö nnyítse a klub vezető jének a munká já t, és tö bbletszolgá ltatá sokat nyújtson a honlap lá togató i szá má ra...

A szoftver futtatásához két kiszolgáló is szükséges: egy Tomcat webszerver, és egy MySQL adatbázis-szerver. Tomcatunk már van, remélhető leg fut is. Pró báljunk beüzemelni egy adatbázis-szervert is a gépünkö n! A szoftver leveleket is küld; ehhez majd megadjuk a levelező szervert futtató szolgáltató nk számí tó gépnek IP címét (levelező -szervert azért már nem telepí tünk magunk :-).

Az OOK szoftver telepí tési leí rása természetesen a szoftver felhasználó i kézikö nyvében is megtalálható .

Adatbá zis szerver telepítése, és az OOK adatbá zis „beüzemelése”

A MySQL egy nyí lt forráskó dú adatbáziskezelő szoftver (http://www.mysql.com). A szoftver tartalmaz egy kiszolgáló programot és jó néhány kliens programot is. A kiszolgáló az adatait egyedi szervezésű fizikai állományokban tárolja, és csak rajta keresztül lehet elérni.

Az OOK webalkalmazás a MySQL adatbázisszervert használja. Ezért tehát telepí tenünk kell, el kell indí tanunk, és illesztenünk kell hozzá az webalkalmazást.

Persze csak akkor kell telepí tenünk a szervert, ha ezt eddig még nem tettük meg. Hogyan tudunk meggyő ző dni arró l, hogy a MySQL adatbázis szerver jelen van-e a gépünkö n, netán éppen fut-e? Windowsban például így:

Megnézhetjük, hogy telepí tve van-e a gépünkre: Vezé rlő pult/Programok telepíté se é s tö rlé se. Ha kö zte van a MySQL, akkor ez az adatbázisszerver telepí tve van a gépünkö n. Hogy fut-e, azt a Windows Feladatkezelő ben lehet megállapí tani. Az is lehet, hogy a szerverprogram a

Page 32: JSP jegyzet-2005-12-20

2. Javás webalkalmazások futtatása

32

rendszer szolgáltatása: nézze meg, szerepel-e a Vezé rlő pult/Felü gyeleti eszkö zö k/Szolgáltatá-sok listában. A szolgáltatások listájában látható a szolgáltatás neve, leí rása, állapota (el van-e indí tva), indí tási típusa (a számí tó gép indí tásával automatikusan elindul-e), valamint a beje-lentkezés típusa:

Ha nincs telepí tve a MySQL adatbázis-szerver, akkor telepí tsük! Ha csak nincs elindí tva, indí tsuk el! Végezze el a kö vetkező lépéseket:

(1) A MySQL adatbá zis-szerver letöltése és telepítése

A MySQL letö ltési lapja: http://dev.mysql.com/downloadsmysql Innen tö ltse le a MySQL adatbázisszervert. Keresse meg a megfelelő platformot!

2005-ben a 4.1-es verzió Windows platformra itt volt: http://dev.mysql.com/downloads/mysql/4.1.html A Windows downloads részben van egy telepí tést nem igénylő változat (Without installer); az egyszerűség kedvéért most telepí tsük ezt! Az állomány neve: mysql-noinstall-4.1.15-win32.zip, mérete 41 MB. Csomagolja ki az állományt a c:/mysql kö nyvtárba!

A MySQL szerver alapértelmezett beállí tásai a c:/mysql/my.ini állományban vannak: Kapu: 3306; adminisztrátor neve: "root"; jelszava: "".

(2) Az adatbá zis szerver elindítá sa

Nyisson egy parancssori (shell) ablakot, és tegye aktuálissá a c:/mysql/bin mappát! Indí tsa el a MySQL szervert, más néven MySQL démont (mysqld = mysql démon): mysqld --console

Az ablakot leteheti a tálcára, de ne csukja be, mert akkor megszakad a szerver futása.

(2) A szerver ellenőrzése a mysqlshow klienssel

Ez az egyszerű kliens program mindö ssze annyit tesz, hogy teszteli a szerver futását, és „bizonyí tékul” felsorolja a szerver fennható sága alatti adatbázisokat. Nyisson egy kon-zolos ablakot, kapcsoljon le a c:/mysql/bin kö nyvtárba, és gépelje be, hogy mysqlshow! Ezzel a kliens program le is futott. Ahogy a képen látható , a MySQL telepí tése után a szerver két adatbázist „kezel”:

Page 33: JSP jegyzet-2005-12-20

2. Javás webalkalmazások futtatása

33

(3) SQL parancsok végrehajtá sa a mysql klienssel

Nyissunk meg egy új konzolos ablakot, és váltsunk le a c:/mysql/bin mappába! Indí tsuk el a mysql klienst root jogokkal: mysql -u root -p A felhasználó (user) neve root, jelszava (password) pedig semmi. A kliens kéri a jelszó t a szerverhez, mert azt hiszi, elfelejtettük beí rni. Ü ssük le az Enter-t, hiszen alapértelme-zésben a root-nak nincs jelszava. Megjelenik a mysql prompt (mysql>), és ez a prompt addig itt marad, amíg ki nem lépünk a kliensbő l:

A mysql kliens programbó l SQL parancsokat adhatunk a szervernek. Pró baként néz-zünk át néhány parancsot! A parancsok végére pontosvessző t kell tenni!

Parancs Leírá s create database <database>; Adatbázis létrehozása drop database <database>; Adatbázis tö rlése show databases; Az adatbázisok listázása use <database>; Adatbázis használata show tables; Táblák listázása source <szkript>.sql; Szkript futtatása exit; Kliens leállí tása

Például az ook adatbázis létrehozása: mysql> create database ook;

(4) Az OOK adatbá zis létrehozá sa az ook.sql szkriptá llomá ny futtatá sá val

A mysql kliens source parancsa lefuttat egy SQL szkriptállományt, benne SQL parancsokkal. A szkript egy szö veges állomány, kiterjesztése sql. Hozzon létre egy c:/mysql/myscripts mappát, és tegye bele az OOK SDPben található ook.sql szkript állományt (ne tegye a szkriptfájlt a mysql bin kö nyvtárába, mert nem való oda)! Ebben az esetben a szkriptet így kell futtatni: mysql> source ..\myscripts\ook.sql;

Page 34: JSP jegyzet-2005-12-20

2. Javás webalkalmazások futtatása

34

A szerver végrehajtja sorban a szkript állomány sorait (hibákkal vagy anélkül). Ez a szkriptállomány létrehoz egy ook nevű adatbázist, abban létrehozza az ö sszes táblát. A táblákba beszúr néhány alapadatot, mint például az adminisztrátor adatait.

Ellenő rizzük, mi tö rtént! Elő szö r listázzuk ki az adatbázisokat (már kö zte van az ook!), majd válasszuk ki az ook adatbázist használatra:

Listázzuk ki az ook tábláit, végül szálljunk ki a kliensbő l az exit paranccsal:

Fut tehát a MySQL adatbázis-szerver, és abban létrejö tt az OOK adatbázisa az alapadatokkal. Becsukhatjuk az adatbázis-szerverre kapcsoló dó ö sszes kliens programot, csak a szervert „hagyjuk futni”.

Az OKK webalkalmazá s telepítése

Mindö ssze annyit kell tennünk, hogy az alkalmazás WAR (Web ARchive) kiterjesztésű állományát bemásoljuk a %TOMCAT_HOME%/webapps kö nyvtárba. A (futó !) webszerver automatikusan kicsomagolja az állományt, ezután a WAR állomány akár tö rö lhető is.

Az alkalmazá s konfigurá lá sa

Szükség lehet a WEB-INF/db_config.properties konfiguráció s állomány mó dosí tására. Ha az adatbázis-szerver egy távoli gépen fut, akkor a localhost-ot le kell cserélni a gép IP címére:

driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost/ook username=ook password=ook validationQuery=SELECT * FROM Szemely

Page 35: JSP jegyzet-2005-12-20

2. Javás webalkalmazások futtatása

35

A levelezéshez a WEB-INF/mail_config.properties konfiguráció s állományban meg kell adni két IP címet. Az első annak a számí tó gépnek az IP címe, amelyik a levelek kiküldését végzi (outgoing messages). A számí tó gép IP címét megtudhatja a levelező kliens (például Mozilla, MS Outlook stb.) beállí tásaibó l. Az ott talált domén nevet pingelje meg. Egy beállí tás például:

mail.smtp.host=195.70.36.168 A másik sor a webkiszolgáló t futtató számí tó gép IP címe. Például:

mail.smtp.localhost=195.70.36.168

Az OKK webalkalmazá s indítá sa

Indí tsuk el a bö ngésző nket, és í rjuk be a címsorba: http://localhost:8080/OOK

Az OOK-t nagy betűvel kell í rni! A bö ngésző a 8080-as porton a Tomcat webszervert találja, így automatikusan a webapps kö nyvtár OOK alkö nyvtárának index.jsp állományát fogja el-kérni tő le. Megjelenik a fő JSP lap:

Futtassa a webalkalmazást! Az adminisztrátor emailje "[email protected]", jelszava "admin".

2.8. Tesztkérdések

1. Mely állí tások igazak? Jelö lje be az ö sszes jó választ!

a) Találjon ki kérdéseket, aztán válaszoljon rájuk :-)

2.9. Feladatok

1. Tö ltse le, telepí tse, futtassa és tanulmányozza az Abakusz szoftverfejlesztő verseny [1] JSP-ben í rt pályaműveit! Ilyen például Molnár László 2005-ö s pályaműve, a Webcontacts (azonosí tó : Aba54)!

Page 36: JSP jegyzet-2005-12-20

3. A JSP lap elemei

36

3. A JSP lap elemei

Az eddigiekben rengeteg programot futtattunk. Ebben a fejezetben most mi magunk hozunk létre egy JSP mintaprogramot, amit mindjárt ki is „vesézünk”. A fejezet mintaprogramja a melléklet mintaprogramok nevű mappájában van. A tanulás folyamataként azonban végezze el Ö n is a megadott lépéseket, s a mellékletben levő kó dot csak ö sszehasonlí tásra használja! Első lépésként hozzon létre a webapps kö nyvtárban egy sajat (vagy valami más) nevű kö nyv-tárat: ebbe kerülhet majd bele az Ö n által í rt ö sszes JSP program. A szerkesztéshez egyelő re használjon egy egyszerű, karakteres szö vegszerkesztő t, például a NotePad-et!

3.1. Mintaprogram

Feladat

Ha beírjuk a bö ngésző nkbe a http://localhost:8080/mintaprogramok/fej03/minta.jsp, akkor jelenjen meg az á brá n lá tható lap. A lap címe "Minta" legyen, fejléce: "Minta a JSP lap elemeire". Aztá n jelenjenek meg a kö vetkező dolgok:

− a futá s dá tuma (mai dá tum) ÉÉÉÉ . hónap NN. alakban;

− a futá s éve, és a lá togató k szá ma a JSP lap létrehozá sa ó ta. A lap újbó li elkérésekor ez a szá m nö vekedjen eggyel egészen addig, amíg a lapot újra nem fordítjuk!

− ezutá n jelenjen meg egy szö veg attó l fü ggő en, hogy a lá togató k szá ma 5-nél kevesebb vagy tö bb. A szö veg végén legyen egy kis képecske, majd egy vízszintes vonal;

− jelenítsü k meg egy "Szemely" objektum (bab) "nev" tulajdonsá gá t, vá ltoztassuk meg, majd ismét jelenítsü k meg!

A kö vetkező ben megadjuk a feladatot megvaló sí tó JSP lapot, utána a kó dot részenként elemezzük, végül külö n szó lesz az egyes JSP elemekrő l. A minta.jsp szö veges állomány a %TOMCAT_HOME%/mintaprogramok/fej03 mappában van.

Page 37: JSP jegyzet-2005-12-20

3. A JSP lap elemei

37

minta.jsp <!-- Mintaprogram. De nem azért minta, mert szép a kód, hanem azért, mert megtalálható benne mindenféle JSP elem. --> <%@ page contentType="text/html; charset=iso-8859-2" %> <%@ page import="java.util.*, java.text.*" %> <%! int kismeret() { return 30; } int latogatokSzama; %> <html> <head> <title>Minta</title> <head> <body style="background-color: rgb(255, 245, 255);"> <h1>Minta a JSP lap elemeire</h1> <font face="Arial">

Mai dátum: <% DateFormat df = DateFormat.getDateInstance(DateFormat.FULL, Locale.getDefault()); out.println(df.format(new Date())); %> <br> <%= new GregorianCalendar().get(Calendar.YEAR) %>-ben te vagy a <%= ++latogatokSzama%> . látogató. <br> <% if (latogatokSzama<=5) out.println("Nem vagytok elegen."); else out.println("Jól van. Sokan vagytok."); %> <img src="smile30.gif" width=<%=kismeret()%> > <br> <hr size=5 color=#4400CC> <jsp:useBean id="szemely" class="fej03.SzemelyBean" /> Az utolsó látogató neve névváltoztatás előtt: <jsp:getProperty name="szemely" property="nev" /><br> <jsp:setProperty name="szemely" property="nev" value="Paprika János" /> Az utolsó látogató névváltoztatás után: <jsp:getProperty name="szemely" property="nev" /><br> <br> </font> </body> </html>

Page 38: JSP jegyzet-2005-12-20

3. A JSP lap elemei

38

A kód elemzése

A lap egy JSP megjegyzéssel kezdő dik, melyet a fordí tó figyelmen kívül hagy: <!-- Mintaprogram. De nem azért minta, mert szép a kód, hanem azért, mert megtalálható benne mindenféle JSP elem. -->

A <%@ és %> kö zö tti részek fordí tási direktívák, azok a JSP fordí tó nak szó lnak. A page direktíva erre a lapra vonatkozó eligazí tást ad a fordí tó nak. A contentType megadja, hogy a lap milyen típusú választ generál, és milyen karakterkészletet használ. Az import ugyanazt jelenti, mint bármely más Java fordí tási egység esetén: megadja a lap (osztály) által haszná-landó kö nyvtárak osztályait:

<%@ page contentType="text/html; charset=iso-8859-2" %> <%@ page import="java.util.*, java.text.*" %>

A kö vetkező rész deklaráció kat tartalmaz. Mint tudjuk, a JSP lapbó l egy szervlet osztály lesz, aminek lehetnek adatai és metó dusai – akár osztály akár példány szinten. Ilyen adatok és metó dusok adható k meg <%! és %> kö zö tt. A lapon elvileg bárhol szerepelhet ilyen deklaráció s rész, de vegyük figyelembe, hogy a JSP lapra „nem illik” sok kó dot tenni. A programban egy kismeret nevű függvényt és egy int változó t deklarálunk:

<%! int kismeret() { return 30; } int latogatokSzama; %>

A kö vetkező rész „tiszta” HTML kó d, vagyis sablonszö veg: <html> <head> <title>Minta</title> <head> <body style="background-color: rgb(255, 245, 255);"> <h1>Minta a JSP lap elemeire</h1> <font face="Arial"> Mai dátum:

A <% és %> kö zö tti rész JSP szkript. Ez a kó d az átalakí tott szervletben a service metó dus része lesz: a szkript elő tti sablonszö veget a szervlet e kó d elő tt í rja ki a HTML lapra, a szkript utáni sablonszö veget pedig e kó d után. Vigyázat! A szkriptletekkel csínján kell bánni: a programozási logikának a lap „mö gö tt” van a helye!

A mintaprogram szkriptje tö rténetesen magyar formára hozza az aktuális dátumot (feltéve, hogy az alapértelmezett nemzeti beállí tás a gépen magyar):

<% DateFormat df = DateFormat.getDateInstance(DateFormat.FULL, Locale.getDefault()); out.println(df.format(new Date())); %>

Page 39: JSP jegyzet-2005-12-20

3. A JSP lap elemei

39

Megint egy pici sablonszö veg jö n: <br>

A <%= és %> kö zö tt egy kifejezés van, melynek a karakterlánc formája kerül a lapra. A kö vetkező három sorban két kifejezés van, és a <br> sablonszö veg:

<%= new GregorianCalendar().get(Calendar.YEAR) %>-ben te vagy a <%= ++latogatokSzama%> . látogató. <br>

A kö vetkező szkript a látogató k számátó l függő en teszi a lapra a megfelelő szö veget: <% if (latogatokSzama<=5) out.println("Nem vagytok elegen."); else out.println("Jól van. Sokan vagytok."); %>

Sablonszö veg, benne az animált képecske: <img src="smile30.gif" width=<%=kismeret()%> > <br> <hr size=5 color=#4400CC>

A <jsp és a /> egy egysoros, szabványos JSP akció elemet fognak kö zre (van tö bbsoros akció elem is, azt majd másképp zárjuk le). A useBean akció elem egy class osztályú objektumot deklarál (és ha még nincs ilyen objektum, akkor azt létre is hozza) id néven. Az megadott osztálynak az alkalmazás WEB-INF kö nyvtárában, vagy az importált csomagokban kell lennie. Az objektum ún. bab (bean) kell hogy legyen, ami azt jelenti, hogy osztályának meg kell felelnie bizonyos kó dolási szabályoknak (lásd késő bb):

<jsp:useBean id="szemely" class="fej03.SzemelyBean" />

Most egy sor sablonszö veg jö n, majd megint egy egysoros JSP akció elem. A getProperty akció a useBean-nel deklarált, name nevű objektumbó l (babbó l) kivesz egy jellemző t (property-t), ebben az besetben a nev nevűt, és azt megjelení ti a lapon:

Az utolsó látogató neve névváltoztatás előtt: <jsp:getProperty name="szemely" property="nev" /><br>

A kö vetkető , setProperty akció beállí tja a "szemely" nevű bab "nev" jellemző jét "Paprika János"-ra:

<jsp:setProperty name="szemely" property="nev" value="Paprika János" /> Az utolsó látogató névváltoztatás után: <jsp:getProperty name="szemely" property="nev" /><br> <br> </font> </body> </html>

Page 40: JSP jegyzet-2005-12-20

3. A JSP lap elemei

40

3.2. A JSP lap elemei

A JSP lap sablon szö vegbő l, szervernek szó ló megjegyzésekbő l és JSP elemekbő l áll. Három féle JSP elem van: − direktíva − szkript − akció

A JSP fordí tó számára minden sablonszö veg, ami nem JSP elem vagy megjegyzés.

3.3. Megjegyzések

A JSP lapra megjegyzések tehető k a <!-- és --> karaktersorozatok kö zt. A JSP lapon természetesen normál HTML megjegyzések is elhelyezhető k, ezeket a megjegyzéseket azonban a szerver elküldi a felhasználó nak. A JSP megjegyzések a szerver oldalon maradnak, hiszen azt már a JSP fordí tó „kiszűri”.

3.4. Direktívá k

A fordí tási direktívák a JSP fordí tó nak szó ló utasí tások; olyanok, amelyek a lap állandó jellemző it/információ it í rják le, vagyis lefordí tás után nem változnak. A fordí tási direktíva megmondja a fordí tó nak, hogy mit csináljon a lap tö bbi részével. A fordí tási direktívát a <%@ karakterek vezetik be, és a %> karakterek zárják le. Három fordí tási direktíva van: az include, a page és a taglib. Szintaktikája:

<%@ direktíva attribútum1="<érték1>" attribútum2="<érték2>" ... %>

A JSP lapon akárhány direktíva megadható . A fordí tási direktívák leí rása a függelékben megtalálható .

include

Az include direktívával megadott szö veges állomány tartalma egyszerűen bemásoló dik a direktíva helyére. A direktívának egyetlen attribútuma van: file, értéke a betö ltendő szö veges állomány specifikáció ja. Egy lap akárhány helyen bő ví thető az include direktívával. A bő ví t-mény a JSP fordí tási egység része. Akkor szokás használni, ha ugyanazt (a bemásolandó ) kó drészletet tö bb lapon is használjuk.

Például: <%@ include file="ellenorzes.jsp"%> <%@ include file="tablazat.html"%>

A mintaprogramban nincs include direktíva.

page

Megadja a lap (osztály) jellemző it. Néhány fontosabb attribútuma:

Page 41: JSP jegyzet-2005-12-20

3. A JSP lap elemei

41

− contentType: A lap által generált válaszlap MIME (Multipurpose Internet Mail Extensions) típusa. A kiterjesztésbő l a bö ngésző tudni fogja, miképp jelení tse meg a kapott lapot. Megadható még a válaszlap karakterkészlete (charset) is. Például: <%@ page contentType="text/html; charset=iso-8859-2" %>

− import: A Java fordí tási egységekben megszokott mó don, ez az attribútum Java osztályokat és interfészeket importál. Ha az utolsó helyen * áll, akkor a csomag ö sszes osztálya és interfésze importálásra kerül. A továbbiakban az importált osztályokat és interfészeket a lapon nem kell minő sí teni. Például: <%@ page import="java.util.*" %> <%@ page import="java.util.*, java.text.*" %>

− language: A lapon használt szkrip nyelv. Például java, jscript stb. A Tomcat csak a javát ismeri. Például: <%@ page language="java" contentType="text/html" %>

taglib

Ezzel a direktívával a lapon használt egyedi akció k tag függvénytárait adhatjuk meg. A JSP szabványos akció in túl ugyanis olyan akció k is használható k, amelyeket a programozó í r meg. Kö telező attribútumok: − uri: Az alkalmazás telepí tésleí ró jában (web.xml) megadott tag függvénytár neve, vagy a

függvénytárnak a laphoz/kö rnyezethez viszonyí tott elérési útja. − prefix: Az akció elem nevének bevezető betűi.

Például az OOK-ban: <%@ taglib uri="/ooktaglib" prefix="ook" %>

Az egyedi akció kat késő bb tárgyaljuk.

3.5. Szkriptek

A szkriptek programkó d betétek. A szkript lehet − deklaráció , − kifejezés, vagy − szkriptlet.

A JSP lapot gondolatban alakí tsuk egy szervlet osztállyá (a JSP fordí tó ezt meg is teszi; a generált szervlet osztályt a 3.9. pontban bemutatjuk). A deklaráció k az osztály normál dekla-ráció i, vagyis a service metó dussal vannak egy szinten. A kifejezések és a szkriptletek a service metó dusba beépülő kó d darabkák. Ahol a JSP lapon sablonszö veg van, ott a szervletben egy out.println metó dus (ez í rja ki a sablonszö veget a válaszlapra). A kifejezés egy String típusú értéket reprezentál az adott helyen.

Minimalizá ljuk a JSP lap szkriptjeit! A JSP lap csak egy felhasználó i nézet (view), a programozási logikának egy alsó bb rétegben van a helye! A JSP lap alatti alkalmazási logikát első sorban akció kkal kell elérni.

Page 42: JSP jegyzet-2005-12-20

3. A JSP lap elemei

42

Deklará ciók

Deklaráció kat a <%! és %> jelsorozatok kö zö tt helyezhetünk el. JSP deklaráció val lapszintű (osztály szintű) adatokat, illetve metó dusokat lehet megadni. A deklaráció lehet osztálydekla-ráció (static) vagy példánydeklaráció . A JSP deklaráció k a lap bármely részén felhasználható k ugyanúgy, mint ahogy a szervlet osztályban bármely más példány és osztálydeklaráció felhasználható a service metó dusbó l. A deklaráció s részben felülí rhatunk ő s metó dusokat is, mint például a jspInit vagy a jspDestroy metó dusokat.

Egy deklaráció s részben tetsző leges számú deklaráció elhelyezhető , és a JSP lapon tetsző leges számú ilyen deklaráció s rész szerepelhet. Ajá nlatos azonban a deklará ció s részeket egyben, a lap elején elhelyezni, mert külö nben a lap áttekinthetetlenné válik.

JSP deklaráció k például: <%! int kismeret() { return 30; } int latogatokSzama; %>

Kifejezések

A JSP lapon a <%= és a %> karaktersorozatok kö zö tt bárhol elhelyezhető kifejezés. A kakartersorozatok kö zö tt egy normál Java kifejezés áll, melynek karakterlánccá alakí tott értéke egyszerűen beszúrásra kerül a JSP lapon.

JSP kifejezések például: <%= new GregorianCalendar().get(Calendar.YEAR) %> <%= ++latogatokSzama%>

Szkriptletek

A szkriptlet olyan Java kó d darabka, melyet a service metó dus hív meg a lap elkészí tésekor. A szkriptlet bármilyen normál Java kó dot tartalmazhat. A szkriptlet használhatja a lap deklaráció it, valamint a lap elő redefiniált változó it (lásd késő bb). A szkriptletet a <% és %> karaktersorozatok kö zö tt kell elhelyezni.

JSP szkriptlet például: <% if (latogatokSzama<=5) out.println("Nem vagytok elegen."); else out.println("Jól van. Sokan vagytok."); %>