Платформа J2Me
Шрифт:
Если вы запустите программу, показанную в листингах 8.1–8.4, на эмуляторе другого производителя, вы увидите другое имя класса. Таким образом опознается реализация данного производителя интерфейса HttpConnection. Все определяемые протоколом классы зависят от реализации.
Модель состояний соединения HTTP. Соединения HTTP могут находиться в одном из трех состояний в течение их жизненного цикла. Эта модель состояний отражает природу запроса-отклика протокола HTTP. Это следующие три состояния:
— Установка — создан объект соединения, но соединения с исходным сервером еще нет.
— Установлено — соединение с сервером было установлено, параметры запроса были посланы
— Отключено — соединение было разорвано. Последующие вызовы методов соединения сбрасывают 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.