J2ME程序与Servlet通讯访问Access数据库

作者:关文柏 时间:2005年5月26日


现在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

1016 MSN:k7sem_88@hotmail.com

java c/s结构连接池 应用与c/s结构的数据库连接池 简单实用 立即下载

相关推荐

Flex3通过Servlet连接数据库(源码+Access)

本程序演示了Flex如何通过servlet连接数据库(Access)然后取出数据在前台显示。使用的是<mx:HttpService>给后台传递数据的方法。

unknown source怎么解决?unknown source是什么意思【详解】

unknown source怎么解决?unknown source是什么意思【详解】 1.如果我们非要对jdk的类库如rt.jar进行跟踪调试怎么办? 因为rt.jar编译打包的时候,是不包含调试信息的。如果你只是想看看调用的过程,你只需要在eclipse中rt.jar下的Source attachment指定jdk安装目录的src.zip即可。不过如果你想跟踪jdk类库的变量值的时候,这样就不行了。除非,只有一种办法,你重新编译一下src.zip,指定好编译参数,然后用新编译好的rt.jar覆盖掉原来的

dhyuan_88的博客 10000

java C/S架构《酒店管理系统》(含源码,数据库,设计说明)

吐血共享了。。。这个是还没在互联网上公布的代码。第一次发放。本系统提供普通二星级酒店的必要功能,可动态的进行与房间信息相关的所有操作,对于宾客,可执行散客和团体开单两种方式,可为宾客预定房间,可为不同的宾客设置不能种类房间的折扣及其优惠设置,本系统可动态显示当前所有房间的信息。整个程序用MyEclipse制作完成。在JDK1.5环境下运行通过。数据库环境为:SqlServer2000+SP4运用到的技术:1.基于MVC设计模式2.配置文件的读取。3.线程操作4.接口5.Swing事件处理6.实现了类似QQ的滑动菜单7.程序读取画面运用到的东西我就不再说了。压缩包中有全套的说明文档(包括需求说明,详细设计说明,数据库设计文档,用户手册)。数据库也在包里....希望大家多给顶顶!~~如果没分的朋友请留下邮箱号,我有时间会给你发的(2分对于这样的资源来说已经近乎于免费了)

在Servlet中连接Access

Connection conn = null; Statement stmt = null; ResultSet rs = null; try{ String MdbPath = n...

weixin_30627381的博客 169

两路半桥LLC谐振变换器软开关Simulink仿真(模拟谐振参数不同、分裂电容)

内容概要:本文介绍了“两路半桥LLC谐振变换器软开关Simulink仿真”资源包,重点在于基于Simulink平台对两路半桥LLC谐振变换器进行高精度建模与动态仿真,特别考虑了谐振参数不一致及分裂电容等非理想工况对系统性能的影响。该仿真模型不仅涵盖了主电路拓扑、软开关实现机制与谐振网络设计,还深入分析了不同参数配置下系统的启动特性、稳态效率、动态响应及软开关条件的满足情况。通过参数扫描与对比仿真,帮助用户掌握LLC变换器的关键设计要素与优化方法,具备较强的工程指导价值和科研教学意义。; 适合人群:电力电子、电气工程及其自动化等相关专业的高校师生,以及从事高频开关电源、新能源变换器、车载充电机等领域的研发工程师和技术人员。; 使用场景及目标:① 掌握两路并联半桥LLC谐振变换器的建模与仿真方法;② 理解软开关技术在提升变换器效率与降低EMI方面的关键作用;③ 分析谐振参数偏差与分裂电容结构对系统均流特性、增益曲线及软开关范围的影响;④ 支持科研项目中的拓扑验证、控制策略开发与故障工况分析; 阅读建议:建议结合Simulink仿真模型与配套说明文档进行学习,重点关注谐振腔参数设置、驱动时序设计及软开关波形观测;可通过调整谐振电感、电容值或引入参数失配,观察系统行为变化,深入理解LLC变换器的稳定边界与优化设计原则。

Python自动化:3分钟搞定微信收藏链接批量导出到TXT(附完整代码)

本文介绍如何使用Python自动化工具在3分钟内将微信收藏链接批量导出到TXT文件。通过模拟人类操作和OCR技术,脚本高效处理大量链接,显著提升工作效率,并附有完整代码和实战避坑指南。

weixin_29062671的博客 631

(附源码)ssm汽车订票系统-毕业设计 课程设计061801

前台用户可分为未注册用户需求和以注册用户需求。 未注册用户的功能如下: 注册账号:用户填写个人信息,并验证手机号码。 浏览热门路线推荐数据:用户可以浏览主页面的路线推荐数据来了解系统的最新热门路线。 浏览车次:用户可以根据车票类型浏览车次的信息,并选中某个车次查看详情,例如:班车、车型、价格、线路、出发时间、车票价格、姓名、联系电话、出行日期、预订人、是否支付等。 已注册用户的功能如下: 登录:根据账号密码进行登录操作。 维护个人信息:用户因个人信息的变更可以随时修改自己注册信息。 浏览评论信息:选中某车次

Q_3461074420的博客 1131

YOLO11实战 第010期-基于yolo11的农业杂草作物目标检测实战文档(详细教程)

通过这条曲线,用户可以评估模型的检测能力,分析模型在不同阈值下对真实目标的检测是否全面。通过这条曲线,可以评估模型在目标检测任务中的整体性能,并找到合适的置信度阈值,以在精确率和召回率之间做出最佳平衡。PR 曲线越接近右上角,模型性能越好,曲线下方的面积越大,说明模型在不同置信度下的。),它展示了不同置信度下的召回率。条曲线都显示了随着召回率的增加,精确度略有下降的趋势,但整体上精确度保持在很高的水平。通过这条曲线,可以选择合适的置信度阈值,以优化模型的检测结果,平衡精确率和召回率。反映了分类器的准确性。

