p°φstup∙ od 12.7.2000
VysokΘ uΦenφ technickΘ v Brn∞
Fakulta elektrotechniky a informatiky
┌stav automatizace a m∞°icφ techniky
èkolnφ rok 1999/2000
ZAD┴N═ DIPLOMOV╔ PR┴CE
pro posluchaΦe jmΘnem
Niedoba Pavel
studijnφ obor Kybernetika, automatizace a m∞°enφ
Vedoucφ ·stavu a p°edseda oborovΘ rady Vßm urΦujφ tuto diplomovou prßci:
Nßzev tΘmatu: InformaΦnφ systΘm na Internetu
Zadßnφ a zßsady pro vypracovßnφ:
Seznamte se s problematikou budovßnφ informaΦnφch systΘm∙ v prost°edφ Internetu s vyu₧itφm dostupn²ch mo₧nostφ WWW prohlφ₧eΦ∙, protokolu http a Java .
Seznamte se s v²vojov²m prost°edφm Magic verze 8.20 .
Navrhn∞te a zrealizujte InformaΦnφ systΘm na bßzi relaΦnφho datovΘho prost°edφ Magic. InformaΦnφ systΘm realizujte pro platformu Windows NT a systΘm °φzenφ bßze dat Btrieve.
SystΘm navrhn∞te tak, aby umo₧≥oval prost°ednictvφm Internetu vypl≥ovat zkuÜebnφ zprßvy oprßvn∞n²mi zam∞stnanci fakulty. Administrßtorskou Φßst systΘmu navrhn∞te v provedenφ Client/Server nebo Desktop Deployment dle svΘho uvß₧enφ.
Ov∞°te Φinnost systΘmu na databßzi pro zajiÜt∞nφ v²uky na ·stavu UAMT.
Rozsah a struktura diplomovΘ prßce:
Vlastnφ diplomovß prßce musφ obsahovat formulaci cφle, charakteristiku souΦasnΘho stavu, teoretickß a odbornß v²chodiska °eÜen²ch problΘm∙.
Student odevzdß vytiÜt∞nou ·plnou technickou zprßvu, zdrojov² tvar ·plnΘ technickΘ zprßvy v elektronickΘ podob∞ a p°φpadnou ·plnou programovou dokumentaci a zdrojovΘ texty program∙ v elektronickΘ podob∞.
Informace v elektronickΘ podob∞ budou ulo₧eny na standardnφm pam∞¥ovΘm mΘdiu (disketa, CD-ROM), ve formßtu ΦitelnΘm v b∞₧nΘm pracovnφm prost°edφ pou₧φvanΘm na ┌AMT.
Seznam odbornΘ literatury:
Podle vlastnφho literßrnφho pr∙zkumu a pokyn∙ vedoucφho DP.
P r o h l ß Ü e n φ
ProhlaÜuji, ₧e jsem p°edlo₧enou diplomovou prßci zpracoval sßm s konzultaΦnφ pomocφ vedoucφho projektu a uveden²ch konzultant∙. Pou₧itΘ literßrnφ prameny jsou uvedeny v literßrnφch odkazech.
V Brn∞ dne : Podpis:
Obsah*
1. Problematika informaΦnφch systΘm∙ v prost°edφ internetu*
1.1 Po₧adavky na internetov² informaΦnφ systΘm*
1.1.1 Filosofie informaΦnφho systΘmu na Internetu*
1.1.2 ObecnΘ po₧adavky*
1.1.3 Dostupnost*
1.1.4 BezpeΦnost*
1.2 Protokoly Rodiny TCP/IP, HTTP a jazyk HTML*
1.2.1 TCP/IP Protocol Suite(rodina protokol∙ TCP/IP)*
1.2.2 IP, Internet Protocol*
1.2.3 TCP, Transmission Control Protocol*
1.2.4 UDP, User Datagram Protocol*
1.2.5 HTTP, Hypertext Transfer Protocol*
1.2.6 HTML, Hypertext Markup Language*
1.3 P°edßvßnφ parametr∙ mezi klientem a serverem*
1.4 Strana serveru*
1.4.1 Profesional Home Page - PHP 3.0*
1.4.2 Active Server Pages - ASP*
1.4.3 HTML strßnky v Magicu*
1.5 Strana klienta*
1.5.1 Provediteln² obsah na stran∞ klienta*
1.5.2 Internetov² prohlφ₧eΦ a provediteln² obsah*
1.5.3 JavaScript*
1.5.4 VisualBasic script*
1.5.5 Komponenty ActiveX*
1.5.6 Java na stran∞ klienta*
1.6 Mo₧nosti jazyka Java v prost°edφ Internetu*
1.6.1 Vlastnosti jazyka*
1.6.2 Java Platforma*
1.6.3 Nedostatky Javy*
2. Magic*
3. InformaΦnφ systΘm*
3.1 Anal²za*
3.1.1 RelaΦnφ datov² model a p°φstupovß prßva*
3.1.2 Pravidla vypl²vajφcφ z p°φstupov²ch prßv*
3.2 Realizace*
3.2.1 Obsluha aplikace*
3.2.2 Popis programßtorskΘho °eÜenφ*
3.2.3 ProgramßtorskΘ "triky" pou₧itΘ v aplikaci*
3.2.3.1 Vlo₧enφ javascriptu do generovanΘ HTML strßnky*
3.2.3.2 Vlo₧enφ vlastnφho HTML k≤du do generovanΘ strßnky*
3.2.3.3 Vlo₧enφ ovladaΦe onLoad do sekce <BODY ...>*
3.2.3.4 Nastavenφ parametr∙ odesφlan²ch Magicu*
3.2.3.5 DynamickΘ zakßzßnφ a zp°φstupn∞nφ vstupnφho pole*
3.2.3.6 Klientsk² Java applet komunikujφcφ s Magicem*
3.2.4 Mφra zabezpeΦenφ*
4. Zßv∞r*
Internetov²m informaΦnφm systΘmem rozumφme systΘm, kter² je p°φstupn² zcela nebo jenom zΦßsti na poΦφtaΦφch p°ipojen²ch do sφt∞ Internet. To umo₧≥uje vyu₧itφ systΘmu Üirokou ve°ejnostφ ve sv∞t∞ bez hranic, kde vzdßlenosti nehrajφ roli. AΦkoli by se mohlo zdßt, ₧e s Internetem je vÜe jednoduÜÜφ, o tvorb∞ informaΦnφho systΘmu to neplatφ. Internet prochßzφ velmi intenzφvnφm v²vojem a pravidla hry se m∞nφ ze dne na den. Jazyk HTML dnes ji₧ zdaleka nenφ tφm, Φφm b²val v dob∞ svΘho vzniku. TΘm∞° denn∞ se objevujφ novΘ standardy vyvinutΘ spolky firem znßm²ch jmen. Pokud chceme vytvo°it internetov² informaΦnφ systΘm, je t°eba mφt nejprve alespo≥ hrub² p°ehled o pou₧φvan²ch protokolech, jazycφch, prohlφ₧eΦφch a serverech.
Nejb∞₧n∞jÜφ realizace internetovΘho informaΦnφho systΘmu, spoΦφvß v pou₧itφ internetovΘho prohlφ₧eΦe (Internet browser) na stran∞ klienta a jazyk∙ HTML, DHTML a javascript. Tato koncepce p°edpoklßdß, ₧e veÜkerou komunikaci vyvolßvß klient. Server pouze odpovφdß na po₧adavky klienta. Neexistuje zp∙sob jak vnutit klientovi informace ze serveru v p°φpad∞, ₧e si o n∞ sßm nepo₧ßdal.
DalÜφ vlastnostφ protokolu HTTP je ₧e p°edpoklßdß tzv. bezestavovost serveru. Odpov∞∩ serveru na po₧adavek klienta nenφ a ani nem∙₧e b²t svßzßna s p°edchozφm po₧adavkem klienta, proto₧e protokol HTTP nezaruΦuje, ₧e data budou skuteΦn∞ dodßna na mφsto urΦenφ. Aplikace b∞₧φcφ na serveru v∞tÜinou ani nemß mo₧nost zjistit komu je odpov∞∩ na po₧adavek odesφlßna (IP adresu, Φφslo portu). Jsou dokonce p°φpady kdy to nenφ v∙bec mo₧nΘ. StaΦφ aby klient sed∞l za firewallem, pou₧φval proxy server nebo cache server a je zcela nemo₧nΘ pro WWW server aby urΦil adresu klienta. Toto je hlavnφ d∙vod, proΦ nelze pou₧φt transakΦnφ zp∙sob komunikace mezi serverem a klientem. VÜechny informace o stavu provßd∞nΘ operace musφ b²t neustßle ulo₧eny na stran∞ klienta, a b²t znovu posφlßny serveru. Nap°φklad, pokud chceme pou₧φvat systΘm s rozliÜenφm u₧ivatele, musφme jmΘno u₧ivatele, nebo jeho k≤d posφlat s ka₧d²m po₧adavkem klienta na server. Zp∙sobuje to potφ₧e p°i nßvrhu aplikace a zvyÜuje objem p°enßÜen²ch dat. Tento postup mß vÜak takΘ velkΘ v²hody v kompatibilit∞ s v∞tÜinou prohlφ₧eΦ∙ a takΘ v jednoduchosti zßkladnφ myÜlenky.
V dalÜφch odstavcφch se pokusφm provΘst anal²zu souΦasnΘho stavu a uvedu r∙znΘ mo₧nosti realizace vΦetn∞ zhodnocenφ argument∙ pro a proti.
Internetov²m informaΦnφm systΘmem se rozumφ, alespo≥ ve smyslu v jakΘm je chßpßn v tΘto diplomovΘ prßci, soubor program∙ a nßstroj∙ umo₧≥ujφcφ oprßvn∞n²m osobßm manipulaci s daty (p°idßvßnφ, zm∞nu, t°φd∞nφ, v²b∞ry, tisk a pod.), kterß jsou ulo₧ena na mφst∞ a formßtech, kterΘ nejsou pro u₧ivatele d∙le₧itΘ, ale jsou p°φstupnß pomocφ poΦφtaΦe p°ipojenΘho do sφt∞ Internet. Z toho plyne n∞kolik zßkladnφch po₧adavk∙ na tento systΘm. V platnosti z∙stßvajφ stejnΘ po₧adavky, kterΘ se vztahujφ ke konvenΦnφm informaΦnφm systΘm∙m jako jsou spolehlivost, rychlost, realizovatelnost. P°ib²vajφ zde dalÜφ po₧adavky, vypl²vajφcφ z pou₧itφ ve°ejnΘ sφt∞. Jednß se hlavn∞ o bezpeΦnost a dostupnost (p°enositelnost mezi r∙zn²mi operaΦnφmi systΘmy a hardwarov²mi platformami).
Dostupnostφ se rozumφ mφt mo₧nost pou₧φvat internetovou aplikaci, pomocφ kterΘhokoli poΦφtaΦe p°ipojenΘho do Internetu, pokud nenφ stanoveno omezenφ na urΦitΘ podsφt∞. Vzhledem k samotnΘ filosofii Internetu, je zde snaha tento problΘm °eÜit ji₧ od jeho vzniku. Sφ¥ je zbudovßna na pou₧itφ univerzßlnφho protokolu TCP/IP. Tento protokol vyu₧φvajφ inernetovΘ slu₧by jako jsou WWW, FTP, POP3 a pod. Prßv∞ dφky t∞mto slu₧bßm m∙₧e b²t internetovß WWW aplikace zcela nezßvislß na hardwarovΘ platform∞ Φi operaΦnφm systΘmu klienta.
Podstatn∞ v∞tÜφ problΘm je bezpeΦnost databßzovΘ aplikace p°ed neoprßvn∞n²m p°φstupem. Je pot°eba chrßnit p°enesenß data b∞hem jejich celΘ cesty ve°ejnou sφtφ. AΦkoliv se to nemusφ zdßt pravd∞podobnΘ, nejvyÜÜφ napadnutelnost majφ data na lokßlnφ sφti klienta. Zde se toti₧ data dajφ velice snadno odposlouchßvat, a je velkß pravd∞podobnost, ₧e se prßv∞ na tΘto sφti vyskytujφ lidΘ, kte°φ majφ zßjem se do systΘmu prolomit, anebo alespo≥ odposlechnout, datov² tok, kter² Φasto obsahuje u₧ivatelskΘ jmΘno a heslo.
Proto vznikl pojem tzv. Secure transactions (bezpeΦnΘ transakce). Je to oznaΦenφ pro takov² druh on-line transakcφ, kterΘ krom∞ svΘ zßkladnφ charakteristiky (ned∞litelnosti) vykazujφ dalÜφ vlastnosti bezpeΦnostnφho charakteru: je u nich nap°φklad zajiÜt∞na privßtnost, integrita, autentikace apod.
Zatφm bylo provedeno vφce pokus∙ o implementaci bezpeΦn²ch transakcφ. V mΘm p°φpad∞ ale nepot°ebuji implementovat vlastnost ned∞litelnosti, problΘm se zjednoduÜuje na sestavenφ bezpeΦnΘho komunikaΦnφho kanßlu, odolnΘho proti odposlechu. Nejsch∙dn∞jÜφ cestou je implementace SSL (Secure Socket Layer) do komunikaΦnφho protokolu. VÜechny datovΘ p°enosy jsou pak Üifrovßny. Mechanismus SSL byl vyvinut² firmou Netscape, a je podporovan² v∞tÜinou v²znamn∞jÜφch prohlφ₧eΦ∙ (i mnoha WWW servery). ProblΘm tohoto °eÜenφ je ale v jeho malΘ "zabezpeΦovacφ sφle" û prvnφ verze SSL byla implementovßna tak neÜ¥astn∞, ₧e ji bylo mo₧nΘ prolomit na b∞₧nΘm PC ji₧ za 25 sekund. Nov∞jÜφ, opravenß verze SSL v prohlφ₧eΦφch Netscape vÜak nedßvno byla prolomena takΘ. DalÜφm problΘmem v sφle zabezpeΦenφ je na°φzenφ americkΘho soudu, kterΘ zakazuje vyvß₧et Üifrovacφ algoritmy s vysok²m stupn∞m utajenφ mimo zem∞ severnφ Ameriky. V Evrop∞ je proto k dispozici pouze verze protokolu SSL s dΘlkou klφΦe 40 bit∙, kter² se dß zlomit na stroji prov∞°ujφcφ 1 000 000 variant za sekundu b∞hem necel²ch 13 dnφ.
V²hodou tohoto °eÜenφ je jeho pohodlnost, tj. snadnß implementace. M∙₧eme napsat aplikaci zcela bez ohledu na bezpeΦnost utajenφ p°enßÜen²ch dat a pak pouze implementovat SSL na urΦenΘ adresß°e WWW serveru. Toto je umo₧n∞no zaΦlen∞nφm SSL jako dalÜφ vrstvy v sφ¥ovΘm modelu (Layer = vrstva). Je mo₧nΘ nastavit SSL ochranu na vÜechna p°enßÜenß data, ale je pot°eba si uv∞domit, ₧e Üifrovßnφ znamenß nemalou zßt∞₧ procesoru a na druhΘ stran∞ je zbyteΦnΘ Üifrovat nap°. p°enßÜenΘ obrßzky, kterΘ se podφlejφ vysok²m procentem na celkovΘm objemu p°enesen²ch dat. Proto je pot°eba s tφmto aspektem poΦφtat ji₧ p°i nßvrhu adresß°ovΘ struktury aplikace.
O TCP/IP se Φasto nesprßvn∞ mluvφ v jednotnΘm Φφsle, jako o "protokolu TCP/IP". Ve skuteΦnosti jde o celou soustavu (rodinu) jednotliv²ch protokol∙, kterΘ jsou spojeny spoleΦnou p°edstavou o tom, jak by m∞ly vypadat a jak by m∞ly fungovat. Tato p°edstava vznikla v sedmdesßt²ch letech v USA, pro pot°eby budovßnφ tehdy teprve se rodφcφho Internetu - ten je takΘ na protokolech TCP/IP vybudovßn. Neznamenß to ale, ₧e by protokoly TCP/IP byly v²hradnφ specialitou Internetu. Jde vlastn∞ o ucelenou "sφ¥ovou koncepci", kterß m∙₧e b²t s ·sp∞chem pou₧ita v jakΘkoli poΦφtaΦovΘ sφti, a to jak lokßlnφ, tak i rozlehlΘ. SouΦßstφ rodiny protokol∙ je dnes vφce ne₧ 100 r∙zn²ch konkrΘtnφch protokol∙, a dalÜφ neustßle vznikajφ. Krom∞ toho je s rodinou protokol∙ TCP/IP spojena i ucelenß p°edstava o tom, do jak²ch hierarchick²ch vrstev by m∞ly b²t rozd∞leny nejr∙zn∞jÜφ sφ¥ovΘ funkce- tedy tzv. sφ¥ov² model. Koncepce TCP/IP poΦφtß s existencφ Φty° takov²chto hierarchicky uspo°ßdan²ch vrstev: aplikaΦnφ vrstvou, transportnφ vrstvou, sφ¥ovou vrstvou, a vrstvou sφ¥ovΘho rozhranφ. Do nejvyÜÜφ (aplikaΦnφ) vrstvy p°itom zasahujφ jednotlivΘ aplikace - p°φsluÜn²m aplikaΦnφ protokol∙m se budeme v∞novat v dalÜφch dφlech. Nejni₧Üφ vrstvu (vrstvu sφ¥ovΘho rozhranφ) naproti tomu rodina protokol∙ TCP/IP v∙bec "nezabydluje" - p°edpoklßdß, ₧e zde budou pou₧ity fyzickΘ p°enosovΘ protokoly, vzniklΘ jinde, mimo TCP/IP (nap°φklad Ethernet, Token Ring, ATM apod.).
Pojmenovßnφ "TCP/IP" vzniklo spojenφm jmen dvou z°ejm∞ nejv²znamn∞jÜφch protokol∙ z celΘ rodiny, a to protokol∙ IP (Internet Protocol) a TCP (Transmission Control Protocol). Protokol IP je protokolem tzv. sφ¥ovΘ vrstvy (druhΘ odspodu, v rßmci Φty°vrstvovΘho modelu TCP/IP, resp. t°etφ, poΦφtßno v rßmci sedmivrstvΘho modelu ISO/OSI). Jeho ·kolem je p°esn∞ to, co je hlavnφm ·kolem sφ¥ovΘ vrstvy: dopravovat data a₧ na mφsto jejich urΦenφ, a to i p°es eventuelnφ mezilehlΘ ("p°estupnφ") uzly, neboli p°es tzv. sm∞rovaΦe. Aby to protokol IP dokßzal, musφ hledat vhodnΘ sm∞ry (cesty) v soustav∞ vzßjemn∞ propojen²ch sm∞rovaΦ∙, vedoucφ a₧ k po₧adovanΘmu cφli - neboli zajiÜ¥ovat to, Φemu se °φkß sm∞rovßnφ (routing). K tomu pak protokol IP pot°ebuje vhodnΘ informace o topologii celΘ sφt∞, na kterou se sna₧φ dφvat jako na soustavu dφlΦφch sφtφ, vzßjemn∞ propojen²ch prßv∞ prost°ednictvφm sm∞rovaΦ∙. Tato p°edstava odpovφdß tomu, Φemu se v angliΦtin∞ °φkß "internetwork", zkrßcen∞ "internet" (a co se na rozdφl od globßlnφho Internetu pφÜe s mal²m i) - prßv∞ tΘto p°edstav∞ obecnΘ soustavy vzßjemn∞ propojen²ch sφtφ pak protokol IP vd∞Φφ za prvnφ polovinu svΘho jmΘna. Krom∞ protokolu IP je ale sφ¥ovß vrstva TCP/IP "obydlena" jeÜt∞ mnoha dalÜφmi protokoly, kterΘ v∞tÜinou slou₧φ jako "podpora" pro protokol IP - zajiÜ¥ujφ nap°φklad oÜet°enφ nestandardnφch situacφ, starajφ se o Üφ°enφ informacφ pot°ebn²ch ke korektnφmu sm∞rovßnφ atd.
Protokol TCP se v rßmci hierarchickΘho vrstevnatΘho modelu nachßzφ v tzv. transportnφ vrstv∞, bezprost°edn∞ nad vrstvou sφ¥ovou, ve kterΘ sφdlφ protokol IP. V praxi to znamenß, ₧e protokol TCP je tzv. transportnφm protokolem, kter² sßm vyu₧φvß p°enosov²ch slu₧eb sφ¥ovΘho protokolu IP, kterΘ dßle obohacuje a zdokonaluje. Jednφm z takov²chto "obohacenφ" je i zv²Üenφ p°enosovΘ spolehlivosti: protokol IP je tzv. nespolehliv², v tom smyslu ₧e kdy₧ zjistφ ₧e se n∞co p°i p°enosu poÜkodilo, nepova₧uje za svou povinnost postarat se o nßpravu (a poÜkozenß data jednoduÜe zahodφ a pokraΦuje dßl). Transportnφ protokol TCP se ji₧ chovß jinak - p°φpadnΘ chyby se sna₧φ napravit sßm, a to podniknutφm pot°ebn²ch nßpravn²ch akcφ (vy₧ßdß si nov² p°enos dat, kterΘ se poÜkodily). Jinou odliÜnostφ protokolu TCP od protokolu IP je to, s jak²mi adresami tyto protokoly pracujφ. Protokol IP pracuje s tzv. IP adresami (viz p°edminule), kterΘ identifikujφ ka₧d² sφ¥ov² uzel jako celek - protokol IP tedy "vidφ" jen celΘ jednotlivΘ uzly, a nesna₧φ se o jakΘkoli jemn∞jÜφ rozliÜenφ. To d∞lß a₧ protokol TCP, kter² uva₧uje r∙znΘ p°φjemce Φi odesilatele v rßmci jednotliv²ch uzl∙ (nap°φklad r∙znΘ aplikace a systΘmovΘ programy, Φi skuteΦnΘ "fyzickΘ" u₧ivatele apod.), a identifikuje je pomocφ tzv. Φφsel port∙. SouΦßstφ celΘ ucelenΘ "sφ¥ovΘ koncepce", kterou rodina protokol∙ TCP/IP p°edstavuje, je i konvence o tzv. dob°e znßm²ch Φφslech port∙ - nap°φklad to, ₧e WWW server je standardn∞ adresovßn Φφslem 80 (resp. "sedφ" na portu Φφslo 80).
Protokol TCP nenφ jedin²m transportnφm protokolem z rodiny TCP/IP, neboli jedin²m "obyvatelem" transportnφ vrstvy. Vedle n∞j existuje jeÜt∞ jeden v²znamn² transportnφ protokol, kter²m je protokol UDP. Jeho odliÜnostφ od protokolu TCP je p°edevÜφm zp∙sob, jak²m dßle "rozvφjφ a obohacuje" p°enosovΘ funkce protokolu IP - protokol UDP je v zßsad∞ nijak kvalitativn∞ nem∞nφ. Nesna₧φ se nap°φklad zavßd∞t spolehlivost, a jeho slu₧by jsou proto stejn∞ nespolehlivΘ jako p°enosovΘ slu₧by samotnΘho protokolu IP (samoz°ejm∞ ne v tom smyslu, ₧e by tyto protokoly samovoln∞ n∞jakß data zahazovaly - pouze v p°φpad∞ poÜkozenφ nepova₧ujφ za svou povinnost postarat se o nßpravu). Jeho v²znamnou p°ednostφ, oproti protokolu TCP, je jeho vyÜÜφ efektivnost - dφky tomu, ₧e se nesna₧φ d∞lat "nic navφc", nemusφ nΘst re₧ii kterß by s tφm nutn∞ byla spojena, a m∙₧e tudφ₧ fungovat efektivn∞ji. Zajφmav² je smysl dvou alternativnφch transportnφch protokol∙, TCP a UDP, z nich₧ jeden je spφÜe "minimalistick²" (protokol UDP), zatφ₧en² minimßlnφ re₧iφ, zatφmco druh² (TCP) je spφÜe maximalistick², a sna₧φ se d∞lat n∞co navφc (oproti protokolu IP), a tudφ₧ s v∞tÜφ vlastnφ re₧iφ: aplikace, provozovanΘ v jednotliv²ch uzlech sφt∞, si mohou samy vybrat ten z obou transportnφch protokol∙, kter² jim lΘpe vyhovuje. Nap°φklad elektronickß poÜta pro svΘ p°enosy volφ spolehliv² protokol TCP, zatφmco nap°. slu₧ba WWW si kv∙li efektivnosti a bezestavovΘmu zp∙sobu fungovßnφ volφ protokol UDP.
P°enosov² protokol, pomocφ kterΘho komunikujφ servery a klientskΘ programy (prohlφ₧eΦe) v rßmci slu₧by WWW. Podle pravidel jazyka HTTP tedy klient formuluje sv∙j po₧adavek na novou WWW strßnku, kterou mu mß server zaslat, a op∞t podle jazyka HTTP pak server formuluje svou odpov∞∩. Klientsk² program (prohlφ₧eΦ) p°itom generuje jednotlivΘ po₧adavky na popud u₧ivatele (jako d∙sledek toho, ₧e u₧ivatel klikne na urΦit² odkaz, tφm vyjßd°φ p°ßnφ jej aktivovat, a klient si od serveru vy₧ßdß WWW strßnku, na kterou tento odkaz sm∞°uje).
Jazyk, ve kterΘm je zapisovßn obsah jednotliv²ch WWW strßnek. Je zalo₧en na principu oznaΦovßnφ Φßstφ textu pomocφ znaΦek (anglicky: mark-up), kterΘ specifikujφ v²znam textu - nap°φklad to, ₧e urΦitß Φßst textu p°edstavuje nadpis, Φi mß b²t zobrazena tuΦn∞ apod. JinΘ znaΦky zase specifikujφ, ₧e na urΦitΘ mφsto mß b²t vlo₧en obrßzek, ₧e urΦitß Φßst textu p°edstavuje hypertextov² odkaz apod. Podle t∞chto znaΦek se pak p°i zobrazovßnφ strßnek v prohlφ₧eΦi (browseru) urΦuje jejich grafickß reprezentace.
V dob∞ svΘho vzniku byl protokol HTTP koncipovßn pouze pro zobrazovßnφ text∙. S nßstupem grafick²ch u₧ivatelsk²ch rozhranφ byl dopln∞n o znaΦky urΦenΘ pro formßtovßnφ text∙, vklßdßnφ obrßzk∙, statick²ch tabulek pozd∞ji i jin²ch objekt∙, ΦßsteΦn∞ bylo umo₧n∞no polohovßnφ objekt∙ na strßnce. Postupem Φasu byl stßle v∞tÜφ tlak na mo₧nost p°edßvat parametry zadanΘ u₧ivatelem zp∞t na server a °φdit pomocφ nφ odezvu. Proto bylo nutno implementovat do HTML formulß°ovΘ ovlßdacφ prvky, jako jsou textovß pole pro jedno i vφce°ßdkovΘ texty, tlaΦφtka, v²b∞ry, p°epφnaΦe a seznamy. Tyto prvky musejφ b²t sdru₧eny ve formulß°i, kter² zast°eÜuje p°edßnφ parametr∙ zp∞t na server.
V dneÜnφ dob∞ existuje n∞kolik zp∙sob∙ p°edßnφ parametr∙ a jejich zpracovßnφ. V ka₧dΘm p°φpad∞ je pot°eba urΦit, kter² program provede zpracovßnφ p°edan²ch dat. Aby nebyla naruÜena koncepce WWW serveru, kterß se p°φliÜ neliÜila od koncepce souborov²ch server∙ v lokßlnφch sφtφch, kdy je serveru zadßn nßzev dokumentu a ten je odeslßn klientovi jako prost² soubor, byl pou₧it nßsledujφcφ postup.
Na serveru je umφst∞n spustiteln² soubor. V prost°edφ Windows se jednß se bu∩ o soubor .exe, .dll nebo .cgi. Adresß°, ve kterΘm je soubor ulo₧en musφ umo₧≥ovat spouÜt∞nφ program∙. Toto nastavenφ je zßvislΘ na typu WWW serveru. Soubory .exe nebo .dll jsou spustitelnΘ p°φmo jako samostatnß ·loha v systΘmu Windows. Soubor .cgi (v∞tÜinou se pou₧φvß oznaΦenφ CGI script) je prvnφ otev°en jako prost² textov² soubor, kter² na prvnφm °ßdku obsahuje informaci o interpreteru, kter²m mß b²t samotn² script spuÜt∞n. Pokud server obdr₧φ data od klienta, provede spuÜt∞nφ p°φsluÜnΘho souboru. SystΘm p°edpoklßdß, ₧e spuÜt∞n² program pracuje se soubory standardnφho vstupu a v²stupu. Parametry p°edßvanΘ klientem mohou b²t p°edßvßny dv∞mi zp∙soby. Zp∙sob p°edßnφ parametru je dßn nastavenφm metody v sekci formulß°e v samotnΘm HTML k≤du na strßnce zobrazenΘ u klienta. Jednß se o dv∞ metody : GET a POST.
StarÜφ metoda GET spoΦφvß ve vytvo°enφ prom∞nnΘ prost°edφ (environment variable) jeÜt∞ p°ed samotn²m spuÜt∞nφm programu nebo CGI scriptu a ulo₧enφ parametr∙, kterΘ jsou specißln∞ k≤dovßny, proto₧e prom∞nnΘ prost°edφ na n∞kter²ch platformßch nemohou obsahovat n∞kterΘ znaky (nap°. znaky konce °ßdku, mezery). Pak je na samotnΘm programu, aby danou prom∞nnou prost°edφ p°eΦetl, rozk≤doval a p°i°adil parametry do internφch prom∞nn²ch. Slabinou celΘho postupu je spousta ·skalφ na cest∞ informacφ od klienta do samotnΘho zpracovßvajφcφho programu. Pokud pomineme velkou dobu pot°ebnou na provedenφ celΘ transakce, setkßme se s v∞tÜφmi problΘmy. Tφm je znaΦnß zßvislost celΘho postupu na pou₧itΘ platform∞. Ani tento problΘm nenφ ne°eÜiteln², ale komplikuje °eÜenφ. Nejv∞tÜφm problΘmem ovÜem z∙stßvß omezenφ dΘlky p°enesen²ch dat. Prom∞nnΘ prost°edφ majφ svou maximßlnφ velikost, definovanou operaΦnφm systΘmem. V praxi to znamenß, ₧e zhruba od 1KB p°enesen²ch dat na server v²Üe tento postup nemusφ pracovat.
Nov∞jÜφ metoda POST pracuje podobn²m zp∙sobem. Zßsadnφ rozdφl je v p°φmΘm pou₧itφ standardnφho souboru vstupu na, kter² jsou p°esm∞rovßna data zaslanß klientem. Tento postup je rychlejÜφ pro zpracovßnφ a takΘ dΘlka p°enesen²ch dat nenφ omezena. Tento postup je takΘ bezpeΦn∞jÜφ, proto₧e data nejsou zaznamenßvßna v pam∞tφch cache a ani nejsou zapsßna do p°φpadnΘho LOG souboru na serveru. NebezpeΦφ metody GET lze nßzorn∞ ukßzat p°i pou₧itφ prohlφ₧eΦe Internet explorer verze 4.0 a vyÜÜφ. Pokud je zapnuta funkce AutoComlete, kterß dopl≥uje obsah °ßdky Adresa podle v²b∞ru z posledn∞ zadan²ch adres (vΦetn∞ adres s parametry p°edan²mi metodou GET) , m∙₧e u₧ivatel zjistit osobnφ ·daje p°edanΘ jin²m u₧ivatelem, kter² navÜtφvil stejnou WWW adresu p°ed nφm.
Pokud je zpracovßvajφcφ program spuÜt∞n a jsou mu p°edßny parametry bu∩to metodou GET Φφ POST, WWW server poΦkß na dokonΦenφ zpracovßvajφcφho programu a data zapsanß tφmto programem do souboru standardnφho v²stupu jsou p°esm∞rovßna p°φmo ke klientovi. Z toho vypl²vß, ₧e v²stupem musφ b²t textov² soubor obsahujφcφ platn² HTML k≤d.
Pou₧itφ software na stran∞ serveru je dßno ji₧ v zadßnφ diplomovΘ prßci. P°esto bych ale cht∞l struΦn∞ shrnout ostatnφ mo₧nosti. ╪eÜenφ vypl²vajφcφ ze zadßnφ p°edpoklßdß pou₧itφ Magicu a Btrieve jako S╪BD (systΘm °φzenφ bßze dat) . Dßle zde musφ b²t instalovßn WWW server, kter² zajiÜ¥uje samotnou prezentaci dat na Internetu. Poslednφm Φlßnkem v °et∞zu musφ b²t datov² kanßl mezi Magicem a WWW serverem. Tento kanßl byl nazvßn Magic Broker a na WWW serveru je reprezentovßn dynamicky linkovanou knihovnou MGRQUISPI.DLL, kterß zprost°edkovßvß p°edßvßnφ parametr∙ Magicu a zp∞tn∞ vracφ serveru dynamicky generovanΘ strßnky v HTML. Tento postup je jeÜt∞ stßle s oblibou pou₧φvßn. Jeho nejv∞tÜφ nev²hodou je relativn∞ nφzkß v²konnost p°i p°φstupu n∞kolika u₧ivatel∙ souΦasn∞, kdy se paraleln∞ zpracovßvajφ po₧adavky vφce u₧ivatel∙. SystΘm Windows p°i tom vytvß°φ v₧dy novou instanci zpracovßvajφcφho programu, musφ pro n∞j alokovat pam∞¥, °φdit jeho provßd∞nφ a potΘ pam∞¥ uvolnit. I tento proces se vÜak dß do urΦitΘ mφry optimalizovat. Z tohoto d∙vodu vznikly novΘ standardy zpracovßnφ po₧adavk∙.
Jazyk PHP vytvo°il v roce 1994
Rasmus Lerdorf, kdy₧ si naprogramoval v Perlu jednoduchΘ poΦφtadlo
p°φstup∙ na jeho strßnky. Aby spouÜt∞nφ Perlu tolik nezat∞₧ovalo server,
p°epsal ho do jazyka C. Tento systΘm se brzy stal populßrnφm, a proto ho
autor rozÜφ°il a uvolnil pod nßzvem Personal Home Page Tools, pozd∞ji
Personal Home Page Construction Kit. No a kdy₧ Lerdorf systΘm rozÜφ°il i o
mo₧nost zaΦle≥ovßnφ SQL p°φkaz∙ do strßnek, prßci s formulß°i a
zobrazovßnφ v²sledk∙ dotaz∙ SQL, zφskal systΘm nßzev PHP/FI 2.0
(Profesional Home Page/Form Interpreter verze 2.0). Pod tφmto nßzvem byl
u₧ jako jednoduch² programovacφ jazyk Üφ°en do celΘho sv∞ta. Verze 2.0
vÜak pracovala jen na svΘm domovskΘm operaΦnφm systΘmu, kter²m je LINUX
(UNIX). Proto bylo vytvo°eno PHP 3.0, kterΘ ji₧ pracuje i na 32-bitov²ch
Windows a na operaΦnφm systΘmu MACINTOSHE. S verzφ 3.0 se upustilo od
v²znamu zkratky PHP a systΘm se dßle oznaΦuje jako hypertextov²
preprocesor. Poslednφ uvoln∞nou verzφ je PHP 4.0, kterß je Üφ°ena pod
nßzvem ZEND. Udßvß se, ₧e tato verze je 8 - 10 x rychlejÜφ ne₧ verze
p°edeÜlß. PHP °adφme do skupiny skriptovacφch jazyk∙, kterΘ se provßd∞jφ
na stran∞ serveru. PHP je na serveru zßvislΘ, proto₧e na n∞m b∞₧φ jeho
interpreter, kter² skripty provßdφ. PHP se tφmto odliÜuje nap°. od
JavaScriptu, jeho₧ skripty se stahujφ p°φmo s HTML strßnkou a jsou
vykonßny na stran∞ klienta jeho prohlφ₧eΦem. Mß to svΘ v²hody i nev²hody.
V²hodou PHP v tomto p°φpad∞ je, ₧e se ke zdrojov²m k≤d∙m skript∙ nedostane
nikdo jin² ne₧ autor, kde₧to ke zdrojovΘmu k≤du JavaScriptu se dostane
ka₧d², kdo si stßhne HTML strßnku, v nφ₧ je skript obsa₧en. JavaScript mß
v²hody ve svΘ mo₧nosti dynamicky reagovat na udßlost zp∙sobenou klientem
(nap°. pohyb kurzoru myÜi...), co₧ PHP nedokß₧e, proto₧e k provedenφ ka₧dΘ
svΘ novΘ udßlosti musφ b²t v₧dy prohlφ₧eΦem znovu odeslßn po₧adavek na
server. Proto je nejvhodn∞jÜφ variantou kombinovat PHP s JavaScriptem nebo
jin²m, dynamicky reagujφcφm jazykem (nap°. VB Script).
SamotnΘ PHP
skripty se zapisujφ p°φmo do HTML strßnky (nejΦast∞ji s p°φponou *.php3).
PHP interpreter na serveru pak pracuje tak, ₧e HTML p°φkazy rovnou uklßdß
do v²slednΘ HTML strßnky, ale narazφ-li na PHP skript, nejprve ho provede,
a potom je do HTML strßnky zapsßn jeho v²sledek (viz. p°φklad 1). To je
cel² princip dynamickΘho generovßnφ HTML strßnek, co₧ je zßkladnφm
poslßnφm jazyka PHP.
Microsoft z poΦßtku nßstup Internetu pon∞kud zaspal, ale dnes ji₧ nabφzφ ucelenou °adu produkt∙ pro vytvo°enφ aplikacφ pracujφcφch v prost°edφ Internetu. Firma Microsoft podporuje na svΘm WWW serveru (IIS Internet Information Server) systΘm nazvan² ASP (Active Server Pages). Jednß se o dynamick² generßtor HTML strßnek, kter² podporuje r∙znΘ druhy jazyk∙. NejΦast∞ji se jednß o Visual Basic Script nebo o Java Script. DalÜφ firmy nabφzejφ moduly i pro jinΘ jazyky -- nap°. pro Perl, REXX a Python. Aby server mohl odliÜit b∞₧nΘ strßnky od t∞ch s ASP, uklßdajφ se ASP do soubor∙ s p°φponou .asp. ASP podporuje p°φstup do tΘm∞° vÜech databßzov²ch prost°edφ b∞₧φcφch v prost°edφ Windows pomocφ ODBC (Open Database Conectivity). Tvorba vlastnφch strßnek je zde vÜak diametrßln∞ odliÜnß od postupu pou₧itΘm v Magicu. Postupuje se na principu dopl≥ovßnφ Φßstφ dynamicky generovanΘho HTML k≤du do k≤du statickΘho ve form∞ vsuvek. Znalost HTML a skriptovacφho jazyka je podmφnkou. Tento postup se Üiroce rozÜφ°il pro svou univerzßlnost a Üirokou podporu ze strany Microsoftu.
Pokud jsme cht∞li d°φve pou₧φvat ASP, byla to celkem nßkladnß legrace. Museli jsme si po°φdit Windows NT Server a IIS, co₧ nenφ ₧ßdnß lacinß zßle₧itost. K tomu je jeÜt∞ pot°eba p°iΦφst zv²ÜenΘ nßroky na hardware. A¥ chceme nebo ne, je °eÜenφ postavenΘ nad produktech od Microsoftu vφce nßroΦnΘ na systΘmovΘ zdroje ne₧ obdobnΘ °eÜenφ zalo₧enΘ na voln∞ Üi°iteln²ch produktech pro Unix.
Cenovou nßroΦnost ΦßsteΦn∞ eliminuje Windows NT Option Pack, kter² uvolnil Microsoft na konci roku 1997. V balφku zdarma dostaneme i Personal Web Server s podporou ASP. To ji₧ dostaΦuje pro v²voj aplikacφ zalo₧en²ch na ASP. Pokud vÜak chceme, aby s v²slednou aplikacφ mohlo pracovat v∞tÜφ mno₧stvφ u₧ivatel∙, musφte ji spustit pod Windows NT Server, na kterΘm pob∞₧φ Internet Information Server.
Magic p°istupuje ke tvorb∞ WWW aplikacφ zcela odliÜn²m zp∙sobem. V manußlu se tvrdφ, ₧e m∙₧ete vytvß°et plnohodnotnΘ aplikace i s ·pln∞ nulov²mi znalostmi jazyka HTML a dokonce i vytvß°et Klient/Server aplikace na Internetu v jazyce Java bez jeho znalosti. Jako obvykle je to pravda pouze z Φßsti.
HTML strßnka vznikß v Magicu ve visußlnφm nßvrhß°i strßnek. Lze zde vyu₧φvat p°edem definovanΘ ovlßdacφ prvky. Jednß se o vÜechny pou₧itelnΘ typy formulß°ov²ch prvk∙, lze vklßdat texty, ale pouze jedno°ßdkovΘ, statickΘ tabulky, obrßzky, ActiveX komponenty a dokonce i Java applety. Prßce se dost podobß navrhovßnφ formulß°∙ spouÜt∞n²ch p°φmo v prost°edφ Magicu. Cφlem v²vojß°∙ Magicu bylo asi vytvo°it nßvrhß°i pohodlφ, kterΘ mu poskytujφ komerΦnφ WWW editory, jako jsou nap°. Microsoft FrontPage, HomeSite, nebo Namo WebEditor. Prßce s nßvrhß°em strßnek v Magicu, je ale topornß. Je pot°eba se Φasto "proklikßvat" systΘmem formulß°∙, spousta voleb z∙stßvß nep°φstupnß a rozd∞lenφ pracovnφ plochy je p°φmo neÜ¥astnΘ. Za velk² nedostatek pova₧uji nemo₧nost nastavenφ pevnΘ velikosti u n∞kter²ch formulß°ov²ch prvk∙. Jejich velikost je nastavovßna automaticky, podle dΘlky zobrazovan²ch dat. Tuto dΘlku Φasto programßtor nem∙₧e dop°edu odhadnout a to Φasto zp∙sobuje zborcenφ formßtu HTML strßnek. Podpora statick²ch tabulek je celkem solidnφ, i kdy₧ i zde nemß v²vojß° tolik prostoru, kolik by si p°ßl. Bohu₧el toto se ji₧ nedß °φci o dynamicky generovan²ch tabulkßch. Zde mß v²vojß° jen velmi mßlo svobody pro tv∙rΦφ Φinnost.
Jak bude v nßsledujφcφm odstavci popsßno, je mo₧nΘ n∞kterΘ operace provßd∞t p°φmo na stran∞ klienta. Tento postup je velmi v²hodn², proto₧e odlehΦuje serveru, v²razn∞ zrychluje interakci s u₧ivatelem a minimalizuje objem p°enesen²ch dat. Toho se dß docφlit vhodn²m vlo₧enφm p°φkaz∙ skriptovacφho jazyka, kter² je podporovßn klientem. Bohu₧el Magic, k tomuto nenabφzφ tΘm∞° ₧ßdnΘ prost°edky. Neznamenß to sice, ₧e by do strßnek neÜel ₧ßdn² skript vlo₧it, ale v²vojß° si musφ pracn∞ hledat cestu, kterou doslova obejde p°edem nalinkovan² scΘnß° Magicu.
Nechci zde tvrdit, ₧e koncepce tvorby WWW aplikacφ v Magicu se ubφrß zcela Üpatn²m sm∞rem, ale je zde vid∞t, ₧e Magic se zaΦal orientovat na Web teprve nedßvno a spousta v∞cφ je stßle v plenkßch.
V tΘto oblasti mi jako tv∙rci projektu byla ponechßna znaΦnß volnost ve v²b∞ru zp∙sobu implementace. Proto₧e mi p°φmo zadßnφ urΦuje nastudovßnφ a nßslednΘ vyu₧itφ mo₧nostφ dostupn²ch internetov²ch prohlφ₧eΦ∙, v∞noval jsem tΘto Φßsti prßce hodn∞ Φasu, aby v²slednΘ °eÜenφ bylo pokud mo₧no co nejoptimßln∞jÜφ. V dneÜnφ dob∞ m∙₧eme do mno₧iny dostupn²ch prohlφ₧eΦ∙ za°adit pouze prohlφ₧eΦe z dφlen Microsoft a Netscape. Microsoft Internet Explorer se dnes pou₧φvß ve verzφch od 3.0 a₧ po poslednφ verzi 5.5, kterß je dnes p°φstupnß pouze ve verzi beta. Firma Netscape byla p∙kopnφkem v oblasti HTML prohlφ₧eΦ∙, a prßv∞ ona urΦovala v²voj WWW slu₧eb na Internetu v nedßvn²ch minul²ch letech. Dnes se m∙₧eme setkat s prohlφ₧eΦi tΘto firmy ve verzφch od 3.0 (Netscape Navigator ve verzi 3.0 pracuje i pod Windows 3.1) a₧ po poslednφ verzi 6.0 (Netscape Comunikator), kter² je napsßn v jazyce Java. Vzhledem k tomu, ₧e mezi prohlφ₧eΦi obou firem ve verzφch mezi 3.0 a 4.0 byly zavedeny novΘ technologie, rozÜφ°enφ podpory jazyka JavaScript a opraveny chyby t²kajφcφ se bezpeΦnosti a takΘ proto, ₧e verze 4.0 obou spoleΦnostφ se dajφ instalovat i pod systΘm Windows 3.1, jsem se rozhodl ve svΘm °eÜenφ nepodporovat tyto starΘ prohlφ₧eΦe.
Nynφ bych cht∞l popsat rozdφly v prohlφ₧eΦφch obou konkurenΦnφch firem, kterΘ majφ dopad na v²vojß°e WWW aplikacφ i na jejich u₧ivatele. T°eba by se mohlo zdßt, ₧e specifikace jazyka je jednou danß a nenφ problΘm HTML stßnky zobrazit stejn∞ ve vÜech prohlφ₧eΦφch. V praxi se setkßvßme s mnoha rozdφly. Verze 3.0 zavßd∞jφ objektov∞ orientovanΘ pojetφ obsahu HTML stßnek a skriptovacφ jazyk JavaScript pro manipulaci s t∞mito objekty. Objektovß struktura strßnky je relativn∞ slo₧itß a podpora JavaScriptu se v obou prohlφ₧eΦφch liÜφ. Firma Microsoft dokonce prohrßla soudnφ spor, kter² byl proti nφ veden a bylo jφ zakßzßno oznaΦovat Internet Explorer jako Java kompatibilnφ. Microsoft nynφ pou₧φvß oznaΦenφ JScript jako svou variantu k JavaScriptu firmy Netscape. Pro v²vojß°e to znamenß spoustu prßce navφc, pokud chce docφlit sprßvnΘ funkce svΘ aplikace v obou prohlφ₧eΦφch.
Pokud chceme napsat modernφ aplikaci typu klient/server, je pot°eba p°edem analyzovat tok dat a udßlostφ v zßvislosti na interakci klienta. Cφlem tΘto anal²zy je rozd∞lenφ operacφ, na dv∞ skupiny tj. na operace kterΘ mohou b²t provedeny p°φmo na stran∞ klienta a operace, kterΘ musφ b²t provedeny na stran∞ serveru. Obecn∞ se dß °φci, ₧e vÜechny operace m∙₧e provßd∞t server, ale v prost°edφ Internetu musφme poΦφtat i s n∞kolika sekundovou prodlevou mezi odeslßnφ po₧adavku a p°φjmem odpov∞di. TakΘ je v naÜem zßjmu zbyteΦn∞ nezat∞₧ovat server. Proto se musφme sna₧it co nejvφce operacφ p°enΘst na stranu klienta. K tomu je pot°eba doruΦit klientovi strßnky s provediteln²m obsahem, kter² tyto operace provede.
DneÜnφ prohlφ₧eΦe nabφzejφ n∞kolik mo₧nostφ spouÜt∞nφ program∙ dodan²ch serverem. Mezi oblφbenΘ metody pat°φ pou₧φvßnφ skriptovacφch jazyk∙. Dßle m∙₧eme pou₧φt vlo₧enΘ komponenty ActiveX. Poslednφ mo₧nostφ je vlo₧it do strßnky applet napsan² v jazyce Java. Postupn∞ nynφ shrnu v²hody a nev²hody jednotliv²ch °eÜenφ.
JavaScript je univerzßlnφ jazyk a m∙₧eme v n∞m psßt programy pro provßd∞nφ libovoln²ch v²poΦt∙. M∙₧eme psßt jednoduchΘ scΘnß°e (skripty), kterΘ poΦφtajφ Fibonacciho Φφsla nebo vyhledßvajφ prvoΦφsla. V souvislosti s WWW aplikacemi to vÜak nejsou zajφmavΘ aplikace. Jak jsem ji₧ d°φve zmφnil, skuteΦnß sφla JavaScriptu je v prohlφ₧eΦi a v dokumentov∞ zalo₧en²ch objektech, kterΘ jazyk podporuje. JavaScript umo₧≥uje psßt libovoln² text do HTML souboru, p°ed tφm ne₧ jej prohlφ₧eΦ zobrazφ. Tφmto zp∙sobem vytvo°φme libovoln² objekt na strßnce (tabulku, formulß°ovΘ prvky, hyperlinky a pod.). N∞kolik objekt∙ JavaScriptu umo₧≥uje °φzenφ chovßnφ prohlφ₧eΦe. Objekt Window podporuje metody dialog∙ pro zobrazovßnφ jednoduch²ch zprßv pro u₧ivatele a pro jednoduch² u₧ivatelsk² vstup. M∙₧eme takΘ otevφrat novß okna a zavφrat stßvajφcφ. Objekt Document a objekty, kterΘ obsahuje, umo₧≥ujφ program∙m Φφst a n∞kdy i ovliv≥ovat Φßsti dokumentu. Zdaleka nejd∙le₧it∞jÜφ schopnost ovliv≥ovßnφ obsahu dokument∙ poskytuje objekt Form a jeho objekty prvk∙, obsahujφcφ: Button, CheckBox, Hidden, Password, Radio, Reset, Select, Submit, Text a TextArea. Tyto prvkovΘ objekty umo₧≥ujφ Φφst a zapisovat do dokumentu v r∙znΘm tvaru hodnoty libovoln²ch vstupnφch prvk∙. JavaScript mß metodu Window.setTimeOut(), kterß umo₧≥uje, ₧e blok libovolnΘho k≤du JavaScriptu bude proveden za urΦit² poΦet milisekund.
Idea VisualBasic skriptu ve velmi podobnß JavaScriptu, akorßt syntaxe odpovφdß populßrnφmu VisualBasicu z dφlen Microsoftu. Vzhledem k tomu, ₧e jej podporuje pouze Internet Explorer jsem usoudil ₧e se nejednß o univerzßlnφ °eÜenφ a dßle jsem mo₧nosti VisualBasic skriptu nestudoval.
ActiveX je pozm∞n∞n² existujφcφ objektov² model pro pou₧itφ na WWW strßnkßch. ActiveX vyu₧φvß existujφcφ technologie OLE (Object linking and embedding), kterou zapouz°uje do normalizovanΘho rozhranφ a poskytuje objekt∙m ActiveX komunikaci mezi sebou nezßvisle na v jakΘm jazyce byly vytvo°eny a na jakΘ platform∞ jsou spouÜt∞ny. Objekt ActiveX m∙₧e b²t napsßn v jakΘmkoli jazyce, ale musφ b²t zkompilovßn pro cφlovou platformu, na kterΘ musφ b²t instalovßn. Je mo₧nΘ provßd∞t instalaci ze sφt∞ internet, ale u₧ivatel∙m s nastavenou vysokou bezpeΦnostφ prohlφ₧eΦe tato instalace nebude povolena, proto₧e objekt ActiveX je samospustiteln² k≤d a prohlφ₧eΦ nad nφm nemß kontrolu. Tento objekt m∙₧e tudφ₧ snadno p°enßÜet viry, nebo odesφlat data z klientskΘho poΦφtaΦe na server, tedy u₧ivatele "Üpehovat".
V²hoda ActiveX je ve velkΘm mno₧stvφ komponent, kterΘ ji₧ byly vytvo°eny a jsou v²vojß°∙m Φasto nabφzeny zdarma. TakΘ pou₧itφ technologie OLE dßvß zßruku robustnosti, proto₧e tato technologie je lΘty prov∞°enß.
ActiveX vyu₧φvß technologie DCOM, kterß umo₧≥uje p°φstup jednoho objektu ActiveX k druhΘmu nezßvisle na tom zda-li jsou oba obsa₧eny v jednom kontejneru, na jednom poΦφtaΦi a nebo na r∙zn²ch poΦφtaΦφch.
Microsoft poskytuje °adu nßstroj∙ pro tvorbu komponent ActiveX. Komponenta je vytvo°ena u₧ivatelem a pak pomocφ pr∙vodce je p°evedena do standardnφho tvaru, registrovßna v systΘmu a je jφ p°id∞leno unikßtnφ identifikaΦnφ Φφslo.
Java je modernφ komplexnφ programovacφ jazyk. AΦkoliv byl navr₧en pro prost°edφ Internetu, neubφrß to nic z jeho univerzßlnosti. Je mo₧nΘ v n∞m vytvß°et aplikace databßzovΘ, grafickΘ, matematickΘ a pod. Pokud jej chceme vyu₧φvat na stran∞ klienta mßme v podstat∞ dv∞ mo₧nosti jak toto docφlit.
JednoduÜÜφ a pou₧φvan∞jÜφ metoda spoΦφvß v zaΦlen∞nφ tzv. Java appletu do strßnky. Applet je sta₧en s celou strßnkou ze serveru a potΘ je u u₧ivatele spuÜt∞n. Applet se na strßnce prezentuje jako obdΘlnφkovß plocha p°edem danΘ velikosti, kterß m∙₧e obsahovat jakoukoli grafiku, ovlßdacφ prvky, vstupnφ pole stejn∞ jako samostatn∞ spustiteln² Javovsk² program.
Druhß varianta, je v sta₧enφ t°φd celΘho programu a jeho nßslednΘm spuÜt∞nφ. Na klientskΘm poΦφtaΦi musφ b²t instalovßn JRE modul (Java Runtime Environment), kter² provede interpretaci a spuÜt∞nφ programu.
Ob∞ °eÜenφ majφ svΘ pro a proti. V prvnφm p°φpad∞ je v²hodnß jednoduchost, s kterou klient m∙₧e spouÜt∞t Java applety. Platφ zde, ale °ada omezenφ, kterß majφ svΘ opodstatn∞nφ. Java, ostatn∞ jako ka₧d² programovacφ jazyk mß knihovnu funkcφ slou₧φcφch k manipulaci se souborov²m systΘmem. Pokud program b∞₧φ v prost°edφ prohlφ₧eΦe, nem∙₧eme tyto funkce z d∙vodu bezpeΦnosti vyu₧φvat. D∙vody jsou z°ejmΘ. Pokud by u₧ivatel otev°el neznßmou strßnku se zlomysln²m appletem, ten by byl okam₧it∞ spuÜt∞n a mohl by poÜkodit lokßlnφ data, nebo odeslat cizφ osob∞ soukromΘ informace o klientovi. TakΘ nenφ mo₧nΘ p°istupovat na jin² poΦφtaΦ ne₧ ten, ze kterΘho byl applet sta₧en pomocφ sφ¥ov²ch slu₧eb. DalÜφ nep°φjemnost spoΦφvß v pou₧itφ virtußlnφho stroje dodßvanΘho s prohlφ₧eΦem, kter² dnes nepodporuje zobrazovßnφ modernφch visußlnφch t°φd Swing, kterΘ jsou voln∞ pou₧itelnΘ p°i v²voji javovsk²ch aplikacφ.
Druhß varianta mß v²hodu v tom, ₧e klientsk² program je stßle ulo₧en u klienta a jeho spuÜt∞nφ je velmi rychlΘ, nebo¥ jej nenφ pot°eba stahovat ze serveru. Nep°φjemnostφ je komplikovan∞jÜφ instalace. V tomto p°φpad∞ vÜak m∙₧eme pln∞ vyu₧φvat vÜech mo₧nostφ jazyka vΦetn∞ p°φstupu k lokßlnφmu disku, sφ¥ovΘho p°φstupu k libovoln²m poΦφtaΦ∙m a pou₧itφ t°φd Swing.
Java je objektov∞ orientovan² jazyk, kter² vychßzφ z jazyk∙ C a C++. Narozdφl od sv²ch p°edch∙dc∙ vÜak neobsahuje n∞kterΘ konstrukce zp∙sobujφcφ p°i programovßnφ nejv∞tÜφ potφ₧e a naopak p°idßvß °adu zajφmav²ch vlastnostφ:
Nejv∞tÜφm p°φnosem Javy je bezesporu plnß p°enositelnost program∙ na libovolnou platformu bez nutnosti jejich rekompilace. Programy se toti₧ nep°eklßdajφ do strojovΘho k≤du konkrΘtnφho procesoru, ale do nezßvislΘ podoby, tzv. bytovΘho k≤du (bytecode). Tento k≤d pak m∙₧e b²t interpretovßn na jakΘmkoliv poΦφtaΦi nebo pr∙myslovΘm za°φzenφ. Kompatibilita je tedy zajiÜt∞na na binßrnφ ·rovni.
HardwarovΘ rozdφly zast°eÜuje tzv. Java Platforma, kterß obsahuje dv∞ zßkladnφ Φßsti:
Pro urychlenφ m∙₧e b²t interpret voliteln∞ nahrazen tzv. JIT (Just-In-Time) kompilßtorem, kter² p°i b∞hu programu provßdφ nejprve p°eklad do strojovΘho k≤du p°φsluÜnΘho procesoru.
V souΦasnΘ dob∞ probφhß nßvrh n∞kolika rozÜi°ujφcφch programov²ch rozhranφ. Jednß se nap°φklad o podporu 2D a 3D grafiky (Java 2D a 3D API), zvuk (Java Audio API), sprßvu sφt∞ (Java Management API), bezpeΦnost (Java Security API) atd.
Firma Sun rovn∞₧ vyvφjφ specißlnφ mikroprocesory urΦenΘ pro rychlou interpretaci bytovΘho k≤du a takΘ sφ¥ov² poΦφtaΦ (JavaStation) s operaΦnφm systΘmem na bßzi Javy (JavaOS).
Hlavnφm nedostatkem Javy je malß rychlost interpretovan²ch program∙. To se t²kß zejmΘna Internetov²ch prohlφ₧eΦ∙, kterΘ navφc majφ mnohdy problΘmy se stabilitou applet∙ (ovÜem nikoliv vinou Javy). Tuto vadu by m∞ly v budoucnu odstranit vyvφjenΘ JIT kompilßtory.
Druh²m problΘmem jsou znaΦnΘ nßroky na pam∞¥, vznikajφcφ v d∙sledku automatickΘ sprßvy pam∞¥ov²ch prost°edk∙. Kapacita pam∞tφ poΦφtaΦ∙ vÜak neustßle roste, a tudφ₧ se jednß o pon∞kud mΘn∞ zßva₧n² nedostatek.
Magic je v²vojovΘ prost°edφ pro tvorbu databßzov²ch aplikacφ. Sv²m pojetφm se vymykß za₧it²m princip∙m z v∞tÜiny jin²ch nßstroj∙ tohoto typu. V Magicu se nedß mluvit o programovßnφ ve stylu na jak² jsme si zvykli v konvenΦnφch programovacφch jazycφch jako jsou nap°. Pascal, C++, Visual Basic, Visual FoxPro Φi Java.
V Magicu vznikß aplikace vypl≥ovßnφm p°edem definovan²ch tabulek. Jako hlavnφ lze vyjmenovat tabulku typ∙, tabulku soubor∙ Φi tabulku program∙, kterß je svßzßna s tabulkami ·loh, formulß°∙, udßlostφ, prßv, vstupn∞ v²stupnφch soubor∙, atd. Pro vypln∞nφ tabulek jsou definovßna dialogovß okna, kterß zprost°edkovßvajφ jejich napln∞nφ tak, ₧e jsou nabφzeny seznamy mo₧nostφ, p°φpadn∞ provßd∞jφ kontrolu u₧ivatelskΘho vstupu. Distributo°i Magicu se chlubφ tφm, ₧e ka₧dou jejich aplikaci lze vytvo°it pomocφ pouh²ch 13 zabudovan²ch p°φkaz∙. Nenφ to tak docela pravda, proto₧e v Magicu jsou stovky p°φkaz∙, kterΘ se pou₧φvajφ jako v²razy (nap°. vÜechny p°φkazy pro prßci s °et∞zci). TakΘ je v manußlu uvedeno, ₧e se jednß o objektov∞ orientovanΘ v²vojovΘ prost°edφ. Ji₧ po prvnφm seznßmenφ vÜak ka₧dΘmu musφ b²t jasnΘ, ₧e o vlastnostech jako zapouzd°enost Φi d∞diΦnost nem∙₧e b²t °eΦ. Magic je vybaven tzv. automatick²m generßtorem aplikacφ (Automatic Program Generator), kter² umφ vytvo°it program pro listovßnφ, p°idßvßnφ, zm∞nu a mazßnφ zßznam∙, Φi generßtor sestav. Ve skuteΦnosti se nejednß o p°φliÜ u₧iteΦn² nßstroj, ale je vhodn² nap°. pro zaΦφnajφcφ u₧ivatele, pro prvnφ seznßmenφ s Magicem.
Nßvrh aplikace je postaven na standardnφch postupech, kterΘ jsou v Magicu zabudovßny. Proto lze na t∞chto postupech velmi rychle vybudovat i pom∞rn∞ slo₧itΘ aplikace. ProblΘmy vyvstßvajφ pokud pot°ebujeme vyu₧φt jinΘho n∞₧ standardnφho postupu. Pak jsou mo₧nosti v²vojß°e znaΦn∞ omezenΘ, v∞tÜinou vysokou pracnostφ, ale jsou i p°φpady, kdy urΦit² postup nelze naprogramovat v∙bec. V²hodou Magicu je jeho schopnost komunikovat mezi servery, na kter²ch je Magic nainstalovßn p°es transparentnφ sφ¥ovΘ rozhranφ. Proto je mo₧nΘ propojit r∙znorodΘ typy sφtφ. Magic takΘ umo₧≥uje pracovat s mnoha r∙zn²mi systΘmy °φzenφ bßze dat (S╪BD) a pracovat s daty z jednotliv²ch S╪BD souΦasn∞. V∞tÜinou se jednß o r∙znΘ typy SQL server∙ jako nap°. Oracle, Informix, SyBase a podobn∞. Standardn∞ je dodßvßn se S╪BD Btrieve. Pro v²vojß°e aplikace je k dispozici transparentnφ rozhranφ mezi Magicem a S╪BD, tak₧e je v²voj aplikace tΘm∞° nezßvisl² na pou₧itΘm S╪BD. Magic je kompatibilnφ se systΘmy DOS, Windows, Unix a OpenVMS.
Jak ji₧ bylo zmφn∞no, zp∙sob programovßnφ je zcela odliÜn² od programovßnφ ve vφce Φi mΘn∞ tradiΦnφch jazycφch. Nejprve je pot°eba vyplnit tabulku datov²ch typ∙, typy kterΘ p°edpoklßdßme, ₧e budeme pou₧φvat. Tento krok nenφ povinn², ale m∙₧e v²razn∞ zkrßtit v²voj aplikace, proto₧e zaruΦuje kompatibilitu typ∙. Dßle v tabulce soubor∙ zalo₧φme zßznamy popisujφcφ tabulky pou₧itΘ v aplikaci. Soubory se zde opravu rozum∞jφ databßzovΘ tabulky. Tabulka soubor∙ je svßzßna s tabulkou sloupc∙, kde zalo₧φme zßznamy pro jednotlivΘ polo₧ky v tabulce. Zde m∙₧eme vyu₧φt specifikace typ∙ z tabulky typ∙. Dßle m∙₧eme vyplnit tabulku index∙, kterß je rovn∞₧ svßzßna s tabulkou soubor∙. Indexy mohou obsahovat n∞kolik segment∙, kterΘ odpovφdajφ jednotliv²m polo₧kßm, lze urΦit po°adφ t°φd∞nφ a takΘ zda je klφΦ unikßtnφ Φi ne. V tΘto fßzi nelze definovat relaΦnφ vztahy ani definovat pravidla pro vnit°nφ konzistenci dat.
DalÜφm krokem je nßvrh program∙. Postup takΘ spoΦφvß ve vypl≥ovßnφ p°edem definovan²ch tabulek. Program sestßvß z jednoho zßznamu v tabulce program∙, kter² nese informaci o jeho nßzvu a globßlnφm nßzvu, kter² se pou₧φvß v internetov²ch aplikacφch a zßznamech v navazujφcφch tabulkßch. Program je tvo°en stromou strukturou ·loh. V ka₧dΘ ·loze mohou b²t definovßny pou₧itΘ soubory (databßzovΘ tabulky), virtußlnφ prom∞nnΘ (pam∞¥ovΘ - nejsou z tabulky), seznam v²raz∙, formulß°∙, vstupn∞ v²stupnφch polφ a udßlostφ. Hierarchickß struktura ·loh urΦuje, pravidla ve sdφlenφ prom∞nn²ch a volßnφ pod·loh. Ka₧dß ·loha m∙₧e pou₧φvat prom∞nnΘ, formulß°e a vstupn∞ v²stupnφ soubory svΘ volajφcφ ·lohy a volat pouze p°φmo pod°φzenΘ ·lohy.
┌loha je koncipovßna jako cyklus. Pokud je v ·loze definovßn hlavnφ tabulka, znamenß to , ₧e v ka₧dΘm kroku je naΦten nov² zßznam z tΘto tabulky. Po p°eΦtenφ poslednφho zßznamu v tabulce ·loha skonΦφ. Pokud nenφ v ·loze hlavnφ tabulka definovßna, je cyklus nekoneΦn², pokud nenφ podmφnka ukonΦenφ cyklu nastavena na ANO. Pak ·loha skonΦφ po prvnφm kroku. D∙le₧itou vlastnostφ ·lohy je m≤d, ve kterΘm byla spuÜt∞na. Mezi nejd∙le₧it∞jÜφ pat°φ m≤dy vytvo°enφ zßznamu, zruÜenφ, vyhledßnφ, dotazovßnφ a rozsahu. Volbou tohoto m≤du se provßd∞jφ zßkladnφ operace nad tabulkou.
Magic od verze 8 se zaΦφnß orientovat na Internet. Je zde zabudovßn Magic Broker, kter² zprost°edkovßvß v²m∞nu dat mezi Magicem a WWW serverem. Magic mß n∞kolik prost°edk∙ pro generovßnφ HTML strßnek. Magic m∙₧e p°φmo generovat HTML k≤d z vizußlnφho nßvrhß°e formulß°∙. Lze vytvo°it HTML dokument, kter² slou₧φ pouze k zobrazenφ dotazu, HTML formulß° obsahu vstupnφ pole, jejich₧ hodnota m∙₧e b²t odeslßna zp∞t na server. Tento formulß° m∙₧e obsahovat prvky ActiveX nebo Java applety. Rozdφln² p°φstup pou₧φvß funkce output merge, kterß dopl≥uje Φßsti HTML k≤du do p°edem vytvo°enΘ strßnky a zaΦle≥uje jej tam pomocφ specißlnφch znaΦek, kterΘ jsou poslΘze odstran∞ny.
Magic dokß₧e sßm vygenerovat Java applet, kter² je zaΦlen∞n do strßnky. Tento applet je vÜak po ka₧dΘm odeslßnφ dat na server odstran∞n a op∞t nahrßn ze serveru. Tento postup vÜak zcela eliminuje vÜechny v²hody, kterΘ Java applety poskytujφ. V²vojß°i mß jedinou mo₧nost a to vytvo°it applet sßm a pak jej vlo₧it do strßnky generovanΘ Magicem, nebo samostatnΘ strßnky a veÜkerou komunikaci s Magicem ovlßdat k≤dem, napsan²m v appletu. Toto °eÜenφ nabφzφ spoustu v²hod a jednß se o modernφ programovacφ techniku. Bohu₧el Magic nemß ₧ßdnΘ rozhranφ, kterΘ by umo₧≥ovalo pohodlnou v²m∞nu dat, tak₧e je nutno data separovat z formßtovanΘho textovΘho v²stupu. Tento v²stup je pot°eba v Magicu vytvo°it pomocφ nßstroj∙ slou₧φcφch k vytvß°enφ textov²ch tiskov²ch sestav urΦen²ch pro znakovΘ tiskßrny. Zp∞tn∞ lze p°edat data vytvo°enφm HTTP propojenφ se stejn²mi parametry, jako formulß° generovan² Magicem a tak jej "oklamat". Cesta je to klikatß a dlouhß, ale dß se jφ dojφt k cφli.
Zadßnφ informaΦnφho systΘmu nenφ p°φliÜ p°esnΘ, tak₧e jsem tento ·kol pojal jako anal²zu mo₧n²ch postup∙ a problΘm∙, kterΘ provßzejφ realizaci. Aby byl systΘm pou₧iteln², je pot°eba jej propojit s jeho dalÜφmi Φßstmi, jako je zßpis student∙ do kurz∙ (ΦßsteΦn∞ °eÜeno v programu), kontroly opakovanΘho zßpisu, kontroly nßvaznosti p°edm∞t∙, p°ihlaÜovßnφ na zkouÜky, v²poΦty vß₧en²ch pr∙m∞r∙, rozvrhy dle jednotliv²ch p°edm∞t∙, uΦitel∙, obsazenφ uΦeben, anotace kurz∙, elektronickß literatura, dochßzka do povinn²ch p°edm∞t∙, zprßvy o ukonΦenφ roΦnφk∙, povolovßnφ studijnφch v²jimek, individußlnφ studijnφ plßny, p°ihlßÜky na Ükolu, stipendijnφ systΘm, dßle t°eba takΘ Ükolnφ ·Φetnictvφ, odm∞≥ovßnφ zam∞stnanc∙, slu₧ebnφ jφzdy nßkupy spot°ebnφch materißl∙ atd. Fantazii je pot°eba p°i anal²ze uvolnit na nejvyÜÜφ mo₧nou mφru, proto₧e p°ipravenost na budoucφ rozÜi°ovßnφ systΘm∙ je velmi d∙le₧itß. Nynφ se tyto po₧adavky mohou zdßt p°ehnanΘ, ale p°edstava pln∞ mobilnφ kancelß°e je lßkavß. P°itom ·spora Φasu (modern∞ lidsk²ch zdroj∙) by byla obrovskß. Ka₧d² student si dovede p°edstavit, kolik sil stojφ vypln∞nφ vÜech dotaznφk∙ zaΦßtkem a koncem ka₧dΘho Ükolnφho roku studenta i pracovnice studijnφho odd∞lenφ.
Realizace takovΘho systΘmu by ovÜem znamenala prßci n∞kolika profesionßl∙, d∙kladnou anal²zu souΦasnΘho stavu, anal²zu nutn²ch zm∞n, sestavenφ testovacφ verze, nßkup hardware, instalace, zaÜkolovßnφ u₧ivatel∙ a postupnΘ nasazenφ. Takov²to systΘm by samoz°ejm∞ vy₧adoval zabezpeΦenφ velmi vysokΘ ·rovn∞ za pomoci certifikaΦnφch autorit a elektronickΘho podpisu, proto₧e mo₧nost, ₧e lze zφskat vysokoÜkolsk² diplom pomocφ PC a modemu za pßr hodin prßce by vytvo°ila spoustu "Φestn²ch" univerzitnφch titul∙ spoust∞ neΦestn²m kutil∙m.
P°i anal²ze problΘmu, jem se nechal inspirovat zkuÜebnφmi zprßvami, tak jak jsou pou₧φvßny v papφrovΘ podob∞. ZkuÜebnφ zprßva obsahuje informace o kurzu, ke kterΘmu se vztahuje, jmΘno uΦitele (garanta kurzu), informace o semestru a roce n∞kdy sice uvedena nenφ, ale v systΘmu musφ b²t zaΦlen∞na. Dßle zkuÜebnφ zprßva obsahuje seznam zapsan²ch student∙, bodovΘ hodnocenφ z pr∙b∞hu semestru a bodovΘ hodnocenφ z prvnφho a druhΘho termφnu zkouÜky.
Cht∞l jsem systΘm koncipovat, tak aby jej mohli vyu₧φvat takΘ studenti, kte°φ zde mohou najφt informace o svΘm bodovΘm hodnocenφ. Student mß tedy p°φstup ke zkuÜebnφ zprßv∞ pouze pro Φtenφ.
P°esto₧e v zadßnφ mßm navr₧eno rozd∞lenφ systΘmu na u₧ivatelskou a administrßtorskou Φßst, kde u₧ivatelskß Φßst mß pracovat v okn∞ WWW prohlφ₧eΦe a administrßtorskß pomocφ technologie Desktop Deployment nebo Client/Server dle mΘho uvß₧enφ, necht∞l jsem kombinovat n∞kolik technologiφ souΦasn∞, proto₧e tento postup p°inßÜφ komplikace jak pro v²vojß°e i u₧ivatelΘ. V zadßnφ se hovo°φ pouze o Φßsti pro vypl≥ovßnφ zkuÜebnφch zprßv, ale proto₧e toto °eÜenφ p°edpoklßdß napojenφ na modul, kter² nebyl k dispozici, rozhodl jsem se doplnit rozsah zadßnφ o zaklßdßnφ zßznam∙ u₧ivatel∙, kurz∙ a zapisovßnφ student∙ do jednotliv²ch kurz∙.
P°φstupovß prßva jsem se rozhodl °eÜit ve t°ech ·rovnφch. Definoval jsem p°φstupovß prßva typu student, uΦitel a sprßvce. Proto₧e p°edpoklßdßm vyu₧itφ systΘmu vÜemi typy u₧ivatel∙, vypl²vß z toho nutnost pou₧itφ jednotnΘho p°ihlaÜovacφho mechanismu. Proto jsem se rozhodl implementovat jednu tabulku Osob, kterß bude obsahovat spoleΦnΘ ·daje sprßvc∙, uΦitel∙ i student∙ jako jsou jmΘno, p°φjmenφ, p°ihlaÜovacφ jmΘno a heslo. V budoucnosti by k tΘto tabulce m∞ly b²t p°ivßzßny pod°φzenΘ tabulky obsahujφcφ detailn∞jÜφ a specifickΘ informace. Tabulka kurz∙ obsahuje zkratku kurzu, cel² nßzev, zp∙sob zakonΦenφ (zkouÜka, zßpoΦet) a vyuΦujφcφho, kter² je urΦen relaΦnφm vztahem 1:1 z tabulky kurz∙ do tabulky osob. SystΘm zast°eÜuje tabulka hodnocenφ, kterß definuje vazby N:M mezi kurzy a do nich zapsan²mi studenty. Tato tabulka takΘ obsahuje bodovΘ hodnocenφ jednotliv²ch student∙.
Pravidla platφcφ pro vÜechny u₧ivatele bez rozdφlu p°φstupov²ch prßv :
Pravidla t²kajφcφ se sprßvce
Pravidla t²kajφcφ se uΦitele
UΦitel jako jedin² m∙₧e vypl≥ovat zßznamy v tabulce hodnocenφ
Pravidla t²kajφcφ se studenta
Pro realizaci jsem se rozhodl vyu₧φt podporu rßm∙. Rßmy dnes podporuje
v∞tÜina prohlφ₧eΦ∙. Tato technologie dovoluje zobrazit n∞kolik strßnek souΦasn∞ v jednom okn∞ prohlφ₧eΦe a dynamicky m∞nit jen ty Φßsti dokumentu, kterΘ zm∞nu vy₧adujφ, co₧ znaΦn∞ sni₧uje nßroky na objem p°enesen²ch dat.
┌vodnφ strßnka vypadß nßsledovn∞ :
Po p°ihlßÜenφ mß u₧ivatel mo₧nost pracovat se zßznamy nad t°emi zßkladnφmi tabulkami: osoby, kurzy a hodnocenφ. V tabulkßch osoby a kurzy lze zaklßdat a m∞nit zßznamy. Proto₧e tyto tabulky mohou obsahovat velkΘ mno₧stvφ zßznam∙, je zde implementovßn ·Φinn² zp∙sob filtrace zßznam∙.
U₧ivatel mß mo₧nost filtrovat zßznamy podle vÜech polφ. Filtr pracuje tak, ₧e textov²m polo₧kßm vyhovujφ zßznamy, kterΘ kdekoliv v danΘ polo₧ce obsahujφ hledan² °et∞zec. P°itom se nerozliÜujφ velkß a malß pφsmena. Lze zadat omezenφ ve vφce polo₧kßch souΦasn∞. V²raz pro v²b∞rovou podmφnku je pak dost komplikovan². Jako p°φklad uvßdφm tento v²raz pou₧it² v programu osob :
Zßkladnφ strßnka pro prßci s tabulkou osob vypadß nßsledovn∞ :
Na formulß°i je p∞t tlaΦφtek, kterΘ provßd∞jφ operace nad celou tabulkou. TlaΦφtko "Zobraz dle v²b∞ru" provede zobrazenφ zßznam∙, kterΘ vyhovujφ nastavenΘ podmφnce. "Vyma₧ formulß°" nastavφ hodnoty polφ na v²chozφ a po stisku "Zobraz dle v²b∞ru" se zobrazφ vÜechny zßznamy bez omezenφ. Jejich poΦet vÜak z∙stßvß omezen hodnotou "Zobraz maximßln∞". T°φd∞nφ je abecednφ podle p°φjmenφ a jmΘna. TlaΦφtko "Zalo₧ nov² zßznam" p°esune u₧ivatele na strßnku, kde lze zalo₧it novΘho studenta, uΦitele nebo sprßvce. Pokud je zalo₧en student, m∙₧e b²t nßsledn∞ zapsßn do ji₧ definovan²ch kurz∙ podle roku a semestru. Tato strßnka je shodnß se strßnkou, kterß slou₧φ ke zm∞n∞ zßznamu. V re₧imu zm∞ny stßvajφcφho zßznamu je zamezeno m∞nit typ osoby. Re₧im zm∞ny se vyvolßvß tlaΦφtkem ve sloupci Zm∞≥ z tabulky vybran²ch zßznam∙. TlaΦφtko "Vyma₧ vybranΘ zßznamy" provede odstran∞nφ vÜech zßznam∙, kterΘ odpovφdajφ nastavenΘ podmφnce. Zde musφ b²t u₧ivatel opatrn², proto₧e vybranΘ zßznamy nemusφ b²t nutn∞ zobrazenΘ zßznamy. P°ed touto operacφ je zobrazen potvrzujφcφ dialog. TlaΦφtkem "Vytvo° tiskovou sestavu" m∙₧e u₧ivatel p°epnout zobrazenφ do formßtu vhodnΘho pro tisk. Je pou₧it pouze jeden rßm, pozadφ je bφlΘ a text Φern².
Formulß° pro zm∞nu zßznamu :
Podobn²m zp∙sobem je °eÜena obsluha tabulky kurz∙. Jedinß zajφmavost je v pou₧itφ tzv. combo boxu pro v²b∞r uΦitele. Polo₧ky v tomto boxu jsou t°φd∞ny abecedn∞ podle p°φjmenφ. P°edpoklßdß se sice, ₧e uΦitel∙ m∙₧e b²t vφce ne₧ 100, ale vzhledem k pou₧itΘmu t°φd∞nφ a automatickΘmu vyhledßvßnφ polo₧ek v combo boxu podle prvnφho stisknutΘho pφsmene je tento postup ·nosn².
P°i tvorb∞ programu jsem se pokouÜel o kompaktnφ °eÜenφ. Sna₧il jsem se sdru₧ovat ·lohy, kterΘ provßd∞jφ operace nad jednou tabulkou do jednoho programu. Mimo to jsem vytvo°il programy, kterΘ jsou vyu₧φvßny univerzßln∞ vÜemi hlavnφmi programy. Jednß se hlavn∞ o program pro ov∞°ovßnφ u₧ivatelskΘho jmΘna a hesla, kter² je vyvolßn p°ed ka₧dou operacφ, aby bylo zamezeno neoprßvn∞nΘmu p°φstupu. Mezi hlavnφ programy pat°φ program Login, kter² hlφdß p°ihlaÜovßnφ do systΘmu, program Osoba, kter² zprost°edkovßvß operace nad tabulkou osob, obdobn∞ program kurz a programy pro vypl≥ovßnφ hodnocenφ.
Struktura program∙
Login
Program Login zabezpeΦuje zobrazenφ formulß°e ve vrchnφ Φßsti obrazovky, slou₧φcφho pro p°ihlaÜovßnφ u₧ivatele. Tento program spolupracuje s programem pro ov∞°enφ p°φstupovΘho prßva u₧ivatele. Do vygenerovanΘ strßnky je zaΦlen∞n k≤d javascriptu, kter² za°izuje obnovenφ dvou rßm∙ souΦasn∞, co₧ standardnφmi prost°edky nelze v Magicu dosßhnout.
Osoba
Program osoba provßdφ akce s tabulkou osoba, jako je v²pis zßznam∙, p°idßvßnφ zßznam∙ jejich zm∞na a mazßnφ. P°i uklßdßnφ zßznamu se kontroluje zda-li se v tabulce nevyskytujφ dva zßznamy se stejn²m p°ihlaÜovacφm jmΘnem. Pokud ano nenφ zßznam ulo₧en a je vrßcen u₧ivateli k oprav∞.
Kurz
Program kurz je velmi podobn² programu osoba, ale je komplikovan∞jÜφ. P°i zaklßdßnφ kurzu je t°eba nejprve sestavit seznam uΦitel∙, ze kter²ch u₧ivatel vybφrß uΦitele danΘho kurzu. Zp∞t je p°edßno pouze jmΘno uΦitele, podle kterΘho je pot°eba vyhledat jeho identifikaΦnφ klφΦ, kter²m je v tabulce registrovßn. P°i mazßnφ kurzu je provßd∞na kontrola, jestli nejsou v kurzu zapsßni studenti, pokud ano kurz nenφ smazßn.
Hodnocenφ
Program hodnocenφ zobrazuje strßnku se t°emi rßmy a zajiÜ¥uje v²b∞r kurzu a konkrΘtnφho studenta, kter² mß b²t ohodnocen. Tento program vybφrß informace ze vÜech tabulek aby jej nßsledn∞ zobrazil v jednotliv²ch rßmech. Dßle generuje sestavu ve formßtu vhodnΘm pro tisk.
V tΘto kapitole budou popsßny postupu, jak ud∞lat klientskou Φßst interaktivn∞jÜφ zp∙soby, kterΘ nelze p°φmo v Magicu aplikovat, proto₧e na to nenφ p°ipraven. Tyto triky jsou velice u₧iteΦnΘ a zabraly mi spoustu ·silφ. Z tohoto d∙vodu je zde chci popsat, aby je mohli pou₧φt ostatnφ v²vojß°i Magicovsk²ch aplikacφ.
Z d∙vodu v∞tÜφ p°ehlednosti je v²hodnΘ odd∞lit javascript od samotnΘho k≤du strßnky. Soubor s javascriptem je u klienta ulo₧en v pam∞ti cache a nenφ jej pot°eba stahovat s ka₧dou strßnkou. Pak u₧ je akorßt pot°eba zajistit, aby tento soubor byl p°ipojen ke strßnce. Jß jsem vytvo°il v ka₧dΘm programu, kter² vytvß°φ HTML strßnky formulß°, s ovlßdacφm prvkem typu text s hodnotou:
<SCRIPT SRC="javascript/login.js"></SCRIPT>
Tento formulß° pak staΦφ spustit na zaΦßtku vykonßvanΘho programu. Pokud chceme, aby se strßnka zobrazovala s definovan²m pozadφm, musφ b²t definovßno v tomto formulß°i, p°esn∞ji °eΦeno v prvnφm spuÜt∞nΘm.
Podobn²m zp∙sobem, jak²m byl do strßnky vlo₧en javascript lze vlo₧it do stßnky jak²koli HTML k≤d vΦetn∞ urΦenφ pozice, na kterΘ se mß vyskytovat. Nep°φjemnostφ je vÜak automatickΘ vklßdßnφ znaΦky <BR> na konec °ßdku. Je zde sice mo₧nost polφΦka text vklßdat za sebe na jeden °ßdek, potom se formulß° znaΦn∞ rozÜi°uje. Nelze ani omezit velikost textov²ch polφ. Velikost pole je dßna dΘlkou obsa₧enΘho textu. Pokud je formulß° p°φliÜ Üirok², Magic se zhroutφ. V mΘ prßci jsem pou₧il tento postup na vlo₧enφ tlaΦφtka <input type="button">, kterΘ samo o sob∞ neprovßdφ ₧ßdnou akci a tuto je pot°eba definovat ovladaΦem onClick. Vlo₧enΘ pole pak mß tvar :
<INPUT type="button" name="" value="Vyma₧ formulß°" onclick="kurzclearform()" style="margin-top:0pt; font-size: 8pt; width: 80pt; font-weight: bold;">
Je pot°eba zajistit, aby byla definovßna funkce kurzclearform() v p°ipojenΘm souboru s javascriptem.
OvladaΦ onLoad slou₧φ v definovßnφ funkce, kterß se provede po nahrßnφ strßnky do prohlφ₧eΦe. Do sekce <BODY> lze zasahovat v Magicu pouze jedin²m zp∙sobem. Formulß° v Magicu mß definovanou vlastnost HTML int. attribute. K tomuto atributu lze p°i°adit zßznam z tabulky styl∙, kterß je p°φstupnß volbou Settings|Html styles. Zßznam z tΘto tabulky je vΦlen∞n do sekce <BODY>. V tabulce styl∙ tedy staΦφ vytvo°it zßznam s touto hodnotou :
onLoad="loginonload()"
a p°i°adit jej k HTML int. attribute formulß°e. Pokud je strßnka tvo°ena vφce formulß°i, musφ b²t toto p°i°azenφ provedeno u prvnφho vyvolanΘho formulß°e.
Parametry jsou z klientskΘho poΦφtaΦe p°edßvßny Magicu pomocφ t°ech p°eddefinovan²ch ovlßdacφch prvk∙ typu hidden. Definice hlaviΦky formulß°e vypadß nßsledovn∞ :
<FORM action="/scripts/mgrqispi.dll" method="POST">
<INPUT type="hidden" name="APPNAME" value="xxedu">
<INPUT type="hidden" name="PRGNAME" value="login">
<INPUT type="hidden" name="ARGUMENTS" value="Login,heslo">
Prom∞nnß APPNAME obsahuje jmΘno vzdßlenΘ aplikace a PRGNAME je jmΘno programu zpracovßvajφcφho po₧adavek. Zajφmavß je prom∞nnß ARGUMENTS, ve kterΘ jsou obsa₧eny hodnoty parametr∙ p°edßvan²ch Magicu. Argumenty tvo°φ seznam hodnot. P°i p°edßnφ zßle₧φ na po°adφ v jakΘm jsou parametry p°edßny. Pokud hodnota parametru zaΦφnß znamΘnkem - (minus), jednß se o konstantu, pokud ne, je hodnota tohoto parametru p°ed odeslßnφm nahrazena hodnotou ovlßdacφho prvku, kter² je specifikovßn p∙vodnφ hodnou parametru. ╚asto je vhodnΘ tyto parametry nastavit na stran∞ klienta. Pro tento jsem napsal dv∞ funkce, jedna slou₧φ k p°eΦtenφ argumentu a druhß k jeho zßpisu :
function dejmiargument(pozice)
{ var pole,argument;
pole=new Array();
pole=this.document.forms[0].elements["ARGUMENTS"].value.split(",");
return pole[pozice-1];
}
function nastavargument(pozice,hodnota)
{ var pole,argument;
pole=new Array();
pole=this.document.forms[0].elements["ARGUMENTS"].value.split(",");
pole[pozice-1]=hodnota;
argument=pole.join(",");
this.document.forms[0].elements["ARGUMENTS"].value=argument;
}
Zde jsou pou₧ity funkce javascriptu split a join. Prvnφ funkce rozd∞lφ °et∞zec na Φßsti podle zadanΘho odd∞lovaΦe a vlo₧φ je do pole, tak₧e k nim pak m∙₧eme p°istupovat pomocφ indexu. Druhß funkce pracuje inverzn∞, tak₧e z pole vytvo°φ °et∞zec.
P°i nastavovßnφ argumentu je pot°eba uvΘst jeho typ uvedenφm kombinace "-A" pro °et∞zcovou konstantu a "-N" pro Φφslo p°ed vlastnφm argumentem. Pou₧itφ ve uvedeno v nßsledujφcφm p°φklad∞.
function kurzvymazzaznamy()
{ if (confirm("Opravdu ?"))
{ nastavargument(3,"-Asmaz");
nastavargument(4,"-N0");
this.document.forms[0].submit(); //odeÜle formulß°
}
}
Zakßzßnφ vstupnφho pole je u₧iteΦnΘ, pokud chceme nap°φklad pou₧φt jeden formulß° pro upravenφ i zalo₧enφ zßznamu. N∞kdy je pot°eba omezit p°φstup do n∞kter²ch vstupnφch polφ, ale je vhodnΘ aby pole bylo zobrazeno stejn∞ jako, kdy₧ je p°φstupnΘ. K tomu m∙₧eme pou₧φt vlastnost objektu element.disabled, kterß dan² prvek znep°φstupnφ. Pokud je pot°eba znep°φstupn∞nφ provΘst ihned po zobrazenφ strßnky, je nutno k≤d vlo₧it do funkce definovanΘ v ovladaΦi onLoad. ProblΘm nastßvß p°i odesφlßnφ formulß°e, proto₧e hodnota zakßzanΘho prvku nenφ p°edßvßna. Pokud po₧adujeme, aby byla hodnota p°edßna, je nutnΘ ji doplnit jako konstantu do °et∞zce argument∙. Nßsledujφcφ p°φklad je pou₧it pro zakazovßnφ pole zkratka kurzu.
function kurzonload()
{ //alert(this.document.forms[0]);
if (this.document.forms[0]!=null)
{if (typeof(this.document.forms[0].elements["ARGUMENTS"])=="object")
{
if (dejmiargument(3)=="-Azaloz") //jsem v editaci zaznamu
//alert(dejmiargument(4));
{ if (this.document.forms[0].elements["zkratka"].type=="text")
{ if (dejmiargument(4)=="-N0")
{ // zalozen novy zaznam
this.document.forms[0].elements["zkratka"].disabled=false;
}
else
{ // zmena stavajiciho zaznamu
this.document.forms[0].elements["zkratka"].disabled=true;
}
}
}
}
}
}
Vtvo°it vlastnφ Java applet lze pomocφ n∞kterΘho z v²vojov²ch prost°edφ, kterΘ jsou b∞₧n∞ dostupnΘ. JedinΘ co zb²vß vy°eÜit, je komunikace appletu a Magicu. Magic nemß ₧ßdnΘ univerzßlnφ komunikaΦnφ rozhranφ, kterΘ bychom mohli vyu₧φt. Proto je pot°eba, aby applet vytvß°el stejnΘ dotazy jako okno prohlφ₧eΦe a Magic tak oklamal. Parametry lze p°edßvat dv∞ma zp∙soby. Metodou GET a POST. Rozdφl mezi t∞mito metodami byl ji₧ popsßn. Nßsledujφcφ p°φklad pou₧φvß metodu GET. Metodu POST lze takΘ aplikovat, ale postup vytvß°enφ spojenφ je odliÜn². Lze takΘ vytvo°it SSL ÜifrovanΘ spojenφ.
Cel² k≤d Java appletu realizujφcφ spojenφ mezi appletem a Magicem:
package magic;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.net.*;
import java.io.*;
import javax.swing.*;
class URLReader{
public static void URLget(TextArea OutputTextArea) throws Exception {
URL yahoo = new URL("http://147.229.187.18/scripts/mgrqispi.dll?appname=
xxedu&prgname=osoba1");
DataInputStream in = new DataInputStream(yahoo.openStream());
OutputTextArea.setText(OutputTextArea.getText()+(char)10+"pokus");
String inputLine;
while ((inputLine = in.readLine()) != null)
OutputTextArea.setText(OutputTextArea.getText()+(char)10+inputLine);
in.close();
}
}
public class Applet2 extends Applet {
boolean isStandalone = false;
TextArea textArea1 = new TextArea();
Button button1 = new Button();
URLReader reader= new URLReader();
//Get a parameter value
public String getParameter(String key, String def) {
return isStandalone ? System.getProperty(key, def) :
(getParameter(key) != null ? getParameter(key) : def);
}
//Construct the applet
public Applet2() {
}
//Initialize the applet
public void init() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
//Component initialization
private void jbInit() throws Exception {
textArea1.setBounds(new Rectangle(7, 7, 355, 228));
textArea1.setText("nic");
this.setLayout(null);
button1.setBounds(new Rectangle(12, 256, 55, 23));
button1.setLabel("button1");
button1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(MouseEvent e) {
button1_mouseClicked(e);
}
});
this.add(textArea1, null);
this.add(button1, null);
}
//Get Applet information
public String getAppletInfo() {
return "Applet Information";
}
//Get parameter info
public String[][] getParameterInfo() {
return null;
}
void button1_mouseClicked(MouseEvent e) {
try { this.reader.URLget(textArea1);
textArea1.append("konec");
}
catch(Exception ee) {
textArea1.setText(ee.getMessage());
}
} }
Applet pak vypadß nßsledovn∞ :
BezpeΦnost je v tomto programu °eÜena pou₧itφm kombinace p°ihlaÜovacφ jmΘno a heslo. Proto₧e se p°edpoklßdß nasazenφ serverovΘ Φßsti na stroji s omezen²m p°φstupem, je heslo v tabulce osob ulo₧eno v textovΘ podob∞. Serverovß Φßst aplikace bude nainstalovßna na systΘmu Windows NT se zapnutou SSL ochranou pro HTTP p°enosy.
P°i studiu zp∙sobu zabezpeΦenφ internetov²ch aplikacφ, jsem se setkal prakticky s dv∞mi metodami. JednoduÜÜφ metoda p°edßvß u₧ivatelskΘ jmΘno spolu s heslem p°i ka₧dΘ operaci. Tato metoda je bez pou₧itφ SSL Üifrovßnφ velmi nebezpeΦnß. Na druhΘ stran∞ s pou₧itφm SSL je dosa₧eno vysokΘ mφry bezpeΦnosti.
Druhß metoda pou₧φvß generovßnφ dlouh²ch nßhodn²ch Φφsel pro identifikaci u₧ivatele. U₧ivatel se nejprve p°ihlßsφ sv²m jmΘnem a heslem. PotΘ server vygeneruje nßhodn² klφΦ, kter² je na serveru zapamatovßn a je pou₧it pro identifikaci u₧ivatele. BezpeΦnost se zvyÜuje teprve stanovenφm ΦasovΘ platnosti tohoto klφΦe. Pokud tedy ·toΦnφk nepronikne do systΘmu d°φve ne₧ vyprÜφ platnost tohoto klφΦe, je u₧ivatel automaticky odhlßÜen a p°ihlßsit se lze pouze pomocφ hesla. V²hoda je v tom, ₧e heslo putuje sφtφ pouze jednou. Proto je mo₧nΘ pou₧φt tuto metodu i bez SSL Üifrovßnφ.
Proto₧e mß diplomovß prßce °eÜφ jen malou Φßst z komplexnφho informaΦnφho systΘmu, bude pot°eba °eÜit p°ihlaÜovanφ na obecnΘ ·rovni. Byl zde vznesen po₧adavek synchronizace hesel se systΘmem Novell.
Z v²Üe uveden²ch d∙vod∙ jsem zvolil jednoduÜÜφ model zabezpeΦenφ, kde se k≤d u₧ivatele p°edßvß spolu jeho heslem p°i ka₧dΘ operaci. AΦkoli se tento postup nemusφ zdßl p°φliÜ bezpeΦn², jeho slabina spoΦφvß pouze v okam₧iku, kdy je u₧ivatel p°ihlßÜen a vzdßlφ se od poΦφtaΦe. Pak m∙₧e cizφ osoba odeΦφst u₧ivatelskΘ heslo, ovÜem pouze za p°edpokladu, ₧e dob°e znß zp∙sob p°edßvßnφ parametr∙.
V tΘto prßci jsem se sna₧il shrnout a rozebrat problematiku internetov²ch informaΦnφch systΘm∙, zßkladnφ principy p°enos∙ dat, nejpou₧φvan∞jÜφ programovacφ techniky, hypertextovΘ jazyky, prost°edφ prohlφ₧eΦ∙ a WWW server∙. V²sledkem tΘto prßce je mal² informaΦnφ systΘm, kter² je funkΦnφ a spl≥uje zadßnφ tΘto prßce. P°esto nebyl vytvß°en se zßm∞rem jeho nasazenφ ve stavu v jakΘm byl vytvo°en. Pro praktickΘ nasazenφ takovΘho systΘmu, by bylo nutno daleko p°esn∞ji specifikovat zadßnφ, provΘst anal²zu na podstatn∞ obecn∞jÜφ ·rovni, tak aby bylo umo₧n∞no zaΦlen∞nφ do ostatnφch Φßstφ celofakultnφho systΘmu. Myslφm si ₧e takov²to projekt nelze ·sp∞Ün∞ realizovat v rßmci jednΘ nebi n∞kolika samostatn²ch diplomov²ch pracφ, proto₧e je pot°eba, aby vedenφm projektu byl pov∞°en odbornφk, kter² nejenom, ₧e ovlßdß v²voj internetov²ch aplikacφ, ale souΦasn∞ velmi dob°e znß strukturu organizace (Ükoly), informaΦnφ toky, funkce, prßva a povinnosti stßvajφcφch i potencionßlnφch u₧ivatel∙, studijnφ °ßd a sm∞r jeho v²voje, kreditnφ systΘm a pod. Potom je pot°eba informaΦnφ systΘm rozΦlenit na moduly, kterΘ se dajφ zcela p°esn∞ specifikovat a vytvo°it standardnφ rozhranφ pomocφ n∞ho₧ budou moduly komunikovat. Takov²to modul pak m∙₧e b²t zpracovßn v rßmci jednΘ diplomovΘ prßce, ale je neustßle pot°eba t²mov∞ pracovat s ostatnφmi °eÜiteli. Ti jsou na sob∞ zßvislφ, proto₧e prßce jednoho stßle bude zßviset na v²sledcφch prßce jinΘho diplomanta.
P°esto, ₧e si nemyslφm, ₧e systΘm bude v praxi nasazen, aΦkoliv tomu nic nebrßnφ, nenφ hodnota tΘto prßce nikterak snφ₧ena. Pominu-li obrovsk² p°φnos pro m∞, dφky nabyt²m znalostem z oblasti nejmodern∞jÜφch informaΦnφch technologiφ, je v tΘto prßci detailn∞ popsßn postup v²voje internetovΘho informaΦnφho systΘmu na danΘ hardwarovΘ i softwarovΘ platform∞, kter² m∙₧e b²t velk²m p°φnosem pro dalÜφ °eÜitele podobnΘho systΘmu, a¥ se ji₧ bude jednat o nap°φklad vypl≥ovßnφ formulß°∙ o uzav°enφ roΦnφk∙, elektronickou rezervaci uΦeben nebo podßvßnφ ₧ßdostφ o ubytovßnφ na kolejφch.
http://java.sun.com/
http://msdn.microsoft.com/workshop/
http://www.w3.org/
http://archiv.czech.net/index.html
http://www.kosek.cz/
http://dione.zcu.cz/java/sbornik/toc.html
http://java.tatousek.cz/index.asp
a dalÜφ