KnigaRead.com/

Автор неизвестен - Платформа J2Me

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Автор неизвестен, "Платформа J2Me" бесплатно, без регистрации.
Перейти на страницу:

— Отключено — соединение было разорвано. Последующие вызовы методов соединения сбрасывают 10Exception.


На рисунке 8.3 показана диаграмма перемещения из состояния в состояние объектов соединения HTTP.



Рис. 8.3. Объекты HttpConnection переходят в три различных состояния во время своего существования


Объект соединения существует в состоянии установки при создании его экземпляра. На данный момент строка запроса не была создана. Чтобы создать запрос, вы должны установить метод HTTP и заголовки запроса. Эти значения устанавливаются с помощью методов, перечисленных в таблице 8.6. Прежде чем соединение сможет войти в состояние «установлено», — прежде, чем оно пошлет запрос серверу и получит ответ, — оно должно установить параметры запроса HTTP, то есть создать сообщение запроса. Вызов этих методов, однако, не приведет к переходу в другое состояние.

Соединение переходит в состояние «установлено», когда вызваны любые из методов, перечисленных в таблице 8.7. Состояние установленного соединения представляет собой период между временем, когда запрос был послан на сервер, и временем, когда либо клиент, либо сервер прервали соединение. Вы можете видеть, что все методы, показанные в таблице 8.7, работают с извлечением данных из ответного сообщения. Чтобы извлечь данные, соединение с сервером должно быть действующим, чтобы клиент получил ответное сообщение.


Таблица 8.6. Методы интерфейса HttpConnection для создания запроса HTTP


Название метода HttpConnection — Описание

void setRequestMethod (String method) — Устанавливает метод запроса HTTP, либо HEAD, либо POST, либо GET

void setRequestProperty (String key, String value) — Включает в запрос указанное поле заголовка со значением, установленным на value


Таблица 8.7. Методы интерфейса HttpConnection, которые позволяют соединению перейти в состояние «установлено»


Название метода HttpConnection — Описание

InputStream openlnputStream() — Открывает и выдает ссылку на InputStream (происходит от InputConnection)

OutputStream openOutputStream() — Открывает и выдает OutputStream для соединения (происходит из OutputConnection)

DatalnputStream openData!nputStream() — Открывает и выдает ссылку на DatalnputStream (происходит из InputConnection)

DataOutputStream openDataOutputStream() — Открывает и выдает ссылку на DataOutputStream (происходит изOutputConnection)

long getDate() — Получает значение поля заголовка date

String getEncoding() — Получает строку, которая описывает шифрование содержимого в ответе (происходит от ContentConnection]

long getExpiration() — Получает значение поля заголовка expires

String getHeaderField (String name) — Получает значение указанного поля заголовка

long getHeaderFieldDate (String name, long def) — Получает значение указанного поля заголовка. Значение анализируется как число

String getHeaderFieldlnt (String name, int def) — Получает значение указанного поля заголовка. Значение анализируется как число

String getHeaderFieldKey (int n) — Получает указанное поле заголовка. Аргумент представляет собой индекс поля заголовка

long getLastModified() — Получает значение поля заголовка last-modified

long getLength() — Извлекает длину поля заголовка.

int getResponseCode() — Получает код состояния отклика HTTP

String getResponseMessage() — Получает ответное сообщение HTTP

String getType() — Получает тип содержимого, предоставляемого сервером (происходит из ContentConnection)


Когда соединение находится в состоянии «установлено», вы можете лишь извлекать из него данные либо закрыть его. Вы можете задействовать методы, перечисленные в таблицах 8.7 и 8.9. Методы, показанные в таблице 8.8, извлекают различные части ответа HTTP, за исключением метода close (), который разрывает соединение.

Если соединение находится в состоянии «установлено», вы можете больше не активизировать методы, показанные в таблице 8.6. Вы не можете переустановить параметры запроса, что означает, что вы не можете снова использовать объект соединения для доступа к нескольким различным URI. Вы вынуждены создавать экземпляр нового соединения, пересылая новый URI в вызов Connector.ореn(). Кстати, либо клиент может прервать соединение после получения отклика, либо удаленный сервер может разорвать соединение послелосылки этого отклика.

