Книга е още в много ранна фаза на написване



страница14/73
Дата25.07.2016
Размер13.53 Mb.
#6732
1   ...   10   11   12   13   14   15   16   17   ...   73

Java и Internet


Ако Java е на практика само още един програмен език, би могло да се запита за­що е толкова важен и защо е бил прокламиран като революционна стъпка в ком­пютърното програмиране. Отговорът не е непосредствено очевиден, ако се из­ходи от традиционната програмистка гледна точка. Въпреки че Java може да ре­ши традиционните, самостоятелни програмни проблеми, причината да е тол­ко­ва важен е, че ще реши и проблеми свързани с World Wide Web.

Какво е Мрежата?


Мрежата може да изглежда мъничко мистериозна на пръв поглед с всичките тези приказки за “сърфинг,” “присъствие” и “home pages.” Винаги е имало да­же постоянно нарастваща реакция срещу “Internet-манията” на съмнение в пол­за­та и доходите от такова помитащо движение. Полезно е да се върнем стъпка на­зад и да видим точно за какво става въпрос, но за да се направи това, трябва да се разберат клиент/сървър системите, друг аспект на компютърните тех­но­ло­гии, изпълнен със смущаващи въпроси.

Клиент/сървър обработки


Основната идея на клиент/сървър системата е, че има централен склад за ин­фор­мация – някакъв вид данни, типично в база данни – която искате да раз­пре­де­ляте по заявки към някакво множество хора или машини. Ключът към клиент/сървър е че складът е централно разположен така че може да бъде про­ме­нян и промените да бъдат предавани до потребителите навън. Взети заедно ин­фор­мацията, софтуерът който я предава навън и другият спомагателен соф­туер заедно с машината (или машините) също представлява сървъра. Соф­туе­рът който работи на отдалечената машина и комуникира със сървъра, приема ин­формацията, обработва я и я изписва на дисплея на отдалечената машина се на­рича клиент.

Основната идея на клиент/сървър обработките, значи, не е чак толкова сложна. Проблемите се появяват понеже има един сървър, който трябва да обслужва мно­го клиенти наведнъж. Изобщо е налична и система за управление на база дан­ни, така че проектантът “балансира” плана на данните в таблица за опти­мал­на употреба. В добавка системите често позволяват клиентът да добавя данни към наличните. Това значи, че трябва да се осигури незастъпване на данните на раз­личните клиенти, а също и че няма да се загубят в процеса на добавянето им. (То­ва се нарича обработка на транзакции.) Тъй като клиентският софтуер се про­меня и той трябва да бъде написан, тестван и внедрен, това излиза по-скъпо и трудно, отколкото може да се мисли на пръв поглед. Особено проблематично е поддържането на различни платформи. Накрая, въпросът с изпълнението: мо­же да има стотици клиенти със заявки по едно и също време и даже малкото забавяне да е критично. За да се намали времето за отговор, програмистите ра­бо­тят здраво да облекчат задачите, често на клиентската машина но понякога на другите машини откъм сървърската страна използвайки т.н. middleware. (Ми­дъл­уерът също се използва за да се подобри управляемостта.)

Така простата идея за разпределяне на информация се оказва с толкова много ни­ва на сложнаст, че като цяло проблемът може да изглежда безнадеждно ениг­ма­тичен. И следното също е критично: сметки за клиент/сървър обработки за гру­бо половината от всичката активност на машините. Те са отговорни за всич­ко: от приемането на поръчки до разпределението на всякакъв вид данни – бор­со­ви, научни, правителствени – кажете ги вие. Преди се правеше индивидуално ре­шение на единичен проблем, всеки път наново. Беше трудно за произвеждане и трудно за използване и потребителят трябваше да учи всеки интерфейс от­дел­но. Като цяло проблемът клиент/сървър се нуждае от генерално решение.

Мрежата е огромен сървър


Фактически Мрежата е една огромна система клиент/сървър. Мъничко по-зле е, по­неже имате всичките сървъри и клиенти съвместно съществуващи на една връз­ка едновременно. Това обаче не ви интересува, понеже имате да се свър­же­те и да обменяте данни само с един сървър в даден момент (макар че може да под­скачате по целия свят търсейки подходящия сървър).

