ЛитМир - Электронная Библиотека
A
A

В дополнение к этим методам интерфейс HttpConnection также определяет полную совокупность констант, представляющих коды статуса и ошибок HTTP, которые показаны в таблице 8.5. Для получения дополнительной информации о константах кода статуса смотрите HTTP 1.1, спецификацию RFC2616, которую можно найти по адресу http://www.w3c.org или на http://www.ietf.org.

Таблица 8.5. Определения констант интерфейса HttpConnection

Константа HttpConnection — Описание

static String GET — Представляет метод запроса GET

static String HEAD — Представляет метод запроса HEAD

static int HTTP_ACCEPTED — HTTP статус 202

static int HTTP_BAD_GATEWAY — HTTP статус 502

static int HTTP_BAD_METHOD — HTTP статус 405

static int HTTP_BAD_REQUEST — HTTP статус 400

static int HTTP_CLIENT_TIMEOUT — HTTP статус 408

static int HTTP_CONFLICT — HTTP статус 409

static int HTTP_CREATED — HTTP статус 201

static int HTTP_ENTITY_TOO_LARGE — HTTP статус 413

static int HTTP_EXPECT_FAILED — HTTP статус 41 7

static int HTTP_FORBIDDEN — HTTP статус 403

static int HTTP_GATEWAY_TIMEOUT — HTTP статус 504

static int HTTP_GONE — HTTP статус 410

static int HTTP_INTERNAL_ERROR — HTTP статус 500

static int HTTP_LENGTH_REQUIRED — HTTP статус 41 1

static int HTTP_MOVED_PERM — HTTP статус 301

static int HTTP_MOVED_TEMP — HTTP статус 302

static int HTTP_MULT_CHOICE — HTTP статус 300

static int HTTP_NO_CONTENT — HTTP статус 204

static int HTTP_NOT_ACCEPTABLE — HTTP статус 406

static int HTTP_NOT_AUTHORITATIVE — HTTP статус 203

static int HTTP_NOT_FOUND — HTTP статус 404

static int HTTP_NOT_IMPLEMENTED — HTTP статус 501

static int HTTP_NOT_MODIFIED — HTTP статус 304

static int HTTP_OK — HTTP статус 200

static int HTTP_PARTIAL — HTTP статус 20В

static int HTTP_PAYMENT_REQUIRED — HTTP статус 402

static int HTTP_PRECON_FAILED — HTTP статус 412

static int HTTP_PROXY_AUTH — HTTP статус 407

static int HTTP_REQ_TOO_LONG — HTTP статус 414

static int HTTP_RESET — HTTP статус 205

static int HTTP_SEE_OTHER — HTTP статус 303

static int HTTP_TEMP_REDIRECT — HTTP статус 307

static int HTTP_UNAUTHORIZED — HTTP статус 401

static int HTTP_UNAVAILABLE — HTTP статус 503

static int HTTP_UNSUPPORTED_RANGE — HTTP статус 416

static int HTTP_UNSUPPORTED_TYPE — HTTP статус 41 5

static int HTTP_USE_PROXY — HTTP статус 305

static int HTTP_VERSION — HTTP статус 505

static String_HTTP_POST — Представляет метод запроса POST

Вы можете видеть, что интерфейс HttpConnection предоставляет наибольший набор функциональных возможностей из всех интерфейсов. HTTP является протоколом уровня приложений, наиболее часто поддерживаемым реализациями MIDP.

В листингах с 8.1 по 8.4 показан исходный код для простой программы, которая демонстрирует, как пользователь мобильного устройства может запрашивать ресурс HTTP с удаленного сервера. Вы можете найти, что эта программа не работает при выполнении за пределами вашего корпоративного брандмауэра, в зависимости от конфигураций сети вашей компании, брандмауэра и прокси-сервера. Вы можете быть ограничены до посещения URI ресурсов, расположенных в пределах вашей корпоративной сети.

Протокол HTTP определяет семантику, связанную с тем, что клиентам необходимо запрашивать ресурсы через прокси-сервер. Браузер может изменять URI пользователя, основываясь на настройках его прокси, и посылать измененный запрос на прокси-сервер, который перенаправляет его на исходный сервер. Программа не делает таких изменений URI, и поэтому она не может пересылать URI, как ожидается вашим прокси-сервером. Если вы не знаете, как браузер изменяет URI, у вас могут возникнуть сложности при доступе к URI, являющимся внешним по отношению к вашей корпоративной сети. Результат выразится в том, что программа, показанная в листинге 8.1, сбросит lOException.

Программа, показанная в листинге 8.1, отображает только метаинформацию о запрошенных ресурсах и не отображает сам ресурс. Она лишь запрашивает информацию заголовка для каждого ресурса, используя метод HEAD HTTP. Написание программы, которая отображала бы произвольное содержимое, было бы равноценно написанию целого браузера, что, очевидно, лежит за пределами темы данной книги. К счастью, некоторые компании предлагают HTTP-браузеры, которые работают на устройствах MIDP, так что вам не придется проделывать эту огромную работу.

Листинг 8.1. Программа ConnectionDemo определяет MID-лет, который отображает мета-информацию протокола HTTP, а именно значения полей заголовка HTTP. Программа использует команду HEAD для получения лишь мета информации, а не всей страницы

import javax.microedition.midlet.MI Diet;

import javax.microedition.lcdui.Display;

Этот класс определяет MID-лет для демонстрационной программы, которая запрашивает у пользователя URI, затем создает соединение HTTP с исходным сервером и извлекает ресурс. Программа использует объект Form, для того чтобы дать пользователю возможность ввести URI.

*/

public class ConnectionDemo extends MID-лет

}

private static ConnectionDemo instance;

private URIEntry urlForm; public ConnectionDemo()

super(); instance = this; }

/**

Возвращает один экземпляр класса.

Вызов этого метода до создания объекта возвращает нулевой указатель.

@возвращаем экземпляр данного класса,

public static ConnectionDemo getlnstance ()

return instance;

}

public void startApp()

Display display;

URIEntry urlForm = URIEntry.getlnstance();

display = Display.getDisplay(this); display.setCurrentlurlForm);

}

public void pauseApp()

}

}

void quit ()

destroyApp(true); notifyDestroyed();

}

public void destroyApp(boolean destroy)

{

instance = null;

/**

Устанавливает данный объект в качестве текущего отображаемого объекта MID- лета.

*/

public void display()

Display.getDisplay(this). setCurrent(urlForm);

}

}

Листинг 8.2. Класс URIEntry описывает форму, которая приглашает пользователя ввести URI

import: javax.micrcedition.midlet.MIDlet;

import javax.microedition.Icdui.Command;

import javax.microedition.Icdui.CommandListener;

import javax.raicroedition.Icdui.Display;

import javax.microedition.Icdui.Displayable;

import javax.microedition.Icdui.Form;

import javax.microedition.Icdui.TextField;

/**

Этот класс задает Form, приглашающую пользователя ввести URI, с которым должно быть установлено соединение HTTP.

Пользователь вводит URI и нажимает командную кнопку «Go».

Экземпляр данного класса затем создает экземпляр класса ResourceDisplay, который выполняет обязанности извлечения ресурса HTTP и его отображения.

46
{"b":"121163","o":1}