如何从MIDlet中调用JSP页面

779 篇文章 0 订阅
<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

  信息工业的下一大改革就是无线化,无线应用程序的好处在于对于一些机构的用处,可以使它们的员工走到哪里都可以高效地访问公司或机构的中心事务或业务数据。因此无线应用程序(比如MIDlet)和外部的企业系统之间的交互就变得非常重要了。但是我们怎么实现这个交互过程呢?这是摆在无线应用程序开发人员面前一个非常大的问题。

  在本文中,我想通过一个例子向大家演示一下MIDlet如何与基于JSP的企业级系统交互。首先,我将讨论一下HttpConnection接口,这个接口可以用来建立Http连接

  1.HttpConnection接口

  ConnectedLimitedDeviceConfiguration(有限连接设备配置。简称CLDC)。提供了一套用于网络连接的类,就是普通连接框架—一种平台独立连接框架,提供了一种分层的连接接口,它的实现操作系统由具体的设备简表提供(比如MobileInformationDeviceProfile(MIDP))。

  MIDP通过提供支持HTTP的HttpConnection框架来实现扩展CLDC的一般连接框架的作用。所有MIDP的应用程序实现都要求支持HTTP,这主要是因为HTTP即可以通过使用基于IP的协议(如TCP/IP)也可以通过使用非IP协议(如WAP)来实现。

  所有的连接都是使用Connector类的open()方法来创建的,如果连接成功的话,这个方法就返回一个实现某种普通连接借口的对象,举一个例子吧,下面的代码段可以用来打开一个到某个URL的HTTP连接。

  Stringurl="http://www.ora.com/whatif.JSP";;

  HttpConnectionconnection=Connector.open(url);

  一旦一个连接被建立后,就可以设置属性了,然后就可以建立I/O流来发送或接收数据。举个例子,请看下面的这一小段代码,用来设置属性并建立输入/输出流。

  //设置HTTP属性

  connection.setRequestMethod(HttpConnection.POST);

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

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

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

  //创建I/O流

  InputStreamis=connection.openInputStream();

  OutputStreamos=connection.openOutputStream();

  下面让我们来研究一个例子,了解一下如何从MIDlet中调JSP,我们调用JSP页面代码的程序段1如下所示:

  代码1:today.JSP

  <%!Stringname;%>

  <%

  name=request.getParameter("name");

  java.util.Datetoday=newjava.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

  importjavax.microedition.lcdui.*;

  importjavax.microedition.MIDlet.*;

  importjavax.microedition.io.*;

  importjava.io.*;

  publicclassInvokeJSPMIDletextendsMIDletimplementsCommandListener{;

  Displaydisplay=null;

  //name字段

  TextFieldname=null;

  formform;

  Stringurl="http://127.0.0.1:8080/examples/JSP/today.JSP";;

  staticfinalCommandcallCommand=newCommand("date?",Command.OK,2);

  staticfinalCommandclearCommand=newCommand("clear",Command.STOP,2);

  Stringmyname;

  publicInvokeJSPMIDlet(){;

  display=Display.getDisplay(this);

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

  form=newform("InvokeJSP");

  };

  publicvoidstartApp()throwsMIDletStateChangeException{;

  form.append(name);

  form.addCommand(clearCommand);

  form.addCommand(callCommand);

  form.setCommandListener(this);

  display.setCurrent(form);

  };

  publicvoidpauseApp(){;

  };

  publicvoiddestroyApp(booleanunconditional){;

  notifyDestroyed();

  };

  voidinvokeJSP(Stringurl)throwsIOException{;

  HttpConnectionc=null;

  InputStreamis=null;

  OutputStreamos=null;

  StringBufferb=newStringBuffer();

  TextBoxt=null;

  try{;

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

  c.setRequestMethod(HttpConnection.POST);

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

  c.setRequestProperty("User-Agent","Profile/MIDP-1.0Configuration/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();

  intch;

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

  b.append((char)ch);

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

  };

  t=newTextBox("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);

  };

  publicvoidcommandAction(Commandc,Displayabled){;

  Stringlabel=c.getLabel();

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

  destroyApp(true);

  };elseif(label.equals("date?")){;

  myname=name.getString();

  try{;

  invokeJSP(url);

  };catch(IOExceptione){;};

  };

  };

  };

  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文档,在以后的文章中我会谈到这个问题的。

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值