В началото беше прост еднопосочен процес. Правеше се заявка към сървъра и той изпращаше файл, който машинният броузър (т.е. клиентът) ин­тер­пре­ти­ра­ше, форматирайки го подходящо на локалната машина. Но на бърза ръка хо­ра­та поискаха да правят нещо повече от просто вземане на файлове. Те искаха пъл­на клиент/сървър възможност така че да може да се връща информация към сър­въра, например да се преглеждат базите данни на сървъра, да се добавя инфор­мация на сървъра, да се правят поръчки (което изисква повече сигурност от­колкото първоначалната система предлагаше). Това са нещата които виж­дах­ме при развитието на Web.

Web броузера беше голяма стъпка напред: концепцията, че парче информация мо­же да се изобразява на всякакъв компютър. Броузерите обаче бяха все още мал­ко примитивни и бързо затънаха в нарастващите изисквания към тях. Те не бя­ха много интерактивни и имаха тенденция да спъват и Мрежата, и сървъра, по­не­же за всяко нещо, което изискваше програмиране трябваше да се обръщат към сървъра. Можеше да отнеме много секунди само за да се установи, че нещо е сбъркано при набирането на команда. Доколкото броузера беше само за изо­бра­зяване на информация той не можеше да извършва никакви други обра­бот­ки. (От друга страна така беше по-сигурно, понеже не можеше да се изпълни про­грама на локалната машина, която има грешки или вируси.)

Различни подходи се приемаха при решаването на този проблем. Колкото да се за­почне, графиката беше разширена с по-добра анимация и вградено видео. Оста­налата част от проблема може да бъде решена само с интегриране на въз­мож­ност да се изпълняват програми на клиентската страна, чрез броузера. Това се нарича програмиране на клиентската страна.


Програмиране на клиентската страна8


Първоначалният дизайн на Web броузерите включваше интерактивност, но тя из­цяло се доставяше от сървърите. Сървърът произвеждаше статични страници за броузера, който просто ги извеждаше на екрана. Основата на HTML съдържа ня­кои неща за събиране на данни: полета за въвеждане на текст, за избор, "ра­дио" бутони, списъци и падащи списъци, къкто и бутон, който бе програмиран са­мо да изчисти данните или да ги “изпрати” на сървъра. Това изпращане ми­на­ва през Common Gateway Interface (CGI) налично на всички Web сървъри. Тек­стът който се изпраща информира CGI какво да прави със самия него. Най-ти­пич­ното нещо е стартиране на програма на сървъра, разположена най-често в ди­ректория “cgi-bin.” (Ако следите адресния прозорец на вашия броузър когато на­тиснете бутон на Web страница може понякога да видите “cgi-bin” сред всич­ко­то, което минава там.) Тези програми могат да бъдат написани на повечето ези­ци. Perl е общ избор, понеже е създаден за операции със стрингове и се интер­претира, така че може да бъде поставен на всеки сървър независимо от опе­­рационната система и типа на машината.

Много от мощните Web сайтове днес са изградени изцяло с CGI и практически ни­що не може да се направи с тях. Проблемът е времето за отговор. Отговорът на CGI зависи от това колко данни се препращат и от натоварването както на сър­въра, така и на Мрежата. (Отгоре на това стартирането на CGI програма има тенденция да бъде бавно.) Първоначалните проектанти на Web не предвиждаха кол­ко бързо честотната лента ще се заеме от създадените от хората прило­же­ния. Например никакъв вид динамична графика не е смислено възможен, поне­же GIF файл трябва да бъде създаден и изпратен за всяка междинна поза. Не­съм­нено и вие сте запознати с толсова простото нещо като валидиране на данни във форма. Натискате бутона за изпращане; данните отиват до сървъра; сър­въ­рът стартира CGI която открива грешка, произвежда HTML страница която ин­фор­мира за грешката и я изпраща обратно при вас; трябва тогава да извикате фор­мата и да започнете пак. Това не само е бавно, то не е елегантно.

Решението е програмиране в клиентската страна. Много машини на които работят Web са мощни и способни да вършат обширна работа и с оригиналния статичен HTML подход те просто си седяха, чакайки сървърът да издуха поредната страница. Програмирането на клиентската страна значи, че Web броузерът е впрегнат да върши всякаква работа която може и резултатът за потребителя е много по-бърза и приятна работа с неговия Web сайт.