Обратите внимание, что в листинге 8.4 порядок, в котором поля заголовков вставляются в сообщения запроса или извлекаются из ответного сообщения сервера, несущественен. Класс соединения имеет дело с абстракциями создания правильно сформированных сообщений HTTP и анализа ответов HTTP.


Таблица 8.8. Методы интерфейса HttpConnection, вызываемые в состоянии «установлено»


Название метода HttpConnection — Описание

void close() — Прерывает соединение (происходит из интерфейса Connection)

String getFile() — Получает поле <file> URL данного соединения

String getHost() — Получает поле <host> URL данного соединения

int getPort() — Получает поле <port> URL данного соединения

String getProtocol() — Получает поле <protocol> URL данного соединения

String getQuery() — Получает строку запроса URL данного соединения

String getRequestMethodf() — Получает текущий метод запроса (GET, POST и так далее)

String getRequestProperty (String key) — Получает значение свойства указанного общего запроса данного соединения

String getRef() — Получает поле <ref> URL данного соединения

String getURL() — Получает полный URL данного соединения как строковое значение


Использование соединений содержимого соединений. Сила, стоящая за использованием стандартных механизмов соединений содержимого соединений, заключается в том, что не требуется собственного проектирования для создания либо механизма доступа, либо согласованного формата полезного содержимого сообщений. Эта стандартизация служит мотивом поддержки механизма соединения HTTP в MIDP. HTTP является наиболее распространенным стандартным протоколом программного уровня в Интернете на сегодняшний день. Он дает вам возможность получать доступ к большому количеству разнообразных сетевых служб, поскольку поддерживает транспортировку произвольных данных с помощью своего механизма тегирования типа MIME.

Соединения HTTP могут транспортировать множество различных видов содержимого, такого, как HTML и XML. Кроме того, HTTP может использоваться как упаковщик для туннелирования других данных протокола уровня приложений. Вы, таким образом, имеете удобный механизм передачи данных для приложений клиент-сервер.

HTTP широко используется серверами как механизм передачи множества различных служб. Службы могут быть реализованы с помощью любой из множества технологий, независимо от того, что они используют HTTP в качестве механизма передачи. Службы могут быть реализованы с помощью сервлетов Java, Java Server Pages (JSP), Pearl scripts, CGI и так далее.

Модель сервлетов является особенно мощной, поскольку сервлеты написаны на Java и легко стыкуются с другими технологиями Java enterprise, они также без проблем взаимодействуют с клиентскими технологиями. Кроме того, сервлетные системы поддерживаются стандартными Web-серверами и могут без труда создавать выводимые данные в различных форматах. В главе 11 вы узнаете, как порталы беспроводного Интернета используют эти технологии для построения служб для мобильных устройств.


Дейтаграммные соединения и дейтаграммы

Интерфейс javax.microedition.io.DatagramConnecti.on дополняет Connection. Его положение в диаграмме иерархии наследования, показанной на рисунке 8.2, а также его название, предполагают, что дейтаграммные соединения являются на самом деле соединениями, хотя и отличными от других соединений потоков и содержимого соединений. В действительности интерфейс DatagramConnection описывает соединения, которые посылают и получают дейтаграммы через протокол дейтаграмм.

В мире сетевых технологий термин протокол дейтаграмм подразумевает облегченный протокол — протокол без установления состояний. Но само это отличие на самом деле не помогает объяснить его позицию в иерархии структуры общих соединений. Более правильно, вероятно, различать протоколы уровня приложений и низкоуровневые протоколы.

Термин протокол дейтаграмм обозначает протокол, который находится на более низком уровне в модели OSI, чем протоколы уровня приложений. Протоколы дейтаграмм переносят дейтаграммы, которые иногда называются пакетами. Эти протоколы обычно переносят сообщения дейтаграмм с одной машины на другую, основываясь исключительно на информации, содержащейся в этой дейтаграмме. Несколько пакетов, посланных с одной машины на другую, могут быть переданы по различным маршрутам и приходить на назначенный компьютер в любом порядке. Доставка пакетов в общем и целом не гарантирована.

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*