111111
精灵王
精灵王
  • 注册日期2010-12-08
  • 发帖数640
  • QQ
  • 火币1103枚
  • 粉丝120
  • 关注75
  • 社区明星
阅读:3933回复:0

J2ME程式和Servlet通讯访问Access数据库-JSP教程,数据库相关

楼主#
更多 发布于:2011-01-08 20:29
目前j2me连网的技术非常多,本人也只是刚刚接触这方面,这几天帮别人调试了一些这方面的程式,学到了不少东西,下面就谈谈我学习的过程.

首先这种程式能简化的分解成三个层面,
1,j2me的客户端(midlet程式)
2,服务器端的servlet(servlet程式)
3,数据库(access或是sql等)

下面我通过一个小例子来实现通过手机客户端发送请求,然后服务器端的servlet响应,servlet通过查询access数据库的内容 ,返回给手机客
户端并显示出来。
非常简单的一个东西却涉及到非常多步骤。
研发环境:
操作系统: windows 2000 professional
jdk版本: 1.4.2
wtk版本: 2.1
tomcat版本:5.0

如果你还不明白jdk wtk  tomcat 是什么东西的话,建议你补习一下基础知识,这里我就不说明了。
jdk的版本,一定要是1.4.0以上的,也许你用的低版本的并且和tomcat的低版本兼容也不错。不过我试过用 tomcat5.0 + jdk1.0.3 就会报错
,无法启动tomcat服务器.在tomcat的log中,是这样写的"unsuported jni version 65537" 所以我采用相对高版本的jdk。
设置好环境变量,这里也不多说了。测试一下你的环境变量。在cmd窗口,输入java - version 看看jdk的版本。输入javac 看看是否报错,无
错就证实jdk的环境变量设置正确了。
然后我们编辑j2me的客户端程式,程式由两个类构成。本人不是什么高手,所以程式只能是实现功能为目的,并没有体现什么优化的价值。
---------------------------------netmain.java-----------------------------------------------------
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;


public class netmain extends midlet implements commandlistener//继承midlet 实现commandlistener接口
{
 private display dis;
 sendmsg sm;
 private command sd = new command("连接",command.ok,1);//发送数据的按钮
 public netmain()
 {
  dis = display.getdisplay(this);//得到显示对象
 }
 
 public void startapp()
 {
  form f = new form("连网测试");//显示在屏幕的form对象
  f.append("发送数据");
  f.addcommand(sd);
  f.setcommandlistener(this);//设置按钮监听
  dis.setcurrent(f);
 }

public void pauseapp()
 {
 }
 public void destroyapp(boolean un)
 {
 }
 public void exit()
 {
  destroyapp(false);
  notifydestroyed();
 }
 public void commandaction(command c,displayable d)
 {
  if(c == sd)
  {
   sm = new sendmsg(this);//调用sendmsg类,将本类作为参数传入
   dis.setcurrent(sm);//显示sendmsg类
  

 }
}
}
------------------------------------------------------------------------------------------
------------------------------------sendmsg.java------------------------------------------------------
import javax.microedition.lcdui.*;
import javax.microedition.io.*;
import java.io.*;


public class sendmsg extends form implements commandlistener,runnable//继承form 实现commandlistener和runnable接口
{
 string url = "http://127.0.0.1:8080/returnmsg";// 定义连网用的url
 string returnmsg=""; //获得返回字符串
 command exit=new command("离开",command.exit,1);//退出程式的按钮
 thread t;//定义连网用线程
 netmain nm;//netmain的实例
 
 public sendmsg(netmain nm)//构造函数,将netmain的实例传入
 {
  super("返回结果");//定义form的标题
  this.nm = nm;
  t = new thread(this);
  t.start();//启动线程
  
 }
 public void run()
 {
  try
  {
   returnmsg = sendhttpget(url);

//将url传到sendhttpget方法里做参数,并返回服务器结果的字符串赋值给returnmsg
  
   //system.out.println(returnmsg);
   append(returnmsg);//显示出返回结果
   addcommand(exit);
   setcommandlistener(this);
  
  }catch(exception e)
  {
   system.out.println(e);
  }

}
 public string sendhttpget(string url) throws ioexception
 {
  httpconnection hconn = null; //定义http连接的对象
  datainputstream dis = null; //定义数据输入流
  stringbuffer msg = new stringbuffer() ; //创建一个stringbuffer存放收到的字符串
  string s="";
  try
  {
  hconn = (httpconnection)connector.open("http://localhost:8080/returnmsg");//得到连接对象
  dis = new datainputstream(hconn.openinputstream());//用得到的对象的数据流做参数 再作为参数构成数据输入流
  
  while(dis.readutf()!= null) //判断当数据流不为空的时候
  {
   msg = msg.append(dis.readutf());//用readutf()方法构造字符串 放在stringbuffer里
  }
  
  }catch(exception e){}
  finally
  {
   if(hconn != null)//关闭连接
    hconn.close();
   if(dis != null)
    dis.close();

 }
  
  return msg.tostring();//将得到的stringbuffer 通过tostring()方法,生成新的string并返回

}
 public void show()
 {
  
 }
 public void commandaction(command c,displayable d)
 {
  if(c == exit)
  {
  
   nm.exit();//退出程式

 }
 }
}
-------------------------------------------------------------------------------------------------------------------