Проблемът на дискусиите за сайтовете е, че той не е по-различен от дискусиите за програмирането изобщо. Парабетрите са почти същите, но платформата е дру­га: Web броузерът прилича на ограничена операционна система. Накрая, то­ва си е програмиране и за негова сметка е замайващото поле от проблеми, свър­за­ни с програмирането на клиентската страна. Останалата част от тази секция да­ва общ поглед върху проблемите и подходите за решаването им що се отнася до програмирането на клиентската страна.


Plug-ins


Една от най-съществените стъпки в развитието на програмирането на кли­ент­ска­та страна е развиването на plug-in. Това е начин за програмиста да включи но­ва функционалност в броузера чрез сваляна (при броузера - б.пр.) на парче код, което автоматично се включва само (от там и името - б.пр.) към опре­де­ле­на точка от страницата. То казва на броузера “от сега нататък може да из­пъл­ня­ваш (и) нова дейност.” (Необходимо е да се свали плуг-инът само веднъж.) Бър­зо и мощно поведение беше въведено в броузерите по този начин, но писането на плуг-инове не е тривиална задача и не е нещото, което бихте искали да пра­ви­те, занимавайки се с определена страница. Ценното на плуг-иновете е, че екс­перт-програмист може да напише и внедри нов програмен език за броузера без раз­решение от производителя на броузера. Така плуг-иновете дават задна вра­та за нови езици за програмиране на клиентската страна (макар че не всички ези­ци са намерили приложение като плуг-инове).

Скриптове и езици за тях


Плуг-иновете докараха експлозия на скриптовете. Със скрипта вграждате директно в HTML страницата сорс код за програмиране на клиентската страна и плуг-инът автоматично се активира щом HTML страницата се визуализира. Скрип­товите езици имат тенденция да бъдат доста прости за разбиране и по­не­же това е просто текст от HTML страницата се товарят бързо при простото до­ста­вяне на страницата. Недостатъкът е, че кодът е изложен пред всички да го гле­дат (и крадат) но изибщо казано не се правят вълнуващо сложни неща със скрип­тове така че това не е кой знае колко тежко.

Това идва да покаже, че със скриптовете се е възнамерявало да се реши опре­де­лен клас проблеми, най-напред създаването на по-богати и интерактивни по­тре­би­телски интерфейси (GUIси). Скриптът обаче може да реши 80 от срещаните в про­грамирането на клиентската страна. Вашите проблеми може точно да се включ­ват в тези 80 и доколкото скриптовете имат тенденция да са бързи и лесни за разработка, сигурно ще се спрете на скрипт преди да мислите за нещо ка­то Java или ActiveX програмиране.

Най-общо обсъжданите скриптови езици са JavaScript (което няма нищо общо с Ja­va; наречен е така за да грабне от пазарната инерция на Java), VBScript (който из­глеж­да като Visual Basic) и Tcl/Tk, който идва от популярния меж­ду­плат­фор­мен език за постройка на потребителски интерфейси. Има и други извън нашия спи­сък и без съмнение още повече се разработват.

JavaScript е вероятно най-широко поддържания. Той идва с всеки Netscape Na­vi­gator и Microsoft Internet Explorer (IE). В добавка, вероятно има повече книги за JavaScript отколкото за който и да е друг езики някои инструменти авто­ма­тич­но създават страници използвайки JavaScript. Ако обаче вече знаете добре Visual Basic или Tcl/Tk, би било по-продуктивно да се използват те, отколкото да се учи нов език. (Ще бъдете достатъчно заети с проблемите в Web в него мо­мент.)


Java


Ако скриптът може да реши 80 от проблемите при програмирането на кли­ент­ска­та страна, какво става с останалите 20% –“наистина трудните?” Най-по­пулярното решение днес е Java. Не само че е напълно развит програмен език по­строен за да бъде сигурен, междуплатформен и интернационален, но Java не­пре­къснато бива развиван за да предостави черти и библиотеки които елегант­но се справят с проблемите, които са трудни в традиционните езици, като мно­го­нишковост, достъп до бази данни, мрежово програмиране и разпределени обра­ботки. Java позволява програмиране на клиентската страна чрез applet.

