网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.一个javaBeans的关于RTTI的问题.
.Shark api 应用:判断流程进行到.
.JavaVM,反射与动态代理.
.Java咖啡的奶茶——Eclipse.
.在Java应用程序中动态分配CPU资源.
.管理人员如何编制性能计划.
.parse 方法.
.用JBoss Eclipse IDE开发J2EE应用.
.Java开发中的事件驱动模型实例详.
.用java实现DB2的自定义函数.
.乘法赋值运算符 (*=).
.JAVA学习入门 对初次接触者 相当.
.设计模式在EJB中的应用(下).
.Hibernate 3.0 beta版本已经发布.
.Java GUI误解 因为外观而拒绝Swi.
.Java技巧101applet间通信的替代方.
.通过Java Swing看透MVC设计模式.
.在运行时将大图分割为小图片数组.
.网络应用程序支持中文的简单试验.
.Java核心代码例程之:RMIExample.

手机与Servlet的网络通信技巧

发表日期:2008-1-5


    随着越来越多手提电话和个人数字助理开始融入到信息高速公路之上,从移动设备上访问Web站点变得越来越重要。只有你实现移动设备与非移动设备互相通信的功能后,你设计的移动设备应用程序才可以称的上是真正有用的。在本文中, 我们将通过一个简单的例子来学习如何实现手机与Servlet的网络通信。该程序经tomcat4.0.6、J2ME的MIDP简表及SUN的J2ME的无线应用程序开发工具包编译、配置和测试通过,同时在手机模拟器上中文显示正常。

    一些参考书都讲了J2ME的网络编程,但我感觉大都有点雷同,并且很少有完整的手机客户端程序以及Servlet服务器端程序,虽然手机与Servlet通信的方法有多种,但经实践与比较,我觉得手机和Servlet通信比较简单的方法就是DataInputStream.readUTF和DataOutputStream.writeUTF的配对使用,比如手机发送数据可以在Connection的输出流中用DataOutputStream.writeUTF依次写入多个参数,相对应的,Servlet打开请求的输入流(request.getInputStream)用DataInputStream.readUTF来依次读出。返回的参数也一样,Servlet用response.getOutputStream打开输出流,并把返回值依次写入,手机端打开Connection的输出流并读出即可。至于多个参数多个返回值都是没有问题的,只是多次使用writeUTF和readUTF罢了。读者可以参考程序中的注释,以及运行结果来理解手机与Servlet是如何传递与返回参数的以及是如何来进行网络通信的。

  手机客户端:

import Javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.*;
import java.io.*;
public class ClientApp extends MIDlet implements CommandListener
{
Display display; TextField tf1,tf2; String tf1Str,tf2Str;
form inputform,returnform;
Command cmdSend,cmdBack;
final static String defaultURL = "http://localhost:8080/examples/servlet/ServletApp";
public ClientApp()
{
display = Display.getDisplay(this);
tf1 = new TextField("input first param:","卢东方",20,TextField.ANY);
tf2 = new TextField("input second param:","王桃群",20,TextField.ANY);
cmdSend = new Command("Send",Command.SCREEN,1);
cmdBack = new Command("Back",Command.SCREEN,1);
inputform = new form("pls input the param:");
inputform.append(tf1); inputform.append(tf2);
inputform.addCommand(cmdSend);
inputform.setCommandListener(this);
}
public void startApp() throws MIDletStateChangeException
{
display.setCurrent(inputform);
}
public void invokeServlet(String url) throws IOException
{
HttpConnection hc = null; DataOutputStream dos = null;
DataInputStream dis = null;
try{
hc = (HttpConnection)Connector.open(url,Connector.READ_WRITE);
//设置请求属性
hc.setRequestMethod(HttpConnection.POST);
//设置为POST请求方式,默认的请求方式是GET
hc.setRequestProperty("IF-Modified-Since","15 Oct 2003 08:47:14 GMT");
hc.setRequestProperty("User-Agent","Profile/MIDP-1.0 Configuration/CLDC-1.0");
hc.setRequestProperty("Content-Language","en-CA");
hc.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
hc.setRequestProperty("Connection","Keep-Alive");
//Connection头可以控制MIDlet和Web服务器之间保持"keep alive"特色。
"keep alive"特色是指在MIDlet和Web服务器间始终使用同一个HTTP连接来多次传递数据
(在通常情况下,HTTP是无连接的协议,每次数据传输完毕后都将断开连接,
而下次传递数据之前将重新建立连接)
//发送请求参数到servlet
dos = hc.openDataOutputStream();
dos.writeUTF(tf1Str); dos.writeUTF(tf2Str);
//用于发送请求参数给servlet
System.out.println("手机传递给servlet的第一个参数为:"+ tf1Str);
//主要起调试的作用,调试的结果将显示在WTK的控制台中
System.out.println("手机传递给servlet的第一个参数为:"+ tf2Str);
dos.flush(); dos.close();
//接收servlet响应数据
ds = new DataInputStream(hc.openInputStream());
String return1Str = dis.readUTF(); String return2Str = dis.readUTF();
System.out.println("手机接收到servlet端传来的第一个参数为:" + return1Str);
//主要起调试的作用,调试的结果将显示在WTK的控制台中
System.out.println("手机接收到servlet端传来的第二个参数为:" + return2Str);
returnform = new form("返回的结果");
returnform.append(return1Str); returnform.append(" ");
//将返回的结果append到resultform中
returnform.append(return2Str); returnform.addCommand(cmdBack);
returnform.setCommandListener(this);
}finally{
if (dis !
上一篇:勿以恶小而为之:Java编程的恶魔 人气:575
下一篇:Java Servlet 编程及应用之八 人气:571
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