Fejlett Webes Technolgik II Bilicki Vilmos 2002 11
Fejlett Webes Technológiák II. Bilicki Vilmos 2002. 11. 04
A mai előadás tartalma l l l Over The Air (OTA) leírás Hálózat használat Feladatok, Csoportok, Menetrend
MIDlet telepítése: l Teszt célra: l Tömegesen: • soros port • infravörös kapcsolat • blouetooth • OTA
OTA beállítások l Web szerver: l Mime: • IIS, Apache, … • . jad • . jar text/vnd. sun. j 2 me. app-descriptor application/java-archive
HTML, VML példa
Letöltés, Telepítés l l JAM -> JAD fájl letöltése Futtatható-e az adott készüléken Ha igen akkor a megadott URL-ről a JAM letölti a JAR fájlt Ekkor küldhet értesítést a szervernek
JAD fájl l l l l MIDlet-Name: r MIDlet-Vendor: Vilmos Bilicki MIDlet-Version: 1. 0 MIDlet-Jar-Size: 1411 MIDlet-Jar-URL: http: //cab. uszeged. hu/~bilickiv/r. jar MIDlet-1: hello. World, , teszt. hello. World Micro. Edition-Configuration: Micro. Edition-Profile:
Hálózat használó MIDlet l l Funkciók: • összeadás, szerver segítséggel SUMMIDlet • • Sum. MIDlet Sum. Screen Http. Poster. Listener
Osztály felépítés
Sum. MIDlet. java import javax. microedition. midlet. *; import javax. microedition. lcdui. *; import java. io. IOException; public class Sum. MIDlet extends MIDlet { private final Sum. Screen screen; private final Http. Poster http. Poster; public Sum. MIDlet() { String servlet. Url = get. App. Property("Servlet-URL"); http. Poster = new Http. Poster(servlet. Url); screen = new Sum. Screen(this, http. Poster); } public void start. App() {Display. get. Display(this). set. Current(screen); } public void pause. App() { } public void destroy. App(boolean unconditional) { } void sum. Screen. Quit() { http. Poster. abort(); destroy. App(false); notify. Destroyed(); }}
public class Http. Poster implements Runnable { private String url; private volatile boolean aborting = false; private Vector request. Queue = new Vector(); private Vector listener. Queue = new Vector(); public Http. Poster(String url) { this. url = url; Thread thread = new Thread(this); thread. start(); } public synchronized void send. Request(String request, Http. Poster. Listener listener) throws IOException { request. Queue. add. Element(request); listener. Queue. add. Element(listener); notify(); // wake up sending thread }
public void run() { running: while (!aborting) { String request; Http. Poster. Listener listener; synchronized (this) { while (request. Queue. size() == 0) { try { wait(); // releases lock} catch (Interrupted. Exception e){} if (aborting) break running; } request = (String)(request. Queue. element. At(0)); listener = (Http. Poster. Listener)(listener. Queue. element. At(0)); request. Queue. remove. Element. At(0); listener. Queue. remove. Element. At(0); } do. Send(request, listener); } }
private void do. Send(String request, Http. Poster. Listener listener) { Http. Connection conn = null; Input. Stream in = null; Output. Stream out = null; String response. Str = null; String error. Str = null; boolean was. Error = false; try{ conn = (Http. Connection)Connector. open(url); conn. set. Request. Method(Http. Connection. POST); conn. set. Request. Property("Content-Length", Integer. to. String(request. length())); out = conn. open. Output. Stream(); int request. Length = request. length(); for (int i = 0; i < request. Length; ++i) { out. write(request. char. At(i)); } in = conn. open. Input. Stream(); String. Buffer response. Buf; long length = conn. get. Length(); if (length > 0) { response. Buf = new String. Buffer((int)length); } else { response. Buf = new String. Buffer(); } int ch; while ((ch = in. read()) != -1) {response. Buf. append((char)ch); } response. Str = response. Buf. to. String(); String rewritten. Url = conn. get. Header. Field("X-Rewritten. URL"); if (rewritten. Url != null) {url = rewritten. Url; }}
catch (IOException e) { was. Error = true; error. Str = e. get. Message(); finally { if (in != null) { try{ in. close(); } catch (IOException e){ }} if (out != null) { try {out. close(); } catch (IOException e){}} if (conn != null) {try{ conn. close(); } catch (IOException e){}} } if (was. Error) {listener. handle. Http. Error(error. Str); } else {listener. receive. Http. Response(response. Str); } } public void abort() { aborting = true; synchronized (this) { notify(); } }
Http. Poster. Listener interfész public interface Http. Poster. Listener { void receive. Http. Response(String response); void handle. Http. Error(String error. Str); }
class Sum. Screen extends Form implements Command. Listener, Http. Poster. Listener { private final Sum. MIDlet midlet; private final Http. Poster http. Poster; private final Text. Field input. Field; private final String. Item output. Field; private final Command send. Command; private final Command quit. Command; private volatile boolean ready. For. Input = true; Sum. Screen(Sum. MIDlet midlet, Http. Poster http. Poster) { super("Sum"); this. midlet = midlet; this. http. Poster = http. Poster; input. Field = new Text. Field("Input: ", "1", 8, Text. Field. NUMERIC); append(input. Field); output. Field = new String. Item("Output: ", "0"); append(output. Field); send. Command = new Command("Send", Command. SCREEN, 2); add. Command(send. Command); quit. Command = new Command("Quit", Command. EXIT, 2); add. Command(quit. Command); set. Command. Listener(this); }
public void command. Action(Command c, Displayable d) { if (c == quit. Command) { midlet. sum. Screen. Quit(); } else if (ready. For. Input) { if (c == send. Command) { try { String request. Str = input. Field. get. String(); http. Poster. send. Request(request. Str, this); ready. For. Input = false; } catch (IOException e) { output. Field. set. Text("Error"); } public void receive. Http. Response(String response) { output. Field. set. Text(response); ready. For. Input = true; } public void handle. Http. Error(String error. Str) { output. Field. set. Text("Error"); ready. For. Input = true; } } }
Sum. jad MIDlet-Name: Sum MIDlet-Vendor: Forum Nokia MIDlet-Version: 1. 2. 0 MIDlet-Jar-Size: 5706 MIDlet-Jar-URL: Sum. jar MIDlet-1: Sum, /sum. png, example. sum. Sum. MIDlet-Description: Sum MIDlet Servlet-URL: http: //localhost: 8080/sum
Feladatok, Csoportok, Menetrend l Csoportok: • • Legalább 3 fős csoportok Egy vezető aki hetente elküldi az adott csoport jelentését: • e-mailben: bilickiv@inf. u-szeged. hu • a csoport tagjainak is másolatban (carbon copy) • Tárgy: fwt 2: a csoport sorszáma, jelentés száma (1. az • első) pl. : (fwt 2: 1, 1) Tartalom: az előző héten elvégzett munka, a következő hétre tervezett munka (az első levélben a feladat részletes leírása, az egyes személyek feladatai)
Menetrend l l Befejezés dátuma: legkésőbb 2003. 01. 24 16 óra Fogadóóra: • hétfőnként 9 -11 -ig, az Árpád tér 48 -ban • bármikor csak előtte egyeztetetni kell (hogy ott legyek) időpontokban is lehet találkozni
Feladatok: l Tudományos számológép (~10 fő): • • http: //education. ti. com/us/product/tech/30 xii s/features/bid. html grafikus függvény ábrázolás
Feladat szervező (~8 fő) l Hasonló mint: • http: //education. ti. com/downloads/guidebooks/ eng/83 orgnzr. pdf
Online sakk program(~8 fő): l l Kliens, szerver alkalmazás Legyen lehetőség félbehagyott játszmák, elmentett játszmák elkezdésére Szükség van a szerver oldali kódra is (JSP, Java. Servlet)! Legyen arra is lehetőség, hogy a gép ellen játszunk
Online kártya program(~8 fő): l l Kliens, szerver alkalmazás Legyen lehetőség félbehagyott játszmák, elmentett játszmák elkezdésére Szükség van a szerver oldali kódra is (JSP, Java. Servlet)! Legyen arra is lehetőség, hogy a gép ellen játszunk
C 64 -es, spektrum játékok …
- Slides: 26