Аплетът е малка програма, която работи само от Web броузер. Аплетът авто­ма­тич­но се сваля заедно със страницата Web (точно както например картинките би­ват сваляни (на клиентската машина -б.пр.)). Когато аплетът се активира той се изпълнява като програма. Това е част от неговата красота – дава се въз­мож­ност да се снабдяват потребителите със софтуер от сървъра когато е необходим и не по-рано. Потребителите получават последната версия без проблеми и умо­ри­телни преинсталирания. Поради начина по който Java е проектиран про­гра­ми­стът трябва да произведе единствена програма и тази програма автоматично ра­боти с всички компютри които имат вградени Java интерпретатори. (Това си­гур­но включва преобладаващата част от съществуващите машини.) Понеже Java е пълноценен език, може да се върши колкото си искате работа както пре­ди, така и след контакти със сървъра. Например не е необходимо да пращате по­ръчка през Мрежата само за да откриете, че сте сбъкали датата или нещо дру­го не е наред и вашият клиентски софтуер може да си види данните вместо да чака сървърът да ги прегледа, да построи съответната страница и да я из­пра­ти. Не само че има непосредствен резултат откъм скорост и интензивност на ра­ботата, но и мрежовия трафик към сървърите се разтоварва, предотвра­тя­вай­ки забавянето на цялата Мрежа.

Едно от предимствата които има Java аплетът пред скрипта е, че той е в ком­пи­ли­рана форма, така че сорсът не е достъпен за потребителя. От друга страна, един Java аплет може да бъде декомпилиран без особени грижи и скриването на ко­да не е чак толкова важно обикновено. Два други фактора са важните. Както ще видите по-късно в тази книга един компилиран Java може да включва ня­кол­ко модула и да изисква няколко “hits” (достъпа) до сървъра за да бъде раз­то­ва­рен. (В Java 1.1 това е минимизирано чрез Java архивите, наречени JAR фай­ло­ве, които позволяват всички необходими модули да бъдат пакетирани за раз­то­вар­ване на един път.) Скриптова програма ще бъде вградена в Web страницата ка­то част от нейния текст (и изобщо ще бъде по-малък и ще намали нитовете на сър­въра). Това може да бъде важно за комуникативността на вашата страница. Друг фактор е във всяко отношение важната крива на научаването. Без зна­че­ние какво сте слушали, Java не е тривиален за изучаване език. Ако сте Visual Basic програмист минаването към VBScript би било по-бързото решение и до­кол­кото ще се решат повечето от най-типичните задачи за клиент/сървър изу­ча­ва­нето на Java може да е много трудно за оправдаване. Ако сте опитен в скрип­то­вете сигурно ще спечелите ако надникнете към JavaScript или VBScript преди да отидете към Java, понеже те може и да са достатъчни и вие ще бъдете по-про­дуктивен по-скоро.

ActiveX


До някаква степен съперник на Java е ActiveX на Microsoft, макар че подходът там е съвсем друг. ActiveX по начало е само за Windows, макар че сега е развит от независим консорциум като междуплатформен. Фактически ActiveX казва “ако вашата програма се свързва с програмното обкръжение точно еди как си, тя може да бъде в Web страница и да въвви на броузър който поддържа Ac­ti­veX.” (IE директно поддържа ActiveX и Netscape го поддържа използвайки plug-in.) Така ActiveX не ви ограничава до определен език. Ако например вече сте опи­тен Windows с език като C++, Visual Basic, или Delphi на Borland, може да съз­дадете ActiveX компоненти практически без промени във вашите програмистки знания. ActiveX също дава начин за използване на съществуващ от по-рано код в Web страници.

Сигурност


Автоматичното разпространение на програми по мрежата може да звучи като мечта на човек, правещ вируси. ActiveX специално разглежда трънливия въпрос за сигурността на клиентското програмиране. Ако щракнете на Web бихте мо­гли да свалите автоматично много неща заедно с HTML страницата: GIF фай­ло­ве, скрипт, компилиран Java код и ActiveX компоненти. Някои от тях са лесни; GIF не могат да причинят никаква вреда и скриптовете са обикновено огра­ни­че­ни, до това, което могат да вършат. Java също бе проектирана да пуска свои­те аплети извътре на “санитарна кутия” от сигурност, което не позволява да пи­ше по диска или да има достъп до памет извън "кутията".