以上的两个类,注释应该能看明白。首先是个form,上面放了一个按钮,当按按钮的时候,启动连网线程,连接url,然后返回一个字符串,
显示在一个新的form里。非常简单是吧,呵呵。
下面我们来设计服务器端的部分。主要就是写一个servlet程式。下面是程式代码
-----------------------------------------returnmsg.java----------------------------------------------------------------------

----
import java.sql.*;
import javax.sql.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class returnmsg extends httpservlet
{
 public void doget(httpservletrequest req,httpservletresponse res)throws servletexception,ioexception
 {
  res.setcontenttype("text/html; charset=gb2312");//设置返回的类型
  
  servletoutputstream out = res.getoutputstream();//得到输出流
  
  dataoutputstream dos = new dataoutputstream(out);
    
  dos.writeutf("这是测试结果");
  dos.writeutf("下面是数据信息");
  connection conn = null;
  resultset rs = null;
  statement stmt = null;
  
 
  try
  {
  
   string drname = "sun.jdbc.odbc.jdbcodbcdriver";//这些是连接数据库的驱动
  
   class.forname(drname);
  
   string url = "jdbc:odbc:mydata";
  
   conn = drivermanager.getconnection(url);
  
   stmt = conn.createstatement();
   rs = stmt.executequery("select * from user");//查询数据库表 表名为user
  
   while(rs.next())
   {
    dos.writeutf("用户id:"+rs.getstring("id"));//得到字段id 和字段name 内容
    dos.writeutf("用户名:"+rs.getstring("name"));
   }
   rs.close();
   stmt.close();
   conn.close();


 }catch(exception e)
  {
  
  }
 }
}
---------------------------------------------------------------------------------------------------------
首先把写好的returnmsg.java程式要进行编译,生成.class文件。我们把生成好的class文件放在 tomcat 目录下的

webapps/root/web-inf/classes/ 里面,注意路径一定不要错。
然后还要编辑web-inf目录下面的web.xml文件.
再里面加入这些信息:
--------------------------------------------------------
 <servlet>
        <servlet-name>returnmsg</servlet-name>
        <servlet-class>returnmsg</servlet-class>
    </servlet>

   <servlet-mapping>
        <servlet-name>returnmsg</servlet-name>
        <url-pattern>/returnmsg</url-pattern>
    </servlet-mapping>
    ----------------------------------------------------
    你能把原来里面的这些内容删除掉。
    
    注意:如果你在cmd 下面编译returnmsg.java文件时候,出现import javax.servlet.*;错误的时候,记得要在环境变量里面填加一句,比

如在classpath里面加上
    c:\program files\apache software foundation\tomcat 5.0\common\lib\servlet-api.jar 就是填加servlet api的搜索路径.

  然后我们还需要用access生成一个数据库文件,表名就是user,里面有几个字段 分别为id 自动编号就行,name 随便加几个名字。然后要
把数据库作为数据源进行连接。
   由于我们的系统是windows 2000 所以在 开始---设置----控制面板-----管理工具---数据源odbc   点"添加" 注意要在系统的dsn里面 操

作,然后把你的数据库放在一个
   没有中文字符路径中, 选择他就能了。数据源的名称就是mydata


   目前我们能启动tomcat服务器了,然后测试一下我们刚才写的servlet,  我们打开ie浏览器  输入http://127.0.0.1:8080/returnmsg
来看看效果吧,,,,,,
    什么?什么都没出现吗,呵呵,,因为我们并没有向浏览器里面输出什么,当然什么也没有,,,你能查看原文件,如果里面有你数据

库的信息,那么就是连接成功了。servlet一切正常。

   最后我们打开 wtk 新建工程文件,把前面我们写的那两个类 放在scr里面,然后 build一下,然后run  点"连接" ,这时候模拟器中,就
会出现和刚才在ie原文件里面相同的文字了。
    是不是非常开心。呵呵!

   
当然在实际研发中,不会只实现如此简单的功能。我也在不断的摸索和学习中,希望各位朋友也谈谈你们在学习过程中的心得。我的qq:19197

更多黑客技术 黑客软件 计算机技术 编程技术 网站技术 QQ技术 IT新闻 黑客基地 请访问 灯火安全联盟  灯火黑客 www.hack8888.com/bbs

喜欢0 评分0
游客

返回顶部