J2me和Servlet之间的相互通讯

 

做一个远程登陆项目,首先理解下思路,也就是数据传送的流程。

1 , 首先使用j2me 程序的手机发送自己的名字到 servlet 服务器端。

2 servlet 接受到发来的信息,进行验证,成功则发送一条信息,登陆成功。

3 j2me 接受服务器 验证后的数据 再进行一些操作。

基本流程就是上面所说的, 由于涉及的内容比较多,我们要分2 部分来演示该教程。

第一部分 是 编写和配置 Servlet 服务端。

具体编写 Servlet 中的代码我就不多说了,这是J2EE 方面的教程了,我们重点还是关心
j2me
方面的,不过部署方面我会简单详细的演示的。

Servlet 的部分代码还是要提一下的。

MyServlet.java 我这里已经有写好的 Servlet 文件了,

 ServletInputStream input_Stream = request.getInputStream();
 DataInputStream d_Inputstream = new DataInputStream(input_Stream );
 String data_MIDlet = d_Inputstream.readUTF();
 d_Inputstream.close();

 System.out.println( " 从手机上接收过来的信息:" + data_MIDlet  );

这段代码是读取 手机发送过来的名字,也就是接收方面的。

接收后 String record_String = new String( data_MIDlet + " , 成功登陆"  );
就会发送 record_String 字符串返回给 手机, 让使用手机的人知道 已经登陆成功了。

 response.setContentType("application/octet-stream" );
 response.setContentLength( data.length );
 response.setStatus( response.SC_OK );
 OutputStream out_Stream = response.getOutputStream();
 out_Stream.write( data );
 out_Stream.close();
通过response 把信息发送给手机的程序。

===========================

那么如何部署,运行 Servlet 呢? 这可不是一般的.java 文件,

这要借助 Tomcat 来部署运行,还有编译的时候要使用到j2ee 的包,才能编译成功。

例如我们现在就编译一下是否成功, 放在C 盘根目录下,比较方便

然后我们进入 cmd 。开始- 》运行- 》输入cmd 确定

cd / 表示进入 C 盘根目录了。

C:/>dir  列出所有文件

2009-03-28   21:21             1,383 MyServlet.java
可以看到

然后 javac Myservlet.java  出现一大堆错误,呵呵

MyServlet.java:4: 软件包 javax.servlet 不存在
import javax.servlet.*;
^
MyServlet.java:5:
软件包 javax.servlet.http 不存在
import javax.servlet.http.*;
^
那是因为找不到需要的包啊。

不过不用担心 tomcat 有提供需要的包。

下面安装 tomcat5.5 ,这也可以说不叫安装吧,因为我找的这个版本解压就可以用
到时我放上 www.17rumen.com 网站上去, 和视频文件 放在同一个下载页面吧,就可以下载了。

或者你们也可以到网上下载。好,我把它解压到C 盘根目录。

想编译刚才的程序,还要配置环境变量。看我操作,

classpath 最后加入 ;C:/apache-tomcat-5.5.20/common/lib/servlet-api.jar

然后确定,再编译 MyServlet.java 文件  , 要先关闭 当前的cmd 窗口。

C:/>javac MyServlet.java
注意: MyServlet.java 使用了未经检查或不安全的操作。
注意: 要了解详细信息,请使用 -Xlint:unchecked 重新编译。

这个可以不用管它,成功编译了。

========================================
下面进行部署,也就是在 tomcat 下运行 MyServlet

C:/apache-tomcat-5.5.20/webapps   目录下新建 j2me_servlet 文件夹,小写吧,比较习惯

然后进入文件夹 再新建一个 WEB-INF 文件夹, 再进去新建一个文件夹 classes 和一个 web.xml 文件。

呵呵,要新建的东西还不少啊。

然后就是编写 web.xml 了,我们这里为了演示就可以简单写了。

记事本打开 web.xml 文件 , 内容如下:

<web-app>
 <servlet>
  <servlet-name>MyServlet</servlet-name>
  <servlet-class>MyServlet</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>MyServlet</servlet-name>
  <url-pattern>/MyServlet</url-pattern>
 </servlet-mapping>
</web-app>

简单讲一下 <url-pattern>/MyServlet</url-pattern> 也就是访问 /MyServlet
就会访问我们刚才编写的 MyServlet servlet 文件了, 不明白没关系。

我们演示下效果先。把刚才编译的 MyServlet.class 放入 classes 目录下.

好,下面启动一下 tomcat , 运行 C:/apache-tomcat-5.5.20/bin 目录下 startup.bat

就可以了。 出现错误了,提示 web.xml 文件有个标签写错了. 好了,现在改过来了。

重新运行一下 tomcat 吧。 成功运行了

 

 

下面我们常见一个J2me 项目, 命名为: J2me_Servlet

创建好了就进去代码目录 进行编写代码了。

 

 String url="http://192.168.1.8 ";
 HttpConnection httpcon=null;

url 是设置Servlet 服务端的地址, HttpConnection 是一个链接用的类,同时也是输入输出
所需要的。我先写一下本机的ip

==============================
然后我们就是要链接方面的代码了。
这是向Servlet 服务端发送数据的代码,例如:我要发送一个名字给服务端
   try
   {
    ByteArrayOutputStream byte_out=new ByteArrayOutputStream();
    DataOutputStream data_out=new DataOutputStream(byte_out);
    data_out.writeUTF( "Jame" ); //
发送Jame
    data=byte_out.toByteArray();
    byte_out.close();
    data_out.close();
    
    new Thread(this).start();
   }catch(Exception e){} 

new Thread(this).start();  这是启动线程的代码
===================================
 public void run()
 {
  OutputStream out=null;
  InputStream in=null;
  StringBuffer buffer=new StringBuffer();
  try
  {
   httpcon=(HttpConnection)Connector.open(url);
   httpcon.setRequestMethod(HttpConnection.POST);
   out=httpcon.openOutputStream();
   out.write(data);
   if(httpcon.getResponseCode()==HttpConnection.HTTP_OK)
   {

                                DataInputStream data_In = new DataInputStream(httpcon.openInputStream() );
                                int number = data_In.readInt();
                                while( number-- > 0 )
                                {
                                        System.out.println(data_In.readUTF() );
                                }
    
   }
  }catch(Exception ee)
  {}finally{
   try
   {
    httpcon.close();
   out.close();
   in.close();
   }catch(Exception ex){}
   
  }
  
 }
在接收数据方面我们使用到 线程, 这是因为如果服务器长时间没有反应,我们的程序也不会一直
等待,我们还是可以正常运行程序的。

由于使用到线程,所以我们要继承 implements Runnable 这个接口。

import javax.microedition.io.*;
import java.io.*;
记得要添加的数据包。 好了 我们编译一下。

好了,忘记把代码写入文件,现在再编译一下 。Build complete

我们还不能运行,我们先打开昨天我们Servlet 服务端,还记得吧,运行tomcat

然后我们写正确的URL tomcat 服务端默认端口是8080 的。

String url="http://192.168.1.8:8080/j2me_servlet/MyServlet ";
完整的 Servlet 路径, 当然这是我的ip ,如果里ip 不一样 请修改

保存后再编译一下,然后就运行测试,这里它问是否链接到我们的URL 地址,

我们选择 Yes

看到了吧, Servlet 服务端 显示一条信息 ,接收到 手机发来的信息:Jame

然后返回 Jame, 登陆成功 的信息给 手机,手机最后得到信息 打印出来了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值