如何從MIDlet中調用JSP頁面

來源:互聯網
上載者:User
js|頁面     首先,我將討論一下HttpConnection介面,這個介面可以用來建立Http串連

  HttpConnection 介面

  Connected Limited Device Configuration(有限串連裝置配置。簡稱CLDC)。提供了一套用於網路連接的類,就是普通串連架構?一種平台獨立串連架構,提供了一種分層的串連介面,它的實現作業系統由具體的裝置簡表提供(比如Mobile Information Device Profile(MIDP))。

  MIDP通過提供支援HTTP的HttpConnection 架構來實現擴充CLDC的一般串連架構的作用。所有MIDP的應用程式實現都要求支援HTTP,這主要是因為HTTP即可以通過使用基於IP的協議(如TCP/IP)也可以通過使用非IP協議(如WAP)來實現。

  所有的串連都是使用Connector類的open()方法來建立的,如果串連成功的話,這個方法就返回一個實現某種普通串連借口的對象,舉一個例子吧,下面的程式碼片段可以用來開啟一個到某個URL的HTTP串連。

String url = "http://www.ora.com/whatif.jsp";;
HttpConnection connection = Connector.open(url);

  一旦一個串連被建立後,就可以設定屬性了,然後就可以建立I/O流來發送或接收資料。舉個例子,請看下面的這一小段代碼,用來設定屬性並建立輸入/輸出流。

// 設定 HTTP 屬性

connection.setRequestMethod(HttpConnection.POST);

connection.setRequestProperty("IF-Modified-Since","22 Dec 2001 16:33:19 GMT");

connection.setRequestProperty("User-Agent","Profile/MIDP-1.0 Configuration/CLDC-1.0");

connection.setRequestProperty("Content-Language", "en-CA");

// 建立I/O流

InputStream is = connection.openInputStream();

OutputStream os = connection.openOutputStream();

  下面讓我們來研究一個例子,瞭解一下如何從MIDlet中調用JSP,我們調用JSP頁面代碼的程式段1如下所示:

  代碼1:

today.jsp

<%! String name; %>

<%

 name = request.getParameter("name");

 java.util.Date today = new java.util.Date();

 out.println("Got: "+name);

 out.println("Date&time: "+today);

%>

  這個JSP也面希望取得一個名為name 的變數的值,一旦這個值被取得,就會建立一個Date的執行個體,然後name和date的值就會被打到用戶端中的輸出資料流中。

  現在,讓我們看看如何寫一個MIDlet來調用這個JSP頁面,我們將使用POST要求方法來調用它,這就意味著被傳送到JSP頁面的資料不是使用URL編碼的,而是以一段單獨的資訊傳入,這段MIDlet代碼如程式碼片段2所示。

  代碼2:

InvokeJSPMidlet.java 

import javax.microedition.lcdui.*;

import javax.microedition.midlet.*;

import javax.microedition.io.*;

import java.io.*;

public class InvokeJSPMidlet extends MIDlet implements CommandListener {;

Display display = null;

// name 欄位

TextField name = null;

form form;

String url = "http://127.0.0.1:8080/examples/jsp/today.jsp";;

static final Command callCommand = new Command("date?", Command.OK, 2);

static final Command clearCommand = new Command("clear", Command.STOP, 2);

String myname;

public InvokeJSPMidlet() {;

display = Display.getDisplay(this);

name = new TextField("Name:", " ", 25, TextField.ANY);

form = new form("Invoke JSP");

};

public void startApp() throws MIDletStateChangeException {;

form.append(name);

form.addCommand(clearCommand);

form.addCommand(callCommand);

form.setCommandListener(this);

display.setCurrent(form);

};

public void pauseApp() {;

};

public void destroyApp(boolean unconditional) {;

notifyDestroyed();

};

void invokeJSP(String url) throws IOException {;

HttpConnection c = null;

InputStream is = null;

OutputStream os = null;

StringBuffer b = new StringBuffer();

TextBox t = null;

try {;

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

 c.setRequestMethod(HttpConnection.POST);

 c.setRequestProperty("IF-Modified-Since", "29 Dec 2001 15:17:19 GMT");

 c.setRequestProperty("User-Agent","Profile/MIDP-1.0 Configuration/CLDC-1.0");

 c.setRequestProperty("Content-Language", "en-CA");

 c.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

 os = c.openOutputStream();

 os.write(("name="+myname).getBytes());

 os.flush();

 is = c.openDataInputStream();

 int ch;

 while ((ch = is.read()) != -1) {;

b.append((char) ch);

System.out.print((char)ch);

 };

 t = new TextBox("Date", b.toString(), 1024, 0);

 t.setCommandListener(this);

 }; finally {;

 if(is!= null) {;

is.close();

 };

 if(os != null) {;

os.close();

 };

 if(c != null) {;

c.close();

 };

};

display.setCurrent(t);

};

public void commandAction(Command c, Displayable d) {;

 String label = c.getLabel();

 if(label.equals("clear")) {;

destroyApp(true);

 }; else if (label.equals("date?")) {;

myname = name.getString();

 try {;

invokeJSP(url);

 };catch(IOException e) {;};

 };

};

};

  InvokeJSPMidlet代碼指定了要被調用的JSP頁面的URL,然後就建立了兩個命令按鈕,然後建立一個text欄位,可以讓使用者在裡面輸入姓名。在InvokeJSP()方法中,將建立一個到這個URL的HTTP串連,然後再建立I/O流,MIDlet使用輸出資料流來發送資料到JSP頁面,接著再使用輸入資料流從JSP頁面中接收資料,注意,在本例中我們將發送姓名到JSP頁面中,其實它也只是向你示範一下資料如何在MIDlet和頁面之間流通。

在程式碼片段2中,應當注意的事情是為了使JSP頁面使用getParameter()從name變數中取得資料的值,你必須設定Content-Type屬性為application/x-www-form-urlencoded.

  小結

  本文只是示範如何從MIDlet中調用JSP頁面,InvokeJSPMidlet還可以很容易的修改來實現調用其他的JSP的目的。但是注意,JSP主要和HTML配合使用,但是如果你的行動裝置中的瀏覽器不能處理HTML的話,那麼XML也是一個非常好的選擇,因為MIDlet可以解析XML文檔。



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.