Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы. Мобильные устройства.doc
Скачиваний:
2
Добавлен:
01.05.2019
Размер:
1.8 Mб
Скачать

Развертывание Servlet-а

Для развертывания servlet-а вы должны вспомнить о web приложениях. Итак, Web приложение представляет собой набор статичного контента, такого как HTML файлы, рисунки, servlet-ы, и другие ресурсы, к которым может быть предоставлен доступ через web интерфейс. Tomcat поставляется вместе с несколькими встроенными web приложениями. Загляните в папку webapp, изучите примеры.

Итак, Вы создали web-приложение, когда создали его каталог. Заполним его. Web приложение имеет стандартную для спецификации servlet-ов структуру каталогов. Мы не будем здесь подробно останавливаться на этом. Большую долю web приложения занимает файл web.xml, который описывает различные части web приложения. Этот файл создается для любого web приложения в папке WEB-INF/web.xml. Настало время создать файл web.xml. Настало время сделать так, чтобы наше приложение было доступно по адресу /hits. Заметьте, что адрес для servlet-а является относительным. Полный путь будет http://localhost:8080/midp/hits. Скопируйте следующий текст и сохраните его в папке webapps/midp/WEB-INF/web.xml внутри Tomcat каталога.

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app

PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

<servlet>

<servlet-name>bob</servlet-name>

<servlet-class>HitServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>bob</servlet-name>

<url-pattern>/hits</url-pattern>

</servlet-mapping>

</web-app>

Этот файл скажет Tomcat-у где искать servlet с именем HitServlet. Servlet-name внутренний по отношению к web.xml; он проводит servlet элемент к элементу servlet-mapping. Имя bob взято произвольно. Вы можете использовать любое другое имя.

Чтобы протестировать приложение, запустите браузер и наберите адрес http://localhost:8080/midp/hits. Вы должны увидеть результат выполнения HitServlet. Перезагрузите страницу несколько раз. Если Вы все сделали правильно, счетчик должен увеличиваться.

Как обратиться к Servlet-у из miDlet-а

Итак, Вы уже создали MIDP-приложение и servlet. Настало время сцепить их вместе, чтобы создать end-to-end Java приложение. MIDlet-ы могут соединяться с внешним миром по HTTP протоколу, и servlet, который Вы только что написали, доступен по HTTP. Таким образом, не составляет большого труда заставить их работать вместе.

Запустите KToolbar и откройте MIDlet, который мы создали в предыдущей части. Мы хотим создать новый MIDlet, который будет соединяться с нашим servlet-ом, получая результат работы servlet-а и выводя его на экран. Ниже приводится код MIDlet-а.

import java.io.*;

import javax.microedition.io.*;

import javax.microedition.lcdui.*;

import javax.microedition.midlet.*;

public class HitMIDlet

extends MIDlet

implements CommandListener {

private Display mDisplay;

private Form mMainForm;

private StringItem mMessageItem;

private Command mExitCommand, mConnectCommand;

public HitMIDlet() {

mMainForm = new Form("HitMIDlet");

mMessageItem = new StringItem(null, "");

mExitCommand = new Command("Exit", Command.EXIT, 0);

mConnectCommand = new Command("Connect",

Command.SCREEN, 0);

mMainForm.append(mMessageItem);

mMainForm.addCommand(mExitCommand);

mMainForm.addCommand(mConnectCommand);

mMainForm.setCommandListener(this);

}

public void startApp() {

mDisplay = Display.getDisplay(this);

mDisplay.setCurrent(mMainForm);

}

public void pauseApp() {}

public void destroyApp(boolean unconditional) {}

public void commandAction(Command c, Displayable s) {

if (c == mExitCommand)

notifyDestroyed();

else if (c == mConnectCommand) {

Form waitForm = new Form("Waiting...");

mDisplay.setCurrent(waitForm);

Thread t = new Thread() {

public void run() {

connect();

}

};

t.start();

}

}

private void connect() {

HttpConnection hc = null;

InputStream in = null;

String url = getAppProperty("HitMIDlet.URL");

try {

hc = (HttpConnection)Connector.open(url);

in = hc.openInputStream();

int contentLength = (int)hc.getLength();

byte[] raw = new byte[contentLength];

int length = in.read(raw);

in.close();

hc.close();

// Show the response to the user.

String s = new String(raw, 0, length);

mMessageItem.setText(s);

}

catch (IOException ioe) {

mMessageItem.setText(ioe.toString());

}

mDisplay.setCurrent(mMainForm);

}

}

Главный экран HitMIDlet-а похож на HelloMIDlet, но он включает две команды EXIT и Connect. Connect, которая создает отдельный поток и вызывает метод connect(), который заботится о сетевом соединении и получении результата.

Скопируйте этот код в свой редактор и сохраните его как HitMIDlet.java внутри папки apps/HelloSuite/src в J2ME Wireless Toolkit директории.

Есть еще две вещи, о которых нужно позаботиться. Во-первых, вы должны сказать toolkit-у об этом новом MIDlet-е. Щелкните Settings..., затем выбирете MIDlets. Нажмите Add и введите в полях имени класса и MIDlet-а значение "HitMIDlet". Можете оставить поле Icon незаполненным. Нажмите OK. Вы должны увидеть HelloMIDlet и HitMIDlet.

Теперь Вам надо определить, каким образом будет устанавливаться соединение. (Это свойство задается в третьей строке метода connect()) Щелкните Settings... внутри toolkit-а, затем выберите User Defined. Нажмите кнопку Add. Напишите в поле property name HitMIDlet.URL. Поле value должно содержать URL, по которому доступен HitServlet — тот самый путь, который вы вызывали в браузере, когда тестировали servlet. Нажмите OK.

Теперь нажмите Build, чтобы выполнить компоновку приложения. Предположим, Вы не получили никаких сообщений об ошибках. Все готово. Осталось протестировать приложение. Запустите Servlet. Затем нажмите Run и выберите HitMIDlet. Выберите команду Connect. Если все было сделано правильно, HitMIDlet обратится к HitServlet и покажет результат на экране эмулятора.