Национална академия по разработка на софтуер


Разработка на Web-приложения с Java



страница14/14
Дата25.07.2016
Размер2.68 Mb.
#6706
1   ...   6   7   8   9   10   11   12   13   14

Разработка на Web-приложения с Java


Web-приложенията представляват софтуерни системи, които са достъпни през Интернет или локална мрежа чрез стандартен Web-браузър. Например всички Web-базирани системи за електронна поща (като например mail.yahoo.com, abv.bg и mail.bg) представляват Web-приложения.

За достъп до една Web-базирана система, е необходимо потребителят да разполага със стандартен Web-браузър (например Internet Explorer или Mozilla) и връзка до машината, на който се намира тази система. Обикновено връзката се осъществява чрез Интернет, а за достъп до системата се използва адресът на нейния Web-сайт в рамките на глобалната информационна система WWW.

Както знаем, глобалната разпределена информационна система WWW (World Wide Web) представлява съвкупността от всички сървъри в Интернет, предоставящи достъп до ресурси чрез стандартен Web-браузър. Огромно е разнообразието от технологии, на които тя е изградена. Огромни са и възможностите за взаимодействие между сървърите, които я изграждат.

В настоящата глава ще навлезем в Java технологиите за изграждане на Web-приложения. Ще се запознаем с основните концепции на Web-програмирането и протокола HTTP, след което ще представим технологията „Java сървлети”. Ще продължим с преглед на сървъра за Web-приложения Tomcat. Ще се запознаем с начините за предаване на информация от клиента към сървъра чрез HTML форми, след което ще разгледаме жизнения цикъл на сървлетите и ще продължим с представяне на средствата, които Java Servlet API предоставя за автоматизирана поддръжка на потребителски сесии. Накрая ще се запознаем с технологията Java Server Pages (JSP) и ще представим цялостен пример за Web-приложение.


1.11.Основни понятия. Web-сървър. Протокол HTTP

Web-сървър


За публикуването на информация в Web пространството (WWW) се използват Web-сървъри. Web-сървърът представлява софтуер, който предоставя достъп до някаква информация по протокол HTTP. Web-сървърите могат да предоставят както статични ресурси, така и ресурси, които се създават в момента на изпълнение на заявката за достъп до тях (динамично генерирана информация).

Web-сайт


На един Web-сървър може да има един или няколко Web-сайта, всеки от които е комбинация между статично и динамично съдържание. Един сайт, разбира се, може да е разположен и на няколко Web-сървъра.

Web-приложения


Едно Web-приложение представлява софтуерна система с Web-базиран потребителски интерфейс, работеща на някакъв Web-сървър в Интернет или локална мрежа. На един Web-сървър може да има няколко независими Web-приложения, както и статична информация, която не е обвързана с никое от тях.

Web-приложенията могат да взаимодействат по между си по най-разнообразни начини. Възможно е резултати от няколко независими Web-приложения, работещи на различни и отдалечени един от друг сървъри да се визуализират на една Web-страница. Типичен пример за такова взаимодействие са рекламите по сайтовете в Интернет. Например приложението за електронна поща достъпно от mail.yahoo.com показва в един HTML документ резултата от работата на две различни Web-приложения. Едното от тях е приложението за четене на поща, което дава потребителски интерфейс за четене и изпращане на писма, а другото е приложението, което се грижи за рекламите и се изпълнява на съвсем друг сървър. Друг пример за съвместно използване на няколко Web-приложения са броячите на посетители, които се вграждат в различни сайтове и представляват независими приложения, обикновено работещи на отделни сървъри.

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

Най-често под Web-приложение се разбира цялостна софтуерна система, която служи за предоставяне на някаква услуга на потребителя през Web.

От гледна точка на програмирането Web-приложенията представляват стандартни клиент-сървър системи. Клиентът, както вече знаем, е стандартният Web-браузър, а сървърът е Web-сървърът, на който работи Web-приложението.

Особености на Web-приложенията


