惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tenable Blog
Last Week in AI
Last Week in AI
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
H
Help Net Security
F
Fortinet All Blogs
MyScale Blog
MyScale Blog
宝玉的分享
宝玉的分享
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 司徒正美
量子位
N
Netflix TechBlog - Medium
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
Recorded Future
Recorded Future
博客园 - 三生石上(FineUI控件)
Vercel News
Vercel News
aimingoo的专栏
aimingoo的专栏
I
InfoQ
Microsoft Security Blog
Microsoft Security Blog
Scott Helme
Scott Helme
The Last Watchdog
The Last Watchdog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
IT之家
IT之家
AI
AI
WordPress大学
WordPress大学
Security Archives - TechRepublic
Security Archives - TechRepublic
Google Online Security Blog
Google Online Security Blog
U
Unit 42
V2EX - 技术
V2EX - 技术
MongoDB | Blog
MongoDB | Blog
Schneier on Security
Schneier on Security
博客园 - Franky
H
Heimdal Security Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Jina AI
Jina AI
W
WeLiveSecurity
P
Privacy & Cybersecurity Law Blog
Cloudbric
Cloudbric
B
Blog RSS Feed
N
News | PayPal Newsroom
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
I
Intezer
Hacker News - Newest:
Hacker News - Newest: "LLM"
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园_首页
罗磊的独立博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More
雷峰网
雷峰网

博客园 - 醒了又睡的鱼.NET

FabricExpress.net supply high quality quilting fabric 开着房车去旅行! 宁波房车出租 宁波房车旅游 Adobe Dreamweaver CS5试用点滴感受 杭州交通违规处理地点大全 一份比较完整的电子商务项目可行性报告书 彪悍的女程序员 出自一位很黄很贱的人,超搞笑 设计师赚美金的好地方 VS2008技巧,非常实用,非常提高效率。 详解在Visual 2008中实现HTTPS和SSL 那些相见恨晚的 JavaScript 技巧 谁将成为下一个Twitter?最新最酷的创业奇思妙想 flash10使用RTMFP 开发点对点P2P应用 ASP.NET动态修改META信息 - 醒了又睡的鱼.NET - 博客园 C# 实现在线软件自动升级自动下载更新文件 兔子是如何吃掉狼的 java里连接sqlserver对象名无效的解决方法 java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]对象名 无效 苍天啊大地啊,谁能解决这个问题啊(asp.net开发WAP,关于SelectionList和response.redirect) C#多线程中lock的用法
J2me c/s结构,访问数据库
醒了又睡的鱼.NET · 2009-02-26 · via 博客园 - 醒了又睡的鱼.NET

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原文件里面一样的文字了。
    是不是很开心。呵呵!

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