KnigaRead.com/

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

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

*/

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 и его отображения.


*/

public class URIEntry extends Form implements CommandListener

}

private static Command go =

new Command("Go", Command.SCREEN, 1);

private static Command exit =

new CommandCExit", Command. EXIT, 1);

private static URIEntry instance;

// URI, введенный пользователем, private TextField uri;

// Нить, контролирующая выполнение объекта

// ResourceDisplay. private Thread thread;

/**


Конструктор.


@param title заголовок Form.

*/

private URIEntry(String title)

}

super(title); instance = this;

uri = new TextField. ("Connect to: ",

null, 70,

TextField.URL); uri.setStringf'http://"); append (uri);

addCommand(go); addCommand(exit); setCommandListener(this);

}

/**


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


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

*/

public static URIEntry getlnstance ()

}

if (instance == null)

{

instance = new URIEntry("Enter URL");

}

return instance;

}

/**


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


*/

public void display()

MIDlet га = ConnectionDemo.getInstance();

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

}

public void commandAction(Command c, Displayable d)

}

if (c == go)

}

// Этот экран отображает метаинформацию ресурса,

// указанного с помощью URI.

ResourceDisplay view =

new ResourceDisplay(uri.getString());

MIDlet m = ConnectionDemo.getInstar.ee ();

Display.getDisplay(m). setCurrent(view);

thread = new Thread(view); thread.start();

}

else if (c == eit)

}

ConnectionDemo.getlnstance(). quit();

}

}

}


Листинг 8.3. Класс ResourceDisplay определяет форму, которая отображает ресурс. Он использует объект helper для получения этого ресурса


import javdx.microedition.lcdui.Command;

import javax.microedition.Icdui.CommandListener;

import javax.microedition.Icdui.Form;

import javax.microedition.Icdui.Displayable;

/**


Данный класс задает Form, которая отображает метаинформацию, описывающую HTTP-ресурс. Она контролируется отдельной нитью, поэтому она реализует Runnable.

Этот объект Form использует объект helper для коммуникации с HTTP-ресурсом через Connection. Он затем забирает данные соединения из объекта helper для отображения на экране для пользователя.


public class ResourceDisplay extends Form

implements CommandListener, Runnable

{

private static Command back =

new Command("Back", Command.BACK, 1);

private static Displayable instance;

// Объект helper создает соединение с ресурсом на исходном

// сервере и извлекает метаинформацию ресурса.

// private HttpResource resource;


Конструктор


Sparam uri URI ресурса для извлечения по запросу HTTP протокола.

*/

public ResourceDisplay(String uri)

{

super("Http Info");

instance = this;

resource = new HttpResource(uri);

addCommand(back);

setCommandListener(this);

}

/**


Запускает выполнение данного объекта: запускает объект helper HttpResource.


@смотри. rtpResource

*/

public void run()

{

resource.run();

append(resource.getResourceMetalnfo());

}

/**


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

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


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

*/

public static Displayable getlnstance ()

{

return instance;

{

public void commandAction(Command c, Displayable d)

{

if (c == back)

{

URI Entry, get Instanced.display();

}

}

}


Листинг 8.4. Класс HttpResource определяет объект, который на самом деле извлекает сетевой ресурс


import Java.io.InputStream;

import Java.io.lOException;

import javax.microedition.io.Connect ion;

import javax.microedition.io.Connector;

import javax.microedition.io.HttpConnection;


import javax.microedition.Icdui.Displayable;

/**


Данный класс определяет объект helper, используемый классом ResourceDisplay. Он создает соединение с ресурсом HTTP, посылает запрос и получает ответ. Он размещает ответную метаинформацию в буфере. Этот класс предоставляет метод, который дает возможность другому объекту получать эту информацию как объект String асинхронно. Этот класс также записывает результат диагностики в стандартный вывод с целью демонстрации.

Результат появится в окне эмулятора J2MEWTK.

Обратите внимание, что этот класс реализует Runnable.

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


**/

public class HttpResource implements Runnable

private static Displayable instance;

// URI, представляющий выбранный ресурс.

private String uri;

// Буфер для поддержки информации ресурса.

private StringBuffer contents = new StringBuffer();

// Соединение с ресурсом. private Connection conn;

// Ссылка на HTTP-соединение, private HttpConnection httpConn;

// Входной поток соединения, private InputStream is;

// Значение поля атрибута статуса HTTP. private int status = -1;

/**


Конструктор.


@pararc uri URI, указывающий выбранный ресурс.

*/

public HttpResource (String uri)

{

super ();

this.uri = uri;

}

private String userAgentID ()

{

StringBuffer buf = new StringBuffer();

String config =

System.get Property("microedition.configuration");

String profile =

System.get Property("microedition.profiles");

buf.append("Configuration/"); buf.append(config); buf.append!" Profile/");

buf.append(profile); return buf. toStrir.g ();)

/**


Запускает данный объект. Соединяется с URI, посылает запрос, получает отклик и анализирует ответное сообщение.


*/

public void run()

System.out.println("Connection class name = " + conn.getClass(). getName ());

connect (); parse ();

System.out.println(gecResourceMetalnfo());

try conn.close();

}

catch (lOException ioe) System.out.println(ioe.getMessage());

ioe.printStackTrace();

}

}

/**


Соединяется с исходным сервером, который поддерживает URI.

Если произошло исключение во время соединения, этот метод Перехватит его и не выдаст указания на ошибку, за исключением Записи в стандартном результате диагностики.


*/

protected void connect!)

}

try

}

while (true)

{

// Соединение находится в состоянии «установка». conn = Connector.open(uri);

httpConn = (HttpConnection) conn;

httpConn.setRequestProperty("method", HttpConnection.HEAD);

httpConn.setRequestProperty("User-Agent", userAgentID());

// Соединение находится в состоянии «установлено». if (resourceRelocated())

{

uri = httpConn.getHeaderField("location");

// Соединение находится в состоянии «отключено» после

// вызова close().

conn.close();

}

else

}

breaX;

*/

if (serverError())

{

conn.close (); return;

}

// Соединение находится в состоянии «установлено», is = httpConn.openlnputStream ();

System.out.println("Input stream class name = " + is.getClassO.get Name ());

int responseCode = httpCcnn.getResponseCode ();

printResponseCode (responseCode); catch (lOExceptior. ioe)

{

contents.append(ioe.getMessage());

System.out.println(ioe.getMessage());

ioe.printStackTrace();

}

}

private boolean resourceRelocated()

{

boolean relocated = false; try

}

status = httpConn.getResponseCode();

if (status == HttpConnection.HTTP_MOVED_TEMP II

status == HttpConnection.HTTP_MOVED_PERM II

status == HttpConnection.HTTP_TEMP_REDIRECT)

{

relocated = true;

}

}

catch (lOException ioe)

}

System.out.println(ioe.getMessage());

ioe.printStackTrace();

}

return relocated;

}

private boolean serverError ()

{

boolean error = false;

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