Характерна черта за Web-приложенията е, че към тях едновременно осъществяват достъп много потребители. Всеки потребител се обслужва независимо от другите потребители, така сякаш е единствен.

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


Web-приложенията и езиците за програмиране


Web-приложения могат да се разработват на различни езици и за различни Web-платформи – CGI, Perl, PHP, ASP, ASP.NET, Java/JSP и още много други. При разработката на Web-приложения с Java се използват технологиите Java-сървлети и Java Server Pages (JSP) и платформата за Web-приложения на Sun, която е част от J2EE (Java 2 Enterprise Edition). Тази платформа ни дава стандартен framework (съвкупност от програмни средства, стандарти и библиотечни функции) за разработка на Web-приложения, който ще разгледаме по-късно. Нека започнем с някои основни понятия от света на WWW.

Какво е Web-сървър


От гледна точка на Интернет програмирането Web-сървърите са приложения, които “слушат” на определен TCP порт (обикновено това е стандартният порт за протокола HTTP – 80), и отговарят на HTTP заявките, получени от клиентски приложения (най-често това са Web-браузърите).

Простите Web-сървъри могат само да връщат в отговор на клиентски заявки файловете, които са разположени в дадена директория, обозначена като главна Web-директория. Например ако имаме един прост Web-сървър стартиран на машината с име www.mywebserver.com и сме указали, че главната му директория е C:\MyWebSite, то когато даден Web-браузър поиска ресурс по даден URL от този сървър, например http://www.mywebserver.com/pictures/index.html, нашият прост Web-сървър ще му предостави файла C:\MyWebSite\pictures\index.html (ако съществува).


Common Gateway Interface


Всички съвременни Web-сървъри имат възможността да предоставят на клиентите си не само файлове от главната си Web-директория и нейните поддиректории, но и динамично генериран HTML, получен от работата на външна за Web-сървъра програма. Технологията, при която динамичното съдържание се генерира от външна за сървъра програма, се нарича CGI (Common Gateway Interface).

При CGI на базата на HTTP заявката Web-сървърът стартира някоя външна за сървъра програма (CGI-програма) и връща на клиента това, което тази CGI-програма изпише на стандартния изход като резултат от изпълнението си. CGI-програмата може да бъде написана на практически всеки език за програмиране или script, например на C, C++, Pascal, Perl, PHP и др.


Други технологии за генериране на динамично съдържание


Има и други възможности за динамично генериране на HTML, които не се базират на CGI – например не чрез външна програма, а чрез модул вграден директно в Web-сървъра. Такъв подход използва ISAPI технологията на Microsoft, която дава възможност за динамично вграждане в сървъра на компилиран програмен код от DLL файл.

Технологията, която лежи в основата на Web-програмирането с Java – JSP/Servlets, също използва вграждане в Web-сървъра на компилиран програмен код (Java класове), който генерира динамично HTML.

Друга широко използвана възможност да се генерира динамично Web съдържание е като се използват скриптови езици като VBScript, Perl и PHP. При тях не се използва компилиран код, а динамичното съдържание се генерира, като по време на изпълнение на заявката скриптът, който я обработва, се изпълнява от някакъв интерпретатор, който е вграден по някакъв начин в сървъра. Всъщност в по-новите си версии езиците Perl и PHP не работят с интерпретатор, а с компилатор и виртуална машина, която изпълнява компилирания код. Чрез добавяне на специални модули виртуалните машини на Perl и PHP могат да бъдат вградени в Web-сървъра и да изпълняват PHP и Perl код директно в процеса на сървъра. Такива са например модулите mod_perl и mod_php за Web-сървъра Apache.