深度学习算法工程师,专注于前沿算法研究与实战应用。在这里,我将分享深度学习领域的实战经验、优质数据集资源以及最新论文解读与精度分析,旨在与广大技术爱好者共同探索人工智能的奥秘,助力技术成长与创新。 1525

工作中使用到的单词(软件开发)

1.エイリアス   alias 别名 powershell使用 get-help 命令时,会得到与此命令 相关(别名)的命令 2.プロキシ proxy 代 理 3.プロモート   promote 促进,提升   开发的系统新功能上线发布,有时会使用到这个词,比如 STプロモート 还有使用リリース这个词的。比如STリリース。个人认为两者含义相同。 4.見逃し み................................................................

sun0322 6万+

PID温控实验平台搭建(二)——PID进阶知识介绍及源码分享

最近,我突发奇想去翻阅了一些我本科期间所做的一些小项目,发现都挺有意思的!希望通过我的讲解文章可以帮助你们少走一些弯路!今天,我要分享的是一个PID温控实验平台的搭建,这是一个系列文章,手把手地教你学习和认识PID算法,了解这种算法在温度控制中的应用。由于我知识有限,如果出现一些错误,希望大家可以帮助我指出来,我们一起学习进步!!!

qq_35953617的博客 8050

【鸿蒙南向开发】OpenHarmony音频驱动audio适配方案

这份鸿蒙(HarmonyOS NEXT)文档包含了鸿蒙开发必掌握的核心知识要点,内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、OpenHarmony南向开发、鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。

HarmonyOS_666的博客 4518

趣味小程序

/**编写一个程序,读入一个正方形的边长,输出一个空心的正方形。**@author 关文柏 */ import java.io.*; public class abc{ int m; //int[][] rect = new int[m][m];   abc() {   System.out.println("Please input the value:");   input();   show...

java2000.net 343

从仿真到打样:PMOS栅极泄放电路设计全流程复盘与三个踩坑点总结

本文详细复盘了PMOS栅极泄放电路从仿真到打样的全流程设计,重点总结了三个关键踩坑点:三极管BE结过压击穿、静态功耗超标和栅极振荡现象。通过优化缓启动电路、改进保护设计和布局调整,最终实现18ms开通时间、190μs关断时间和8μA静态功耗的工业级性能指标,为类似电源开关设计提供实用参考。

weixin_28693683的博客 371

HTML5游戏实战之俄罗斯方块

先说几句废话,写这篇文章前也思考了很久,最近这几年很少在博客上写文章了,感觉年龄越大越懒得写东西了,不过思前想好,还是决定写出来。还是以前的心态,做份记录,未来可以回顾。同时也希望能给初学者写一篇好的教程。 现在HTML5炒得的确很火,我就不解释为什么了,文章里会有很多处用“不解释,百度吧", 大家别见怪。这篇文章主要是讲解如何设计和实现一款经典的俄罗斯方块游戏, 并且是基于HTML5的Canv...

一个20年码农的博客空间 1万+

【赛题解析&命令脚本配置】2023年全国职业院校技能大赛GZ073网络系统管理赛项赛题第1套模块A:网络构建 & (五)无线网络配置+(六)出口网络配置-命令配置

【赛题解析&命令脚本配置】2023年全国职业院校技能大赛GZ073网络系统管理赛项赛题第1套模块A:网络构建 & (五)无线网络配置+(六)出口网络配置-命令配置

君逍遥o 408

数学建模之0—1规划(Python)

目录 1、概述 (1)知识框架 (2)线性整数规划模型 (3)分支定界法 2、案例 (1)案例1​ (2)案例2 3、遗传算法—sko-GA包实现 (1)代码 (2)结果 4、PuLp实现 (1)代码 (2)结果 5、致谢 1、概述 (1)知识框架 (2)线性整数规划模型 (3)分支定界法 2、案例 (1)案例1 (2)案例2 3、遗传算法—sko-GA包...

weixin_46039719的博客 4112

华为鸿蒙OS初探

最近IT界的热点之一莫过于华为发布的鸿蒙开源操作系统。如今似乎很少有人研究操作系统了,大家更关注上层应用以及云服务了,还记得十几年前,从网上还能下载到几百K大小的操作系统,甚至还带有图形界面。当时主流的操作系统还是Windows 2000和XP。随着各种终端设备的兴起,尤其是手机。围绕几大操作系统的生态圈也随之成熟起来,并占据了垄断地位,当然实际上在整个过程中也淘汰掉了一些操作系统,比如当年诺基亚...

一个20年码农的博客空间 964

在Ubuntu上安装Node.js编程

在Ubuntu操作系统上安装Node.js是非常简单的,本文将为您提供详细的安装步骤。这是一个简单的Node.js HTTP服务器示例,它将在本地主机的端口3000上监听请求,并返回"Hello, World!npm是Node.js的包管理器,您可以使用它来安装和管理Node.js模块。您已成功在Ubuntu上安装了Node.js,并创建并运行了一个简单的Node.js应用程序。现在,您已经成功安装了Node.js和npm,让我们创建一个简单的Node.js应用程序并运行它。如有任何疑问,请随时提问。

CodeNexus的博客 3525

java版实时获取access_token

java版微信公众号开发之实时获取access_token

life 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: J2ME中随机数字处理全攻略
下一篇: 在J2ME联网应用中获得客户端的手机号码
java2000_test
博客等级 码龄19年 10粉丝 320原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值