Взаимодействие на аплета за Java приложения с уеб сървър

Страницата по-долу е само част от огромен сайт, посветен на различна компютърна документация, сайтът съдържа повече от 800 MB информация. Ако не сте намерили това, което търсите в тази статия, опитайте да погледнете тук, попитайте във форума или потърсете информацията, от която се нуждаете, в нашата директория с връзки към компютърни сайтове.

Ако искате да закупите хартиено копие на представените тук материали , моля, свържете се с нашата книжарница.

С най-добри пожелания, екип за разработка на eManual.ru

Java приложения: Взаимодействие на аплет с уеб сървър.

Java приложения: Взаимодействие на аплети с уеб сървър А.В. Фролов, Г.В. Фролов

В тази статия ще говорим за интересна функция за оперативна съвместимост между Java аплети и разширения на уеб сървър, като CGI програми или ISAPI приложения. Ще научите как да създавате Java аплети, които могат да получават произволни файлове, разположени на уеб сървъра, да предават всякакви данни на разширения на уеб сървъра и да получават резултати от обработката от тях.

Разширенията CGI и ISAPI често се използват в активни уеб сървъри за осигуряване на интерактивно поведение. Например, чрез попълване на формуляр, хостван в HTML документ, потребителят може да изпрати заявка към база данни, реализирана с помощта на горните разширения. След обработка на заявката разширението CGI или ISAPI динамично генерира HTML документ с резултатите от обработката на заявката и го предава на потребителя.

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

Java класове за работа в мрежа

Езикът Java първоначално е бил ориентиран да работи с TCP / IP протокола, така че неговите библиотеки съдържат мощни и удобни класове, предназначени за създаване на мрежови приложения. Класовете InetAddress, URL и URLConnection са полезни за комуникация между Java аплети и разширения на уеб сървър.

В следващия пример създаваме обект от класа InetAddress за локалния хост:

InetAddress iaddrLocal; опитайте < iaddrLocal = InetAddress.getLocalHost(); >catch (Изключение ioe)

Имайте предвид, че методът getLocalHost е статичен и се извиква без създаване на обект от класа InetAddress.

Създаването на обект от клас InetAddress за отдалечен хост се извършва от методите getByName и getAllByName. Тези методи, като метода getLocalHost, хвърлят UnknownHostException.

URL конструктори на класове. За да работите с интернет ресурс с помощта на Java инструменти, трябва да създадете обект от URL класа за него. Тази задача може да бъде решена с помощта на един от четирите конструктора, предоставени в този клас:

• public URL(String szURLSpec) - създава обект от клас URL от текстов низ;

• public URL(String szProtocol, String szHost, int nPort, String szFile) - създава обект от класа URL, когато компонентите са посочени отделно;

• public URL(String szProtocol, String szHost, String szFile) – същото;

Всички конструктори на URL класа хвърлят MalformedURLException, ако възникне грешка. Следователно е необходимо извикване на конструкторивземете предвид това обстоятелство, например:

URL urlMicrosoft; опитайте < urlMicrosoft = URL("www.microsoft.com"); >catch (MalformedURLException mue)

Това изключение възниква, ако в параметрите на конструктора е посочен неизвестен протокол или изобщо не е посочен протокол (само за четвъртия конструктор).

Основни методи на URL класа:

• public final InputStream openStream() – Създава входен поток за четене на ресурсния файл, свързан с обект от клас URL. След като потокът бъде създаден, методът за четене, дефиниран в класа InputStream, трябва да се използва за четене на данни от него. Този метод е подходящ за четене както на двоични, така и на текстови файлове, разположени в директории на уеб сървъра;

• public final Object getContent() - отговорен за получаване на съдържанието на мрежовия ресурс, за който е създаден URL обектът. Този метод е много удобен, ако искате да прочетете текстов файл, но за съжаление не е подходящ за получаване на HTML документи. Причината е, че този ресурс няма манипулатор на съдържание, дефиниран за създаване на обекта. В резултат на това методът getContent може да създаде обект само от текстов файл. Но този проблем може да бъде разрешен чрез използване на комбинация от openStream (от класа URL) и read (от класа InputStream) вместо метода getContent;

• public String getHost() - определя името на домейна на хоста, съответстващ на URL обекта;

• public String getFile() - отговорен за получаване на информация за файла, свързан с дадения URL обект;

• public int getPort() - определя номера на порта, през който се осъществява комуникацията с URL обекта;

• public String getProtocol() - указва протокола, използван за установяване на връзка към ресурса, зададен от URL обекта;

• публичен низgetRef() - връща текстов низ от връзка към ресурс, съответстващ на URL обект;

• public int hashCode() - връща хеш кода на URL обекта;

• public boolean sameFile(URL other) - определя дали два обекта от URL класа препращат към един и същ ресурс: ако да, връща true, ако не - false;

• public String toString() - връща текстов низ, представящ дадения обект от URL класа;

• public URLConnection openConnection() – Създава канал между приложението и мрежов ресурс, представен от обект от класа URL.

Както вече казахме, за да получите съдържанието на файл, намиращ се в директорията на уеб сървъра, можете да създадете поток с помощта на метода openStream или, ако говорим за текстови файлове, използвайте метода getContent. Методът openConnection предоставя друга възможност. Когато се използва, аплет може да създаде канал като обект на класа URLConnection и след това да създаде входен поток за този канал. За да направите това, използвайте метода getInputStream, дефиниран в класа URLConnection. Тази техника ви позволява да дефинирате или зададете някои характеристики на канала, преди да създадете потока, например да зададете кеширане.

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

Изтегляне на файлове от директории на уеб сървър

Преди да научите как да получавате и обработвате данни от CGI програма, нека разрешим по-прост проблем - заредете файлове от директориите на уеб сървъра. Използвайки URL класа, всеки аплет може лесно да направи това. Имайте предвид обаче, че трябва да бъдат изпълнени две условия за успешно изтегляне:

• файлът трябва да се намира на същия сървър, от който е стартиран аплетът;

• Администраторът на уеб сървъра трябва да предостави достъп за четене на качения файл.

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

В нашия пример аплетът се зарежда с изходния текст на HTML документ с аплет TextEdit.

За да работи аплетът правилно, е важно HTML документът, съдържащ аплета, да бъде изтеглен от уеб сървър, използвайки HTTP протокола, а не от локалното устройство на компютъра. В противен случай ще бъде хвърлено SecurityException при опит за четене на файла. Същото изключение ще се появи и ако се опитате да получите файл от друг сървър, от който е изтеглен аплетът. Изходният код за аплета TextEdit е показан в листинг 1.

Листинг 1. Изтегляне на файлове от уеб сървър

Получаване на данни от програмата CGI и обработката им

След TextEdit ще напишем втори аплет, наречен CGICall, който ще реши по-сложна задача: извикване на разширението на уеб сървъра, което направихме под формата на CGI програма, получаване на десет произволни числа от него и показване на тези числа в цветна лентова графика.

Веднага след стартиране на аплета в прозореца му се показва съобщението „Щракни върху мен!“. Ако щракнете с левия бутон в прозореца, аплетът ще изпълни CGI програма на уеб сървъра, ще получи произволни числа от нея и ще начертае диаграма. Всеки път, когато щракнете върху прозореца на аплета, той ще извика CGI програмата за нови произволни числа. Имайте предвид, че цветовете за показване на колоните на диаграмата също се избират на случаен принцип от аплета. Изходният код за аплета CGICall е показан в списък 2. HTML документът, в който е вграден аплетът, е показан в листинг 3.