Вграждането на компилиран програмен код има някои предимства пред извикването на външна програма, заради което CGI технологията се счита за остаряла и се използва все по-рядко. По скорост на изпълнение е по-ефективно да се използва вграден в сървъра код, защото не се налага при всяка динамична заявка да се извиква външно приложение, което е свързано със създаването на нов процес в операционната система. Друго предимство е, че интеграцията между сървъра и вградения в него компилиран код е по-силна и по-лесна за реализиране отколкото интеграцията с външна CGI-програма. При CGI е по-трудно да се реализира автоматизирана поддръжка на потребителски сесии, както и frameworks за Web-приложения.


Протоколът HTTP


Не е редно да се впускаме в света на Web-програмирането преди да сме изяснили в детайли протокола, по който си комуникират Web-сървърите с Web-браузърите – HTTP (Hyper Text Transfer Protocol).

HTTP представлява прост текстов протокол, който се използва от услугата WWW за осигуряване на достъп до практически всякакъв вид данни, наричани събирателно ресурси. В HTTP протокола има понятия като клиент (обикновено това са Web-браузърите) и сървър (това са Web-сървърите). Обикновено HTTP протоколът работи върху стандартен TCP сокет отворен от клиента към сървъра. Стандартният порт за HTTP протокола e 80, но може да се използва и всеки друг TCP порт. Комуникацията по HTTP се състои от заявка (request) – съобщение от клиента към сървъра и отговор (response) – отговор на сървъра на съобщението от клиента.

В развитието си HTTP протоколът е преминал през версиите 0.9, 1.0 и 1.1, която е най-разпространена. На практика когато се говори за HTTP, обикновено се има предвид HTTP 1.1.

HTTP заявки


HTTP заявката при версия 1.1 на протокола има следния формат:

<метод> URI> HTTP/1.1



<празен ред>

HTTP заявките имат 3 основни елемента: метод, Request-URI и header-полета.

Методът описва вида на HTTP заявката, изпратена от клиента. Най-често използваните методи са GET и POST. Чрез GET клиентът изисква някакъв ресурс от Web сървъра. POST служи за предаване на данни към сървъра и извличане на ресурс. Имената на методите в HTTP заявките се изписват винаги с главни букви.

Идентификаторът Request-URI определя ресурса, над който ще оперира заявката. В частта Request-URI могат да се използват два вида идентификатори:



  • URI идентификатор (Uniform Resource Identifier)

  • релативен път спрямо главната директория на Web-сървъра

