Dmitrij Leonov. Ispol'zovanie Perl v internet-tehnologiyah --------------------------------------------------------------- © Copyright Dmitrij Leonov Email: web@hackzone.ru WWW: http://www.hackzone.ru ¡ http://www.hackzone.ru Date: 09 Sep 2001 --------------------------------------------------------------- Teoreticheskaya chast' Vvedenie v internet/intranet-tehnologii Internet (internet) -- eto vsemirnoe ob®edinenie setej, shlyuzov, serverov i klientskih komp'yuterov, ispol'zuyushchee dlya svyazi edinyj nabor protokolov TCP/IP. Osnovnaya cherta Internet -- predostavlenie global'nogo dostupa k informacii i resursam. Informaciya, razmeshchennaya na internet-servere, stanovitsya dostupnoj iz lyuboj tochki zemnogo shara, podklyuchennoj k internet. Ispol'zovanie obshchih protokolov semejstva TCP/IP i edinogo adresnogo prostranstva pozvolyaet govorit' ob Internet kak o edinoj global'noj "metaseti". Naryadu s internet vydelyayut ponyatie intranet. Intranet -- eto lokal'naya set' predpriyatiya, osnovannaya na teh zhe protokolah, chto i internet. |ta tehnologiya pozvolyaet shiroko ispol'zovat' v ramkah seti predpriyatiya vse vozmozhnosti i narabotki global'noj seti, effektivno reshaya pri etom zadachu ogranicheniya dostupa k informacii. V to zhe vremya chast' intranet mozhet byt' otkryta dlya vneshnego dostupa, stanovyas' takim obrazom chast'yu Internet. Protokoly i adresaciya Pod protokolami v dannom kontekste ponimayutsya pravila, opredelyayushchie posledovatel'nost' dejstvij, neobhodimyh dlya obmena dannymi. Dlya dostavki informacii na kakoj-libo komp'yuter on dolzhen imet' unikal'nyj identifikator, ili adres. Rol' takogo identifikatora v tcp/ip igraet ip-adres uzla, predstavlyayushchij soboj 32-razryadnoe chislo, zapisyvaemoe tetradoj vida 216.122.167.55 (chetyre desyatichnyh chisla ot 0 do 255, razdelennye tochkami). S kazhdym ip-adresom svyazana 32-razryadnaya maska podseti, razbivayushchaya adres na dve chasti - na unikal'nyj identifikator seti, k kotoroj prinadlezhit komp'yuter, i na unikal'nyj identifikator uzla v predelah etoj seti. Maska eta imeet vid 255.255.255.0, i pri pobitnom umnozhenii nashego ip-adresa iz primera my poluchim set' 216.122.167 i uzel 55. Razbienie adresa na dve chasti obespechivaet bol'shuyu upravlyaemost' seti. Kompanii, imeyushchej park iz neskol'kih soten mashin, net neobhodimosti registrirovat' adres dlya kazhdoj iz nih - dostatochno zaregistrirovat' na sebya otdel'nuyu podset' i razdavat' adresa vnutri nee uzhe samostoyatel'no. Pri prostom podklyuchenii uzla k seti, on poluchaet unikal'nyj adres v predelah vsej Internet, chto daet vozmozhnost' obmenivat'sya informaciej s drugimi uzlami. Znanie adresa komp'yutera, podklyuchennogo k seti, daet vozmozhnost' vospol'zovat'sya servisami, na nem zapushchennymi - s lyubogo drugogo komp'yutera, podklyuchennogo k seti. Ris. 1. Shemy podklyucheniya k Internet Dostatochno chasto ispol'zuetsya shema otsecheniya lokal'noj seti ot "bol'shoj Internet", kogda komp'yutery lokal'noj seti ne poluchayut pryamogo dostupa k vneshnemu miru. V etom sluchae mezhdu lokal'noj set'yu i Internet stavitsya otdel'nyj server, dostupnyj kak iz vneshnej, tak i iz vnutrennej seti. Takoj server nosit nazvanie proksi-servera (proxy, posrednik). Vozmozhny razlichnye sposoby realizacii etoj shemy - na urovne otdel'nyh sluzhb, kak eto proishodit v sluchae tradicionnyh proksi, libo na urovne paketov tcp/ip, v sluchae ispol'zovaniya NAT, Network Address Translator, no ideya v oboih sluchayah odna i ta zhe: komp'yuter iz lokal'noj seti obrashchaetsya k proksi-serveru s pros'boj peredat' zapros nekotoromu vneshnemu serveru. Poluchiv otvet ot vneshnego servera, proksi perepravlyaet ee lokal'nomu komp'yuteru. Podobnaya shema imeet neskol'ko preimushchestv pered pryamym podklyucheniem k seti. Vo-pervyh, ekonomyatsya "nastoyashchie" ip-adresa, kotoryh cherez nekotoroe vremya prosto perestanet hvatat' (kak vyyasnilos', 32 razryada, vybrannye dlya predstavleniya ip-adresa -- eto vovse ne tak uzh i mnogo, i v nastoyashchee vremya gotovitsya k vnedreniyu novaya versiya ip-adresacii, ipv6). Vo-vtoryh, iz vneshnej seti mozhno poluchit' dostup tol'ko k promezhutochnomu serveru, chto povyshaet zashchishchennost' vsej seti. Nakonec, esli neskol'ko komp'yuterov po ocheredi obrashchayutsya k odnomu i tomu zhe resursu, proksi mozhet sohranit' rezul'tat pervogo obrashcheniya na svoem zhestkom diske i vydavat' ego v otvet na povtornye zaprosy. Domennaya sistema imen Ip-adresaciya pozvolyaet tochno identificirovat' komp'yutery, podklyuchennye k seti. Odnako, zapominat' adresa vida 216.122.167.55 ne slishkom udobno. Poetomu s samogo nachala razvitiya seti kazhdyj uzel pomimo cifrovogo ip imel eshche i simvol'noe imya. Sperva vse uzly byli perechisleny v odnom tekstovom fajle, no po mere rosta seti voznikla neobhodimost' v mehanizme, obespechivayushchem, vo-pervyh, unikal'nost' imen, vo-vtoryh, sredstva izveshcheniya vseh podklyuchennyh uzlov ob izmeneniyah. V nastoyashchee vremya sootvetstvie mezhdu cifrovymi i simvol'nymi adresami obespechivaetsya serverami imen (Domain Name Servers, DNS). Pod domenom ponimaetsya mnozhestvo mashin, kotorye administriruyutsya i podderzhivayutsya kak edinoe celoe. Vsya set' predstavlyaet soboj odnu bol'shuyu ierarhiyu domenov, pozvolyayushchuyu razgranichit' polnomochiya mezhdu administratorami raznyh setej. Ierarhiya domenov Internet rastet ot kornevogo (root) domena, ne imeyushchego imeni. Dalee idet ogranichennoe kolichestvo domenov verhnego urovnya, v kotoryh mozhet byt' zaregistrirovano prakticheski neogranichennoe kolichestvo domenov vtorogo urovnya i t.d. K domenam verhnego urovnya otnosyatsya domeny .com (prednaznachennyj dlya kommercheskih organizaciya), .edu (obrazovatel'nye uchrezhdeniya), .net (setevye provajdery, uzlovye komp'yutery), .org (organizacii, ne popadayushchie ni v odnu iz prochih kategorij), administrirovaniem kotoryh do nedavnego vremeni zanimalsya tol'ko InterNIC, .gov (iznachal'no prednaznachalsya dlya lyubyh gosudarstvennyh uchrezhdenij, pozdnee bylo prinyato reshenie o registracii v nem tol'ko federal'nyh pravitel'stvennyh uchrezhdenij SSHA, registriruyutsya US Federal Government civilian agency), .mil (voennye uchrezhdeniya SSHA, registriruyutsya US military agency), .int (mezhdunarodnye organizacii). V nastoyashchee vremya vedetsya rabota po vvedeniyu dopolnitel'nyh domenov verhnego urovnya. Krome togo, k domenam verhnego urovnya otnosyatsya nacional'nye domeny s dvuhbukvennymi imenami (naprimer, .ru, .de), administrirovaniem kotoryh zanimayutsya nacional'nye instituty. Porty i sluzhby Ip-adres pozvolyaet tochno identificirovat' komp'yuter, no etogo nedostatochno. Delo v tom, chto na kazhdom uzle mogut byt' zapushcheny samye raznye sluzhby Internet - obespechivayushchie peredachu elektronnoj pochty, fajlov, gipertekstovoj informacii i t.p. Kazhdaya sluzhba ispol'zuet v svoej rabote tot ili inoj protokol prikladnogo urovnya. Dlya peredachi fajlov - eto protokol FTP (File Transfer Protocol), peredachi web-stranic - protokol peredachi gipertekstovoj informacii HTTP(HyperText Transfer Protocol), dlya raboty s elektronnoj pochtoj - protokoly SMTP, POP3, IMAP i t.d. Dlya kazhdoj sluzhby otveden otdel'nyj port, predstavlyayushchij soboj chislo ot 0 do 65534. Dlya naibolee populyarnyh sluzhb zarezervirovany standartnye nomera portov. Tak, dlya FTP eto 21, dlya HTTP - 80, SMTP - 25, POP3 - 110. Vprochem, eto lish' znacheniya po umolchaniyu, nikto ne meshaet vladel'cu uzla nastroit' eti sluzhby na rabotu s drugimi portami. Inogda eto prosto neobhodimo - kak, naprimer, v sluchae s podderzhkoj razlichnyh kodirovok kirillicy v WWW. Kak izvestno, odni i te zhe simvoly kirillicy v razlichnyh operacionnyh sistemah oboznachayutsya raznymi kodami, i sushchestvuet po krajnej mere chetyre populyarnye kodirovki: Windows-1251, KOI8, Mac, DOS. Poskol'ku odna i ta zhe stranica mozhet byt' zagruzhena pol'zovatelyami razlichnyh sistem, pered ee razrabotchikom vstaet neprostaya zadacha -- kak sdelat' ee chitaemoj dlya vseh. Sushchestvuet tri podhoda k resheniyu etoj zadachi. Vo-pervyh, mozhno prosto proignorirovat' sushchestvovanie neskol'kih kodirovok i gotovit' stranicu v samoj populyarnoj, kakovoj na segodnya yavlyaetsya Win1251. Vo-vtoryh, gotovit' neskol'ko kopij stranic - vo vseh kodirovkah. Nedostatki etih podhodov ochevidny. Naibolee populyarnym na segodnyashnij den' yavlyaetsya reshenie, predusmatrivayushchee avtomaticheskuyu perekodirovku dokumenta na servere -- v zavisimosti ot togo, s kakim portom obshchaetsya klientskoe prilozhenie: naprimer, na 8080 -- Win1251, 8083 -- Koi8 i t.p. URL Unificirovannye ukazateli resursov (Uniform Resource Locator, URL) prednaznacheny dlya adresacii setevyh resursov - dokumentov, fajlov i t.p. V samom obshchem vide URL zapisyvaetsya sleduyushchim obrazom: [protokol]://[imya][:parol']@[adres][:port][/put'/][dokument][?dopolnitel'naya informaciya] Soderzhimoe kvadratnyh skobok yavlyaetsya neobyazatel'nym, lyubaya chast' URL mozhet byt' opushchena. Zdes' protokol - simvol'noe oboznachenie protokola, ispol'zuemogo dlya dostupa k resursu (naprimer, ftp, http); imya - imya pol'zovatelya; parol' - v sochetanii s imenem pol'zovatelya ispol'zuetsya pri rabote s resursami, dostup k kotorym ogranichen; adres - adres uzla, v domennoj ili cifrovoj forme; port - nomer porta, esli on otsutstvuet, ispol'zuetsya port po umolchaniyu dlya dannogo protokola; put' - put' na servere ot ego kornevogo kataloga, libo otnositel'no tekushchego kataloga; dokument - imya dokumenta; dopolnitel'naya informaciya - ispol'zuetsya pri rabote s servernymi prilozheniyami. Sredstva razrabotki web-prilozhenij Obmen informaciej v Internet osushchestvlyaetsya s pomoshch'yu protokolov prikladnogo urovnya, realizuyushchih tot ili inoj prikladnoj servis (peresylku fajlov, gipertekstovoj informacii, pochty i t.d.). Odnim iz naibolee molodyh i populyarnyh servisov Internet, razvitie kotorogo i privelo k vsplesku populyarnosti samoj Internet, stala World Wide Web (WWW), osnovannaya na protokole HTTP (Hyper Text Transfer Protocol -- protokol peredachi gipertekstovoj informacii). Gipertekstovye dokumenty, predstavlennye v WWW, imeyut odno principial'noe otlichie ot tradicionnyh gipertekstovyh dokumentov -- svyazi, v nih ispol'zuyushchiesya, ne ogranicheny odnim dokumentom, i bolee togo, ne ogranicheny odnim komp'yuterom. Dlya podgotovki gipertekstovyh dokumentov ispol'zuetsya yazyk HTML (Hyper Text Markup Language -- yazyk razmetki gipertekstovyh dokumentov), predostavlyayushchij shirokie vozmozhnosti po formatirovaniyu i strukturnoj razmetke dokumentov, organizacii svyazej mezhdu razlichnymi dokumentami, sredstva vklyucheniya graficheskoj i mul'timedijnoj informacii. HTML-dokumenty prosmatrivayutsya s pomoshch'yu special'noj programmy -- brouzera. Naibol'shee rasprostranenie v nastoyashchee vremya poluchili brouzery Navigator kompanii Netscape (NN) i Internet Explorer kompanii Microsoft (MSIE). Realizacii NN dostupny prakticheski dlya vseh sovremennyh programmnyh i apparatnyh platform, realizacii MSIE dostupny dlya vseh Windows platform, Macintosh i nekotoryh kommercheskih Unix-sistem. HTML-dokument sostoit iz teksta, predstavlyayushchego soboj soderzhanie dokumenta, i tegov, opredelyayushchih ego strukturu i vneshnij vid pri otobrazhenii brouzerom. Prostejshij html-dokument vyglyadit sleduyushchim obrazom: <html> <head> <title>Nazvanie</title> </head> <body> <p>Telo dokumenta </body> </html> Dannyj kod otobrazhaetsya v brouzere sleduyushchim obrazom: Ris. 2. Primer html-dokumenta Kak vidno iz primera, teg predstavlyaet soboj klyuchevoe slovo, zaklyuchennoe v uglovye skobki. Razlichayut odinarnye tegi, kak, naprimer, <p>, i parnye, kak <body> </body>, v poslednem sluchae dejstvie tega rasprostranyaetsya tol'ko na tekst mezhdu ego otkryvayushchej i zakryvayushchej skobkoj. Tegi takzhe mogut imet' parametry -- naprimer, pri opisanii stranicy mozhno zadat' cvet fona, cvet shrifta i t.d.: <body bgcolor="white" text="black">. Tekst vsego dokumenta zaklyuchaetsya v tegi <html>, sam dokument razbivaetsya na dve chasti -- zagolovok i telo. Zagolovok opisyvaetsya tegami <head>, v kotorye mogut byt' vklyucheny nazvanie dokumenta (s pomoshch'yu tegov <title>) i drugie parametry, ispol'zuyushchiesya brouzerom pri otobrazhenii dokumenta. Telo dokumenta zaklyucheno v tegi <body> i soderzhit sobstvenno informaciyu, kotoruyu vidit pol'zovatel'. Pri otsutstvii tegov formatirovaniya ves' tekst vyvoditsya v okno brouzera sploshnym potokom, perevody strok, probely i tabulyacii rassmatrivayutsya kak probel'nye simvoly, neskol'ko probel'nyh simvolov, idushchih podryad, zamenyayutsya na odin. Dlya formatirovaniya ispol'zuyutsya sleduyushchie osnovnye tegi: <p> -- nachalo novogo abzaca, mozhet imet' parametr, opredelyayushchij vyravnivanie: <p align=right>; <br> -- perevod stroki v predelah tekushchego abzaca; -- vydelenie teksta poluzhirnym shriftom; -- vydelenie teksta kursivom; <u></u> -- vydelenie teksta podcherkivaniem Ssylka na drugoj dokument ustanavlivaetsya s pomoshch'yu tega <a href="URL">...</a>, gde URL -- polnyj ili otnositel'nyj adres dokumenta. Pri etom tekst, zaklyuchennyj v teg <a>, obychno vydelyaetsya podcherkivaniem i cvetom, i posle shchelchka mysh'yu po etoj ssylke brouzer otkryvaet dokument, adres kotorogo ukazan v parametre href. Graficheskie izobrazheniya vstavlyayutsya v dokument s pomoshch'yu tega <img src="URL">. Sredstva razrabotki klientskih prilozhenij Ispol'zovanie prilozhenij dlya brouzerov pozvolyaet shiroko ispol'zovat' vse vozmozhnosti WWW, poskol'ku prilozhenie fakticheski stanovitsya sostavnoj chast'yu gipertekstovogo dokumenta. |to privodit k sushchestvennomu uproshcheniyu sistemy podderzhki -- klientskoe PO avtomaticheski obnovlyaetsya pri podklyuchenii k serveru, dokumentaciya i sistema pomoshchi legko realizuetsya s pomoshch'yu standartnyh sredstv HTML, a nekotorye uchebnye kursy, k primeru, mogut byt' realizovany prakticheski polnost'yu sredstvami HTML. Ris. 3. Shema vzaimodejstviya pol'zovatelya, servera i servernyh prilozhenij Pol'zovatel' vzaimodejstvuet s brouzerom (1), kotoryj zaprashivaet (2) i poluchaet (2) ot veb-servera stranicu s vklyuchennym prilozheniem. Posle etogo nachinaetsya vzaimodejstvie pol'zovatelya s prilozheniem (4), kotoroe pri neobhodimosti mozhet svyazat'sya s servernym prilozheniem (5,6) dlya vzaimodejstviya s SUBD i t.p. V to zhe vremya sredstv HTML nedostatochno dlya realizacii bolee-menee slozhnyh klientskih prilozhenij, chto privodit k neobhodimosti ispol'zovaniya dopolnitel'nyh sredstv, napisaniya vspomogatel'nyh programm. Mozhno vydelit' sleduyushchie osnovnye problem v razrabotke klientskih sredstv dlya WWW: Problema mnogoplatformennosti. Poskol'ku k WWW podklyucheny sistemy, osnovannye na razlichnyh apparatnyh i programmnyh platformah, voznikaet neobhodimost' razrabotki dlya kazhdoj platformy, kotoruyu predpolagaetsya podderzhivat', specializirovannoj versii PO. CHto privodit libo k ogranicheniyu podderzhivaemyh platform, libo k vozrastaniyu zatrat na razrabotku i podderzhku PO. Dlya korporativnyh zakrytyh sistem s odnorodnoj arhitekturoj apparatnyh i programmnyh sredstv apparatnoj eta problema menee aktual'na. Problema bezopasnosti. Sushchestvuet dve storony problemy -- vozmozhnye sboi v sisteme iz-za oshibok v programmnom obespechenii i celenapravlennye dejstviya programmnogo obespecheniya, napravlennye na narushenie funkcionirovaniya sistemy, kopirovanie konfidencial'noj informacii i t.d. Otsutstvie v tradicionnyh yazykah vstroennyh sredstv dlya vypolneniya naibolee chasto vstrechayushchihsya pri rabote s Web operacij -- vzaimodejstviya s udalennymi serverami, zagruzka fajlov, rabota s izobrazheniyami i t.d. Znachitel'nyj razmer ispolnyaemyh fajlov, generiruemyh tradicionnymi sredstvami razrabotki, chto zatrudnyaet ih peredachu po seti. Naibol'shuyu populyarnost' zavoevali sleduyushchie podhody k realizacii vspomogatel'nyh prilozhenij dlya klientskoj storony: Realizaciya podklyuchaemyh modulej (plug-ins) Netscape; Ispol'zovanie elementov ActiveX; Ispol'zovanie Java-prilozhenij; Sredstva podgotovki scenariev JavaScript, VBScript.; Macromedia Flash. Rassmotrim ih bolee podrobno. Ispol'zovanie podklyuchaemyh modulej poluchilo shirokoe rasprostranenie v svyazi s populyarnost'yu brouzera Netscape Navigator, predostavlyayushchim takuyu vozmozhnost'. V nastoyashchee vremya eto put' yavlyaetsya tupikovym, poskol'ku ne predostavlyaet adekvatnogo resheniya ni odnoj iz perechislennyh problem. K dostoinstvam ispol'zovaniya elementov ActiveX otnositsya realizaciya na osnove OLE/COM-tehnologii, chto pozvolyaet dostatochno legko perevesti v etu formu tradicionnoe PO, realizovannoe dlya Win32-platform. Sredi nedostatkov -- podderzhka v nastoyashchee vremya tol'ko Win32-platformy i podderzhka tol'ko brouzerom Internet Explorer, hotya dlya Netscape Navigator sushchestvuet plug-in, pozvolyayushchij ispol'zovat' elementy ActiveX. Razmer elementov ActiveX minimizirovan za schet ispol'zovaniya razdelyaemyh dinamicheskih bibliotek, postavlyaemyh vmeste s brouzerom Internet Explorer, kotorye takzhe predostavlyayut vse neobhodimye dlya setevogo vzaimodejstviya funkcii. Problema bezopasnosti reshaetsya s pomoshch'yu vvedeniya instituta sertifikatov -- pri zagruzke pol'zovatelyu pred®yavlyaetsya sertifikat proizvoditelya, zaverennyj nezavisimoj organizaciej (naprimer, VeriSign Inc.), posle chego on mozhet reshit', doveryat' ili net etomu komponentu. Zashchita ot sboev ne predusmotrena. Takim obrazom, problema bezopasnosti reshaetsya administrativnymi sredstvami. Dannaya tehnologiya naibolee prigodna dlya razrabotki korporativnyh prilozhenij dlya vnutrennego pol'zovaniya -- osobenno v sluchae sushchestvovaniya gotovyh narabotok v etoj oblasti. Osnovnym dostoinstvom Java-prilozhenij yavlyaetsya ih nezavisimost' ot klientskoj platformy. V otlichie ot tradicionnyh prilozhenij, transliruyushchihsya v ispolnyaemye kody processora, Java-prilozheniya transliruyutsya v tak nazyvaemyj bajt-kod, interpretiruemyj v dal'nejshem virtual'noj Java-mashinoj. Pri etom bajt-kod nezavisim ot platformy, na kotoroj on v dal'nejshem budet vypolnyat'sya -- dostatochno, chtoby dlya etoj platformy byla realizovana Java-mashina. Poskol'ku bol'shaya chast' osnovnyh funkcij realizovana na urovne virtual'noj Java-mashiny, eto privodit k sushchestvennomu umen'sheniyu razmerov bajt-koda. |to yavlyaetsya kak dostoinstvom, tak i nedostatkom Java-prilozhenij -- poskol'ku bajt-kod interpretiruyutsya virtual'noj mashinoj, proizvoditel'nost' Java-prilozhenij ustupaet proizvoditel'nosti tradicionnyh otkompilirovannyh programm. CHastichno s etim udaetsya borot'sya, primenyaya kompilyatory vremeni ispolneniya (JIT -- just in time compilers), osushchestvlyayushchie kompilyaciyu prilozheniya pri ego zagruzke v "rodnoj" dlya dannogo processora kod. Takzhe vozmozhen vyzov funkcij, realizovannyh na drugih yazykah programmirovaniya (takih kak S, S++) i otkompilirovannyh dlya dannoj platformy -- tak nazyvaemyj native code. |to primenyaetsya pri realizacii naibolee kritichnyh k vremeni ispolneniya fragmentov koda. Drugim dostoinstvom Java-prilozhenij yavlyaetsya ih zashchishchennost' -- kak s tochki zreniya programmirovaniya (iz yazyka isklyucheny sredstva, naibolee chasto privodyashchie k oshibkam pri programmirovanii -- takie kak ukazateli, peregruzka operatorov i t.d., yazyk yavlyaetsya strogo ob®ektno-orientirovannym, v nego vstroena "sborka musora" i t.d.), tak s tochki zreniya ispolneniya (znachitel'no ogranichena vozmozhnost' raboty s fajlami na lokal'nyh mashinah, s ustanovleniem setevyh soedinenij i t.d., programma vypolnyaetsya v otdel'nom adresnom prostranstve), chto pozvolyaet spokojno rabotat' s prilozheniyami, poluchennymi iz seti, ne opasayas' nalichiya v nih opasnogo koda. Takim obrazom, problema bezopasnosti polnost'yu reshena na urovne arhitektury. Vtoroj nedostatok -- neobhodimost' sushchestvovaniya dlya dannoj platformy virtual'noj Java-mashiny. Java-mashiny realizovany dlya vseh naibolee rasprostranennyh platform, no oni ostayutsya dostatochno resursoemkimi i zachastuyu dovol'no nestabil'nymi sistemami. Krome togo, ostayutsya problemy nesovmestimosti -- poskol'ku yazyk Java iznachal'no proektirovalsya dlya napisaniya mnogoplatformennyh prilozhenij, v nego preimushchestvenno vhodili elementy, dostupnye na vseh platformah, chto privelo k nekotoroj asketichnosti dostupnyh sredstv. Nekotorye razrabotchiki virtual'nyh mashin rasshiryali ih vozmozhnosti dlya konkretnoj platformy, chto mozhet privesti k tomu, chto Java-prilozhenie, ispol'zuyushchee vse eti vozmozhnosti, utratit sposobnost' zapuskat'sya na drugih platformah. Oshibki v realizacii virtual'noj mashiny mogut takzhe privesti k snizheniyu bezopasnosti sistemy, za poslednie neskol'ko let tomu bylo nemalo primerov. Sushchestvennym dostoinstvom Java yavlyaetsya ee ob®ektnaya orientirovannost'. Programma na Java predstavlyaet soboj nabor vzaimodejstvuyushchih mezhdu soboj klassov. S pomoshch'yu klassov osushchestvlyaetsya i dostup k osnovnym servisam virtual'noj mashiny. Standartnaya biblioteka klassov dostatochno obshirna i vklyuchaet v sebya klassy dlya raboty s setevymi protokolami -- kak na nizkom, tak i na prikladnom urovne, s grafikoj, graficheskim pol'zovatel'skim interfejsom, bazami dannyh, strokami i t.d. Perechislennye dostoinstva delayut Java-prilozheniya luchshim vyborom v geterogennyh sistemah, dlya kotoryh bezopasnost' imeet bol'shee znachenie chem vozmozhnye poteri v proizvoditel'nosti. JavaScript, VBScript i t.p. predstavlyayut soboj uproshchennye yazyki podgotovki scenariev, kod kotoryh vstraivaetsya neposredstvenno v html-fajl i vypolnyaetsya brouzerom. Oni neprigodny dlya realizacii ser'eznyh prilozhenij, v nih otsutstvuyut sredstva dlya raboty s fajlami, setevogo vzaimodejstviya i t.d. No oni shiroko ispol'zuyutsya vo vspomogatel'nyh celyah, v kachestve sredstva pervonachal'noj obrabotki rezul'tatov, dlya oformleniya, "ozhivleniya" html-dokumentov (t.naz. Dynamic HTML) i t.d. Macromedia Flash razrabatyvalos' kak sredstvo animacii, osnovannoe na vektornoj grafike, i v poslednee vremya prakticheski zanyalo tu nishu v web-dizajne, na kotoruyu eshche neskol'ko let nazad pretendovala Java. Imeet dostatochno ogranichennye vozmozhnosti po programmirovaniyu, no ves'ma shirokie -- po postroeniyu mul'timedijnyh prilozhenij v ramkah zadannoj modeli (reakciya na nazhatie knopok/dvizhenie myshi, animaciya, vektornaya grafika, sloi). Dlya raboty flash-prilozhenij neobhodimo nalichie sootvetstvuyushchego proigryvatelya, sushchestvuyushchego dlya bol'shinstva rasprostranennyh platform (v tom chisle, v vide ActiveX-modulya i Java-appleta). Sredstva razrabotki servernyh prilozhenij Klientskie prilozheniya, lishennye servernoj storony, prigodny dlya resheniya lish' ogranichennogo klassa zadach. Takie zadachi kak vzaimodejstvie s bazami dannyh, centralizovannaya obrabotka rezul'tatov i t.p. v bol'shej ili men'shej stepeni trebuyut nalichiya servernoj storony. SHirokie vozmozhnosti otkryvayutsya pri ispol'zovanii kombinirovannyh sistem s razvitym pol'zovatel'skim interfejsom, realizovannom sredstvami klientskoj storony, i moshchnoj servernoj podderzhkoj. V to zhe vremya opredelennyj interes predstavlyayut sistemy, osnovannye preimushchestvenno na servernyh resheniyah. V etom sluchae vse, chto trebuetsya ot klientskoj storony -- nalichie sredstv dlya raboty s WWW. Vzaimodejstvie s servernymi prilozheniyami osushchestvlyaetsya posredstvom dinamicheski formiruyushchihsya ekrannyh HTML-form. V yazyk HTML vklyucheny bazovye sredstva dlya vzaimodejstviya s pol'zovatelem -- knopki, polya vvoda, selektornye knopki, spiski. Oni gruppiruyutsya s pomoshch'yu tega <form>, v parametre action kotorogo ukazyvaetsya adres prilozheniya, obrabatyvayushchego rezul'taty formy. Parametr method opisyvaet metod peredachi dannyh na server -- GET ili POST. HTML-kod, opisyvayushchij formu s odnim voprosom i tremya predlagaemymi na vybor otvetami, vyglyadit sleduyushchim obrazom: <p align="center"> <form action="/cgi-bin/process.cgi" method="POST"> Vopros 1<br> <select name="answer" size="3"> <option value="answer1" selected>Otvet 1</option> <option value="answer2">Otvet 2</option> <option value="answer3">Otvet 3</option> </select><br><br> <input type="submit" value="Otvetit'"> </form> CHto privedet k otobrazheniyu v brouzere sleduyushchej stranicy: Ris. 4. Primer stranicy s formoj dlya vzaimodejstviya s pol'zovatelem Samyj rasprostranennyj teg, ispol'zuemyj v formah -- <input>. V ego parametre type ukazyvaetsya tip polya vvoda: submit/text/password/checkbox/radio/hidden, sootvetstvuyushchij knopkam, prostym tekstovym polyam vvoda, polyam vvoda parolya, selektornym knopkam, spryatannym polyam. V obyazatel'nom parametre name ukazyvaetsya imya polya vvoda, v pole value mozhno zadat' ego startovoe znachenie. Spiski i vypadayushchie spiski sozdayutsya s pomoshch'yu tegov <select></select>, opisyvayushchih harakteristiki vsego spiska, i tegov <option>, opisyvayushchih otdel'nye elementy spiskov. V kazhdoj forme dolzhna prisutstvovat' odna knopka Submit, pri nazhatii kotoroj formiruetsya http-zapros, vklyuchayushchij rezul'taty zapolneniya formy, i etot zapros napravlyaetsya na vhod prilozheniya, ukazannogo v parametre action. Pervym mehanizmom, obespechivayushchim vzaimodejstvie klienta s servernymi prilozheniyami, stal CGI (Common Gateway Interface, obshchij shlyuzovoj interfejs). V otvet na dejstviya pol'zovatelya, ispol'zuya CGI, Web-server vyzyvaet vneshnyuyu programmu (CGI-prilozhenie) i peredaet ej informaciyu, poluchennuyu ot klienta (naprimer, peredannuyu Web-brauzerom). Dalee CGI-prilozhenie obrabatyvaet poluchennuyu informaciyu, i rezul'taty ee raboty peredayutsya klientu. Rassmotrim eti etapy chut' podrobnee. Vzaimodejstvie mezhdu klientom i servernym prilozheniem osushchestvlyaetsya po sheme, predstavlennoj na ris.1. Ris. 1. Shema vzaimodejstviya brauzera, www-servera i cgi-prilozheniya Pol'zovatel' zapolnyaet ekrannuyu formu, opisannuyu v html-fajle s pomoshch'yu tega <form>, i nazhimaet na knopku "Submit". Vozmozhen takzhe zapros pri neposredstvennom ispol'zovanii adresa CGI-prilozheniya -- ukazyvaya ego v stroke Location brauzera, v tege <img> s pomoshch'yu sredstv vklyucheniya servera (SSI) i t. d. Na osnove informacii iz formy brauzer formiruet HTTP-zapros i otpravlyaet ego serveru. Informaciya privoditsya k vidu param1=value1&param2=value2...&paramN=valueN, gde parami -- imya sootvetstvuyushchego polya vvoda, valuei -- vvedennoe v nego znachenie. Vse simvoly, za isklyucheniem bukv latinskogo alfavita, cifr, simvola podcherkivaniya, defisa i tochki pri etom peredayutsya v zakodirovannom vide %XX, gde XX -- shestnadcaterichnoe predstavlenie dannogo simvola. Simvol probela mozhet byt' zamenen simvolom "+". Esli ukazano, chto pri peredache dolzhen ispol'zovat'sya metod GET, eta stroka peredaetsya neposredstvenno v URL (naprimer, <u>http://www.somehost.com/cgi-bin/script.cgi?param1=value1&param2=value2</u>). Pri ispol'zovanii metoda POST cherez zagolovok peredaetsya informaciya o tipe soderzhimogo zaprosa (dlya form eto, kak pravilo, application/x-www-form-urlencoded), a takzhe dlina stroki. Sama stroka v etom sluchae peredaetsya neposredstvenno v tele zaprosa (primery privedeny chut' nizhe). V zagolovkah zaprosa takzhe peredaetsya znachitel'noe kolichestvo vspomogatel'noj informacii: tip brauzera, adres stranicy, s kotoroj byl proizveden zapros, i t. d. Vsya eta informaciya peredaetsya v HTTP-zagolovkah, imeyushchih vid "Imya: znachenie". Otdelyayutsya drug ot druga zagolovki s pomoshch'yu simvola novoj stroki, zavershaetsya ih spisok eshche odnim simvolov novoj stroki. Server vyzyvaet CGI-prilozhenie, i v zavisimosti ot metoda zaprosa peredaet informaciyu iz formy cherez peremennuyu okruzheniya QUERY_STRING (v sluchae GET) libo cherez standartnyj vvod (v sluchae POST). Takzhe formiruyutsya drugie peremennye okruzheniya, takie kak HTTP_USER_AGENT, REMOTE_HOST i dr. Informaciya dlya 'njuj okruzheniya beretsya iz HTTP-zagolovkov. CGI-prilozhenie schityvaet stroku s peredannoj informaciej so standartnogo vvoda (stdin) ili iz peremennoj okruzheniya QUERY_STRING. Obrabotav informaciyu, programma, kak pravilo, libo pereadresuet brauzer na nekotoryj sushchestvuyushchij dokument s pomoshch'yu http-zagolovka Location, libo formiruet virtual'nyj dokument, posylaya informaciyu na standartnyj vyvod (stdout). Telu dokumenta predshestvuyut HTTP-zagolovki, opisyvayushchie tip vozvrashchaemyh dannyh, upravlyayushchie keshirovaniem, rabotoj s cookies i t. d. Vse eto peredaetsya serveru. Server peresylaet otvet CGI-prilozheniya brauzeru, dopolnyaya ih pri neobhodimosti kodom vozvrata i vspomogatel'nymi zagolovkami. Pri etom ispol'zuetsya odin iz dvuh sposobov -- perenapravlenie brouzera na novyj adres s pomoshch'yu http-zagolovka Location, libo formirovanie virtual'nogo dokumenta. V poslednem sluchae znachenie, peredannoe v zagolovke Content-type, ispol'zuetsya brouzerom dlya interpretacii idushchej sledom informacii -- naprimer, text/html dlya virtual'nyh html-dokumentov. Brauzer, osnovyvayas' na zagolovkah HTTP, interpretiruet otvet CGI-prilozheniya i vyvodit ego dlya prosmotra pol'zovatelem. Realizovat' CGI-prilozhenie mozhno na lyubom yazyke, sposobnom generirovat' kod dlya servernoj platformy ili dlya kotorogo dostupen interpretator. Tak, prostejshee CGI-prilozhenie mozhet byt' realizovano na yazyke paketnyh fajlov DOS, na Delphi, S/S++, Tcl, Visual Basic, AppleScript, FoxPro, Perl i t. d. Osnovnye nedostatki klassicheskogo CGI -- kazhdoe vzaimodejstvie klienta s serverom, vo-pervyh, yavlyaetsya nezavisimym ot predydushchih i posleduyushchih vzaimodejstvij, vo-vtoryh, privodit k zapusku na servere otdel'nogo processa. Pervyj nedostatok yavlyaetsya tyazhelym naslediem HTTP-protokola, ne imeyushchego garantirovanno rabotayushchih sredstv identifikacii klientov, i vse sushchestvuyushchie resheniya sposobny lish' slegka sgladit' etot nedostatok. Bor'ba so vtorym nedostatkom idet gorazdo uspeshnee, i vpolne priemlemye resheniya sushchestvuyut dlya obeih naibolee rasprostranennyh servernyh platform. Dlya serverov, osnovannyh na Unix-platformah, odnim iz samyh populyarnyh reshenij yavlyaetsya ispol'zovanie mod_perl -- modulya, integriruyushchego v web-server Apache interpretator yazyka Perl. |to pozvolyaet rezko umen'shit' nagruzku na server pri zapuske CGI-prilozhenij, napisannyh na Perl. I eto tol'ko verhnyaya chast' ajsberga -- mod_perl pozvolyaet razrabotchiku pisat' na Perl polnocennye podklyuchaemye moduli Apache, chto otkryvaet pered programmistom dovol'no shirokie vozmozhnosti. Drugim populyarnym resheniem yavlyaetsya PHP -- skriptovyj yazyk, vstraivaemyj neposredstvenno v telo html-stranicy. Pered tem, kak otoslat' html-dokument klientu, server prosmatrivaet ego na predmet nahozhdeniya v nem pary upravlyayushchih tegov PHP <? i ?>. Tekst, nahodyashchijsya vnutri etih skobok, rassmatrivaetsya kak kod PHP, peredaetsya na obrabotku interpretatoru, i klientu vozvrashchaetsya rezul'tat ego raboty. Sintaksis yazyka ochen' napominaet C, tak chto osvoit' ego ne predstavlyaet osobogo truda. Resheniya dlya Windows-platform napominayut svoih Unix-sobrat'ev. V Microsoft Internet Information Server (IIS) realizovana podderzhka tehnologij ISAPI i Active Server Pages (ASP). ISAPI-prilozheniya predstavlyayut soboj dinamicheskie biblioteki, zagruzhaemye v adresnoe prostranstvo servera. Pri vyzove prilozheniya ne proishodit zapusk novogo processa, za schet chego dostigaetsya rost effektivnosti i snizhenie nakladnyh rashodov. S drugoj storony, nekorrektno napisannoe ISAPI-prilozhenie mozhet stat' prichinoj otkaza ot raboty vsego web-servera (vprochem, nachinaya s IIS4 poyavilas' vozmozhnost' borot'sya s etim nedostatkom). Tehnologiya ASP analogichna PHP -- kak i tam, tekst, nahodyashchijsya vnutri upravlyayushchih tegov ASP (<% i %>), peredaetsya na obrabotku interpretatoru, realizovannomu, kstati, v vide ISAPI-prilozheniya. Programma, razmeshchennaya na aktivnoj stranice, mozhet byt' sostavlena na odnom iz yazykov podgotovki scenariev -- takim kak JavaScript ili VBScript, znakomym nam po dinamicheskomu HTML. Glavnoe otlichie ot ih ispol'zovaniya v dinamicheskom HTML -- na etot raz oni vypolnyayutsya serverom i imeyut gorazdo bol'shie vozmozhnosti po rabote s dannymi. Vozmozhno rasshirenie vozmozhnostej ASP, naprimer, dlya obmena informaciej s bazoj dannyh s pomoshch'yu sloya servernyh ActiveX-ob®ektov. Dal'nejshee razvitie eta tehnologiya poluchit v gotovyashchejsya k vypusku platforme .NET, odna iz treh osnovnyh sostavlyayushchih kotoryh tak i nazyvaetsya, Active Server Pages+, i vryad li budet predstavlyat' iz sebya chto-to principial'no novoe. Perechislennye chetyre tehnologii ne ischerpyvayut spisok sredstv dlya sozdaniya servernyh web-prilozhenij, prizvannyh spravit'sya s nedostatkami CGI -- pomimo nih sushchestvuyut takie tehnologii kak Java Servlets, FastCGI, ColdFusion i t.p. Odnako vse oni zatragivayut tol'ko odno zveno cepochki klient-server-servernoe prilozhenie -- a imenno sposob peredachi informacii ot servera k servernomu prilozheniyu i obratno. Principy postroeniya samih servernyh prilozhenij ochen' pohozhi, a vzaimodejstvie mezhdu klientom i serverom osushchestvlyaetsya po-prezhnemu s pomoshch'yu tega <form> i peredachi informacii, sobrannoj v odnu stroku. Vvedenie v Perl SHirokoe rasprostranenie v kachestve yazyka dlya CGI-prilozhenij poluchil Perl. Ego sintaksis unasledovan v pervuyu ochered' ot S, v nego dobavleny rasshirennye sredstva dlya raboty so strokami, regulyarnymi vyrazheniyami, associativnymi massivami i t. d. |to interpretiruemyj yazyk, iznachal'no sozdannyj dlya Unix-sistem, sejchas ego interpretatory dostupny dlya bol'shinstva populyarnyh arhitektur, chto delaet osobenno legkim perenos prilozhenij. Bylo by neverno govorit' o Perl, kak isklyuchitel'no o sredstve razrabotki CGI. Vstroennye v yazyk vozmozhnosti, velikolepnaya perenosimost', ogromnoe kolichestvo sushchestvuyushchih bibiliotek, dostupnyh iz Comprehensive Perl Archive Network (CPAN, <u>http://www.perl.com/CPAN/)</u>, delayut ego isklyuchitel'no udobnym sredstvom dlya sistemnogo administrirovaniya, setevogo programmirovaniya, obrabotki tekstov i t.p. Osnovy yazyka: skalyary, massivy, heshi, ssylki Perl-programma predstavlyaet soboj fajl, soderzhashchij nabor Perl-operatorov, i nachinayushchijsya so strochki vida #!/usr/bin/perl , ukazyvayushchej put' do interpretatora Perl. |to spravedlivo dlya Unix-sistem, trebuyushchih, krome togo, ustanovki bita ispolneniya v atributah dannogo fajla, dlya windows-realizacij podobnaya strochka neobyazatel'na, no zhelatel'na iz soobrazhenij perenosimosti (Apache/Win32, k primeru, ne smozhet zapustit' CGI-skript s nekorrektnym putem do interpretatora). Sintaksis yazyka ochen' pohozh na sintaksis C, no s neznachitel'nymi isklyucheniyami. Tochki vhoda v vide funkcii s predopredelennym imenem net, peremennye po umolchaniyu imeyut global'nuyu oblast' vidimosti i ne dolzhny byt' opisany pered ispol'zovaniem, chto pozvolyaet bystro "slepit'" rabotayushchuyu programmu, kotoruyu prakticheski nevozmozhno podderzhivat'. Tak chto horoshim resheniem vse zhe yavlyaetsya ispol'zovanie funkcij i opisanie peremennyh pered ispol'zovaniem, a zaodno i ispol'zovanie direktivy use strict, ne pozvolyayushchej programmistu zabyt' o podobnyh melochah. Parametry vstroennyh funkcij mogut zaklyuchat'sya v kruglye skobki, a mogut i ne zaklyuchat'sya, tak chto ih ispol'zovanie -- lish' vopros stilya, i sleduyushchie strochki ekvivalentny: print "Hello, World\n"; print ("Hello, World\n"); Kommentariem sluzhit simvol #, ego dejstvie rasprostranyaetsya do konca stroki. Mnogostrochnyh kommentariev net. Skalyarnye velichiny v Perl byvayut dvuh tipov -- chislovogo i strokovogo. Dlya vseh chisel ispol'zuetsya odno i to zhe vnutrennee predstavlenie -- chislo s plavayushchej tochkoj dvojnoj tochnosti (to, chto kompilyator S, kotorym kompilirovalsya Perl, ponimal pod double). Stroki predstavlyayut soboj posledovatel'nosti simvolov, no ne yavlyaetsya massivom bajtov i ne ogranichivaetsya kakim-to special'nym simvolom tipa nulevogo, kak eto proishodit v S. Po mere neobhodimosti osushchestvlyaetsya preobrazovanie iz odnogo tipa v drugoj -- v zavisimosti ot konteksta stroka mozhet prevratit'sya v chislo i naoborot: print "2"*2; # vyvodit 4 Imya skalyarnoj peremennoj vsegda nachinaetsya s simvola $: $a = 1; Skalyarnaya velichina mozhet byt' opredelennoj i neopredelennoj, v poslednem sluchae ee znachenie ravno undef. V strokovom kontekste znachenie undef interpretiruetsya kak pustaya stroka "", dlya proverki opredelennosti peremennoj sleduet pol'zovat'sya funkciej defined. Pri ispol'zovanii v logicheskih operaciyah lozhnymi schitayutsya chislo 0 i stroki "" i "0". Stroki mogut zapisyvat'sya s ispol'zovaniem odinarnyh i dvojnyh kavychek. Pri ispol'zovanii odinarnyh kavychek ih soderzhimoe ispol'zuetsya kak est': print '12\n$a'; # pechataet stroku 12\n$a Pri ispol'zovanii dvojnyh kavychek proishodit tak nazyvaemaya interpolyaciya peremennyh i specsimvolov: print "12\n$a"; # pechataet 12, delaet perevod stroki, pechataet znachenie peremennoj $a Esli v takoj stroke neobhodimo predotvratit' podstanovku znacheniya vmesto imeni peremennoj, to pered znakom dollara neobhodimo postavit' obratnuyu kosuyu chertu: "\$a". Operacii nad chislovymi znacheniyami nichem ne otlichayutsya ot znakomyh po S (za isklyucheniem vozvedeniya v stepen' **, operacij not, and, or, dubliruyushchih operacii !, &&, ||, no imeyushchih men'shij prioritet, chem operacii prisvaivaniya, i operacii xor, oznachayushchej logicheskoe isklyuchayushchee ILI). Dlya strokovyh peremennyh opredeleny operaciya konkatenacii "." (tochka), operaciya povtoreniya "x", operacii ne (neravenstvo strok), eq (ravenstvo), lt (strokovoe "bol'she chem") i gt (strokovoe "men'she chem"). Takzhe opredelena operaciya sravneniya dvuh strok cmp, vozvrashchayushchaya --1, 0 ili 1, ob®edinyayushchaya proverki ravenstva i sravneniya, i analogichnaya ej operaciya dlya chisel <=>. Vstroennaya funkciya chop udalyaet poslednej simvol stroki, vstroennaya funkciya chomp udalyaet poslednij simvol, esli on yavlyaetsya simvolom razdelitelya vhodnyh zapisej (znachenie po umolchaniyu -- simvol novoj stroki \n, kotoroe mozhet byt' zameneno prisvaivaniem novogo znacheniya vstroennoj peremennoj $\). Poisk podstroki osushchestvlyaetsya funkciej index($stroka, $podstroka, $start), vozvrashchayushchej indeks pervogo vhozhdeniya podstroki v stroku, bol'shego chem $start (tretij parametr mozhno opustit') i funkciej rindex, delayushchej to zhe samoe, no prosmatrivayushchej stroku sprava nalevo. Izvlekaetsya podstroka iz stroki funkciej substr ($stroka, $nachalo, $dlina). Pri otsutstvii tret'ego parametra budut izvlecheny vse simvoly do konca stroki. |ta funkciya mozhet stoyat' v levoj chasti operatora prisvaivaniya, pozvolyaya tem samym izmenyat' chast' stroki na letu. Massivy v Perl mogut hranit' lyuboe kolichestvo elementov i uvelichivayutsya po mere neobhodimosti. Imena massivov nachinayutsya s simvola @: @a, dostup k otdel'nomu elementu massiva zapisyvaetsya v vide $a[10] (numeraciya elementov massiva nachinaetsya s 0, prichem poslednij element massiva imeet indeks --1, predposlednij --2 i t.d.). V zavisimosti ot spisochnogo ili skalyarnogo konteksta raznye funkcii mogut vesti sebya po raznomu -- tak, funkciya chomp v primenenii k massivu udalit poslednij simvol u kazhdogo elementa massiva, a @a v skalyarnom kontekste vernet kolichestvo elementov massiva.