ActiveX е на другия край на спектъра. Програмирането с ActiveX е като про­гра­ми­ране на Windows – може да направите всичко, което поискате. Така че ако щрак­нете на страница, която съдържа ActiveX компонента, тази компонента мо­же да причини повреждането на файлове на вашия диск. Разбира се, про­гра­мите които пускате на вашия компютър и които не са ограничени в рамките на броу­зър могат да направят същото. Вирусите свалени от Bulletin-Board Systems (BBSи) отдавна са проблем, но скоростта на Мрежата усилва трудността.

Изглежда решението е “цифрови подписи,” които сигурно показват кой е авторът. Това е базирано на идеята, че вирусът работи защото неговият автор мо­же да остане анонимен, та като се махне анонимността индивидите ще могат да бъдат държани отговорни за действията си. Това изглежда добър план, по­не­же програмите могат да бъдат много по-функционални и аз подозирам, че би мо­гло да премахне злобната пакостливост. Ако обаче програмата има неиз­ве­стен бъг, това може все пак да предизвика проблеми.

Подходът в Java е да се предпазим от възникването на такива проблеми чрез "кутията". Java интерпретаторът който живее във вашия локаленWeb броузер пре­глежда аплета за "опаки" инструкции докато аплетът току-що е свален. В част­ност аплетът не може да пише файлове по диска или да трие файлове (едни от главните места на стоене на вирусите). Аплетите изобщо се предполага да бъ­дат сигурни и тъй като това е основно за всички надеждни клиент/сървър си­сте­ми всички бъгове, където би могло да има вируси се оправят бързо. (Не е кой знае какво че броузерите фактически нарушават изискванията за сигурност и че някои позволяват различни нива на сигурност.)

Може би сте скептични относно тази драконовска мярка относно писането на фай­лове по вашия диск. Например може да искате да си направите локална база дан­ни за използване оффлайн. Първоначалното виждане беше всеки да върши всич­ко онлайн, но скоро се видя, че това не е практично (макар че ниските цени на трафика и устройствата може да задоволят нуждите на повечето потре­би­те­ли). Решението е “подписан аплет” който използва публичен ключ за да докаже, че идва наистина от там, от където се твърди. Подписаният аплет може после да про­дължи право напред и да ви строши диска, но теорията е, че сега можете да дър­жите автора на аплета отговорен за такива злонравни работи. Java 1.1 дава рам­ка за дигиталните подписи така че може да предприемете стъпки извън ку­тия­та ако е необходимо.

Цифровите подписи са пропуснали вожен момент и това е скоростта, с която хо­рата се разхождат в Мрежата. Ако сте свалили лоша програма, колко ще тряб­ва време за да откриете това? Може би дни и даже седмици. И от тогава на­та­тък как ще откриете коя точно програма е направила белята (и какво ако я от­крие­те чак тогава?).


Internet срещу Intranet


Web e е най-общото решение на проблема клиент/сървър така че има смисъл да из­ползвате същите прийоми за решаване на всеки подпроблем, в частност кла­си­ческия клиент-сървър проблем в рамките на компанията. С традиционните кли­ент/сървър подходи се явява проблемът с различните типове на клиентските ком­пютри, както и трудността на инсталирането на клиентския софтуер, като и два­та добре се решават чрез Web броузърите и програмирането на клиентската стра­на. Когато Web технологията се използва в информационна мрежа в рам­ки­те на една компания това се нарича Intranet. Интранет дава много по-голяма си­гурност от Мрежата, тъй като достъпът до сървърите във вашата компания мо­же физически да се контролира (т.е. да се държат заключени - бел. прев.). В тер­мините на обучението: научаването веднъж на броузерите и евентуалните не­големи промени очевидно предполага по-голяма производителност на обу­че­нието, отколкото в другата ситуация.