Един URI идентификатор може да бъде или URL адрес (Uniform Resource Location, например http://www.nakov.com/inetjava/index.html), т.е. да е идентификатор на ресурс, зададен чрез уникалното си местоположение или URN име (Uniform Resource Name, например urn:isbn:954-8905-06-X), т.е. да е идентификатор на ресурс, зададен чрез уникалното си име по даден URN namespace идентификатор (за нашия пример това е идентификатора isbn). В практиката URN схемата за идентификация на ресурс почти не се използва при HTTP заявки.

Релативният път спрямо главната директория на Web-сървъра задава местоположението на ресурс в рамките на текущия Web-сървър. Това е частта от URL, която стои след името на хост-а (сървъра) в URL идентификатора. Например един такъв релативен път може да бъде идентификаторът /inetjava/index.html.

Фрагментът HTTP/1.1 с който завършва първият ред на HTTP заявката задава версията на HTTP протокола, която ще бъде използвана.

Header-полетата от заглавната част задават допълнителни параметри на заявката и определят различни изисквания относно ресурса, който се очаква да бъде върнат от Web-сървъра.

Празният ред определя края на заявката.

Примерна HTTP заявка


Да дадем един пример за HTTP заявка, която връща началната страница от сайта http://www.dir.bg/:

GET / HTTP/1.1

Host: www.dir.bg


Как се отличават виртуалните хостове на един Web-сървър


На един Web-сървър може да има хостнати няколко различни сайта, които могат да започват с различни Интернет имена. Такива сайтове се наричат виртуални хостове в рамките на Web-сървъра. Например сайтовете с URL адреси http://www.nakov.com/ и http://bgcon.org/ могат да са хостнати в Web-сървъра на една и съща машина, да кажем машината с IP адрес 194.12.244.90. Възниква въпросът как браузърът указва кой от двата адреса иска, след като те се обслужват от един и същ Web-сървър на една и съща машина.

Ясно е, че в услугата DNS Интернет имената www.nakov.com и bgcon.org трябва да са регистрирани да съответстват на IP адреса 194.12.244.90. Когато в полето за адрес на един стандартен Web-браузър се напише един от горните два URL адреса, да кажем http://www.nakov.com/, браузърът прави следното: Първо чрез услугата DNS получава IP адреса на машината, която хоства търсения сайт (www.nakov.com). След това отваря TCP връзка към тази машина на порт 80 и изпраща заявка за извличане на ресурса „/”. В хедъра на тази заявка браузърът указва в полето Host стойността www.nakov.com. Именно по това поле Host в хедъра на HTTP заявката Web-сървърът разбира за кой от всички виртуални хостове се отнася тази заявка.



Другият начин при HTTP заявка да се укаже виртуалният хост в Web-сървъра е да се използва URI идентификатор на искания ресурс (URL адрес). В този случай името на хоста се включва в самия този идентификатор.

Методи на HTTP заявката


Протоколът HTTP версия 1.1 поддържа общо 8 различни метода: GET, POST, HEAD, PUT, DELETE, OPTIONS, TRACE, CONNECT. Най-често използваните методи са GET и POST и те имат най-голямо значение за Web-програмирането.

HTTP GET заявки


GET методът представлява команда за извличане на ресурс, указан от зададено URI или релативен път в рамките на Web-сървъра. Всичко, което прави Web-сървърът за извличането на статичен ресурс чрез GET заявка е да го прочете от файловата система и да го върне на клиентите в подходящ HTTP отговор. При извличане на динамичен ресурс сървърът изпълнява програмния код, който генерира ресурса и връща резултата от него в HTTP отговор. Ето един реален пример за HTTP заявка с GET метод:

GET /InetJava-2002-program.html HTTP/1.1

Host: inetjava.sourceforge.net

Accept: */*

Accept-Language: bg

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0(compatible;MSIE 6.0; Windows NT 5.0)

Connection: Keep-Alive

Cache-Control: no-cache



Изпращането на тази заявка към Web-сървъра, който слуша на порт 80 на машината с Интернет адрес inetjava.sourceforge.net, ще върне файла InetJava-2002-program.html от директорията на виртуалния хост inetjava.sourceforge.net.

Тази заявка съвсем истинска. Тя е генерирана от Web-браузъра Internet Explorer 6.0 при опит да се отиде на URL адрес http://inetjava.sourceforge.net/InetJava-2002-program.html и е прихваната чрез софтуер за подслушване на мрежовия трафик.

При HTTP GET заявката ако към искания ресурс трябва да се зададат параметри, това става като към URI-то се добави въпросителен знак, а след него двойки от вида <име на параметър>=<стойност>, като двойките от този вид се разделят една от друга със &. За избягването на някои непозволени символи се използва така нареченото URL-кодиране, за което ще стане дума по-нататък.

HTTP POST заявки


POST методът служи за изпращане на данни от клиента към Web-сървъра. Обикновено сървърът предава получените от POST заявката данни на някакъв CGI скрипт или вграден модул за динамично генериране на HTML, който ги обработва и връща някакви резултати. Тези резултати се връщат на клиента като отговор на неговата заявка. Ето един реален пример за HTTP заявка с POST метод, изпратена от Internet Explorer 6.0 при опит за влизане в Web-базираната система за електронна поща на адрес http://www.abv.bg:

POST /webmail/login.phtml HTTP/1.1

Host: www.abv.bg

Accept: */*

Accept-Language: bg

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0(compatible;MSIE 6.0; Windows NT 5.0)

Connection: Keep-Alive

Cache-Control: no-cache

Content-Length: 59

LOGIN_USER=boris



DOMAIN_NAME=abv.bg

LOGIN_PASS=tajnamajna



Както се вижда, параметрите се предават след самата заявка, като в header-полетата се указва общата дължина в символи на всички параметри и техните стойности (заедно със символите за край на ред). За разделител между header-полетата и параметрите се използва празен ред. За край на заявката се използва също празен ред. Ако параметрите съдържат непозволени символи, те се кодират по специален начин. Кодирането на параметрите и стойностите им се прави автоматично от Web-браузъра, а разкодирането им съответно от скрипта, който обработва заявката на Web-сървъра. Като Web-програмисти на Java не е необходимо да знаем в детайли точно как става това разкодиране, защото то се извършва автоматично от средата, в която се изпълнява нашето Web-приложение (т. нар. Web-контейнер).

Отговори на HTTP заявки


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

HTTP/1.1 <код> <текст>



<празен ред>

<ресурс>

Първият ред се нарича статус линия и съдържа версията на HTTP протокола, по който се изпраща отговора, трицифрен код на резултата или код на грешка и кратко текстово описание на този код.

Следват header-полетата. Те съдържат различни параметри на върнатия ресурс, както и информация за Web-сървъра.

Следва празен ред, а след него ресурсът, кодиран по описания в header-полетата начин. В зависимост от типа на ресурса, сървърът може да го върне кодиран по различен начин и по различен начин да укаже на клиента колко байта е дълъг HTTP отговорът.

Стойностите на header-полетата и формата на ресурса са от интерес основно за Web-браузъра и затова няма да ги разглеждаме в детайли.

Основното, което трябва да знаем, е че на всяка HTTP заявка сървърът отговаря с HTTP отговор, който съдържа искания ресурс или грешка. Кодовете на грешките започват с цифрата 4 или 5. Кодовете за успешен резултат започват с 2, а кодовете, носещи специална информация – с 3. Най-често срещаните кодове при HTTP отговор са: 200 – успех; 304 – документът не е променян от времето, зададено в header-а (използва се от браузърите при кеширане на документи); 404 – ресурсът не е намерен; 500 – грешка на сървъра. Ето един цялостен пример за изпращане на HTTP заявка за извличане на главната страница от локално стартиран Web-сървър и отговорът на тази заявка:

C:\> telnet localhost 80

GET / HTTP/1.1

Host: localhost



HTTP/1.1 200 OK

Date: Sat, 10 Aug 2002 16:09:18 GMT

Server: Apache/1.3.9 (Win32)

Accept-Ranges: bytes

Content-Length: 73

Content-Type: text/html





Test

Test HTML page.



Както се вижда, сървърът е върнал отговор на HTTP заявката с код 200 (успех) и е върнал искания ресурс. Ето и един пример за неуспешно завършила заявка:

C:\> telnet localhost 80

GET /img/nakov.gif HTTP/1.0



HTTP/1.1 404 Not Found

Date: Sat, 10 Aug 2002 16:20:17 GMT

Server: Apache/1.3.9 (Win32)

Connection: close

Content-Type: text/html





404 Not Found



Not Found



The requested URL /img/nakov.gif

was not found on this server.



Apache/1.3.9

Server at test Port 80



Каталог: books -> inetjava
books -> В обятията на шамбала
books -> Книга се посвещава с благодарност на децата ми. Майка ми и жена ми ме научиха да бъда мъж
books -> Николай Слатински “Надеждата като лабиринт” София, Издателство “виденов & син”, 1993 год
books -> София, Издателство “Българска книжница”, 2004 год. Рецензенти доц д. ик н. Димитър Йончев, проф д-р Нина Дюлгерова Научен редактор проф д-р Петър Иванов
books -> Николай Слатински “Измерения на сигурността” София, Издателство “Парадигма”, 2000 год
books -> Книга 2 щастие и успех предисловие
books -> Превръщане на числа от една бройна система в друга
books -> Тантриското преобразяване


Сподели с приятели:
1   ...   6   7   8   9   10   11   12   13   14




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

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