J2ME开发中如何从MIDlet中调用JSP页面

2016-02-19 18:07 3 1 收藏

get新技能是需要付出行动的,即使看得再多也还是要动手试一试。今天图老师小编跟大家分享的是J2ME开发中如何从MIDlet中调用JSP页面,一起来学习了解下吧!

【 tulaoshi.com - Web开发 】

  首先,我将讨论一下HttpConnection接口,这个接口可以用来建立Http连接

  HttpConnection 接口

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

  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);

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

  一旦一个连接被建立后,就可以设置属性了,然后就可以建立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文档。
  

来源:http://www.tulaoshi.com/n/20160219/1616843.html

延伸阅读
本文主要讲述在MIDP1.0情况下处理开发过程碰到的连续按键事件,结合具体的实例给出一种实用的解决方案。我们知道MIDP中的低级事件处理是通过keyPressed()、keyReleased()和keyRepeated()来处理的,分别在按键被按下、释放和重复按键的时候被触发。 当方法被调用的时候,系统会把所按下键的键值传递给上述的三个方法,根据按键的键值我...
一、序言 昨天在网上闲逛,发现一篇讲解用delphi实现华容道游戏的文章,颇受启发.于是,产生了将华容道游戏移植到手机中去的冲动.现在手机游戏琳琅满目,不一而足,华容道的实现版本也很多.正巧不久前笔者对J2ME下了一番功夫,正想借这个机会小试牛刀。选用J2ME的原因还有一个就是目前Java开发大行其到,无线增殖业务迅猛发展,J2M...
在GCF中提供了DatagramConnection和Datagram两个接口,借助他们我们可以在J2ME中基于UDP协议开发联网应用程序,在MIDP2.0中,添加了UDPDatagramConnection这个接口。他扩展了DatagramConnection并添加了两个方法getLocalAddress()和getLocalPort()。我们知道UDP服务是不可靠的,假如你希望开发更可靠的联网应用的话可以采用SocketConnection,因...
标签: Java JAVA基础
J2ME里面有自带的List类,但是功能太弱,没有实现View和Model的分离,所以操作起来比较费事。本来事想写一个Canvas的TreeList,但是画起来算坐标又太麻烦,所以选取了一个折中的方法,继承List,实现一个操作起来比较方便的组件。 目的: 1.可伸缩的目录树结构,暂时先实现两层。 2.Label和存储内容分离。 3.激活和非激...
无论在midp1.0还是在midp2.0中,系统都没有给我们提供对图片进行伸缩操作的api.但是其实我们只要在程序代码中略施小计,就能达到这个效果,只是效果要比美术做出来的图片,呵呵,差多啦,同时也会造成性能损失。伸缩图片的构造原理就是简单沿x,y轴按比例放缩,比如说我们需要把一张16*16的png图片转化成一张32*32的图片,那么我们可以先对该图片做...

经验教程

279

收藏

94
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部