Проблемът със сигурността ни води към едно естествено разделение в света на кли­ент/сървър програмирането. Ако програмите ви ще се изпълняват в Мре­жа­та, трябва да бъдете извънредно внимателни с тях, понеже не се знае на каква плат­форма ще се изпълняват. Нуждаете се от нещо многоплатформено и си­гур­но, като скрипт или Java.

В интранет ограниченията ще бъдат други. Не е необикновено всичките ма­ши­ни да са от Intel/Windows платформата. В интранет сте отговорни за ваш соб­ствен код и бъговете могат да бъдат оправени когато се открият. В добавка мо­же да имате наследен код в голямо количество от традиционния клиент/сървър под­ход в който трябва физически да инсталирате програмите при всяко осъ­вре­ме­няване. Времето за осъвременяване е най-непреодолимата причина за мина­ва­не към броузъри, понеже с тях то става прозрачно и безболезнено. Ако имате та­къв тип мрежа, най-подходящо е да минете към ActiveX наместо да пре­ко­ди­ра­те всичките си програми в нов език.

Изправени пред такова объркващо разнообразие от алтернативи в кли­ент/сър­вър програмирането, намираме, че най-добрият план за атака е анализът на разходите. Имайте пред вид ограниченията на вашата инсталация и търсете най-бързия път до решението. Тъй като програмирането на клиентската страна е програмиране, винаги е добра идеята да се предприеме най-бързият подход. То­ва е агресивна стойка при срещите с неизбежните усложнения при про­гра­ми­ра­нето на клиентсървър системите.


Програмиране при сървъра


В цялата досегашна дискусия игнорирахме програмирането на сървъра. Какво ста­ва, когато му се поръча нещо? Повечето време поръчките са просто “из­пра­ти ми този и този файл.” Вашият броузер после интерпретира файла по под­хо­дящ начин: като HTML страница, графика, Java аплет, скрипт и т.н. Една по-об­ща поръчка към сървъра би могла да бъде транзакция с база данни. Типичния сце­нарий включва поръчка за сложно търсене в база данни, като резултатите сър­върът формира в HTML и ги изпраща като резултат. (Разбира се, ако клиен­тът има повече интелигентност чрез Java или скрипт, необработените резултати мо­гат да бъдат изпратени към клиента и там да се форматират, което би било по-бързо и с по-малко натоварване на сървъра.) Или бихте могли да искате да си впишете името в базата данни, което ще доведе до нейната промяна. Тези опе­рации се извършват от някакъв код на сървърската страна, като създаването му изобщо се нарича програмиране при сървъра. Традиционно това про­гра­ми­ра­не се изпълнява на Perl и CGI скриптове, но се появиха и по-усложнени си­сте­ми. Те включват Java-базирани Web сървъри, които позволяват цялото про­гра­ми­ране на сървърската страна да се извърши на Java чрез написването на това, кое­то се нарича servlets.

Отделна арена: приложенията


Повечето от шумотевицата около Java е за аплетите. Java е език за про­гра­ми­ра­не в на-общия смисъл на думата и може да реши повечето програмистки про­бле­ми, най-малкото на теория. И както беше посочено преди, може да има по-ефек­тивни пътища за решаване на клиент/сървър проблемите. Когато излезете от арената на аплетите (като същевременно се освободите от ограниченията ка­то това за писане по диска) влизате в света на общото програмиране с про­гра­ми, които работят сами, без Web броузър, точно както всяка обикновена про­гра­ма. Тук силата на Java е не само в преносимостта, но също така и в про­гра­ми­руемостта. Както ще видите през цялата тази книга, Java има много черти, кои­то дават възможност да се страят програмни проекти за по-късо врама, от­кол­кото с досега известните езици.

Трябва да сте предупредени, че това е двулична благословия (както повечето на този свят и така трябва да бъде -б.пр.). Плаща се за напредъка с по-бавно из­пъл­нение (макар и да се върши значителна работа в тази посока). Като всеки език Java има присъъщи ограничения, които го правят неподходящ за ре­ша­ва­не­то на определен кръг от проблеми. Java е бързо развиващ се език, обаче, и с всяка нова версия става все по привлекателен за все по-разширяващо се мно­же­ство от проблеми.





Сподели с приятели:
1   ...   10   11   12   13   14   15   16   17   ...   73




©obuch.info 2024
отнасят до администрацията

    Начална страница