Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 417|回复: 0

[J2ME学习]J2ME程序与Servlet通讯访问数据库

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-11 00:53:54 | 显示全部楼层 |阅读模式
    首先这种程序可以简化的分解成三个层面:
       

        1,J2ME的客户端(MIDlet程序)
       

       

        2,服务器端的Servlet(servlet程序)
       

       

        3,数据库(Access或者是SQL等)

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

         
       
      
    如果你还不明白JDK WTK  tomcat 是什么东西的话,建议你补习一下基础知识,这里我就不说明了。
    运行图:

       我们先编辑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/TestNet/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/TestNet/returnMsg");//得到连接对象
       dis = new DataInputStream(hconn.openInputStream());//用得到的对象的数据流做参数 再作为参数构成数据输入流
       
       while(dis.readUTF()!= null) //判断当数据流不为空的时候
       {
        msg = msg.append(dis.readUTF());//用readUTF()方法构造字符串 放在StringBuffer里
        msg.append("/n");
       }
       
       }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---------------------------------------------------------------------- package ex;
    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/TestNet/WEB-INF/classes/ex/ 里面,注意路径一定不要错。
    然后还要编辑WEB-INF目录下面的web.xml文件.
    再里面加入这些信息:
    --------------------------------------------------------
      <servlet>
             <servlet-name>returnMsg</servlet-name>
             <servlet-class>ex.returnMsg</servlet-class>
         </servlet>     <servlet-mapping>
             <servlet-name>returnMsg</servlet-name>
             <url-pattern>/returnMsg</url-pattern>
         </servlet-mapping>
         ----------------------------------------------------
         你可以把原来里面的这些内容删除掉。
         
         注意:如果你在命令行下面编译returnMsg.java文件时候,出现import javax.servlet.*;错误的时候,记得要在环境变量里面添加一句,比如在classpath里面加上
         c:Program FilesApache Software FoundationTomcat 5.0commonlibservlet-api.jar 就是添加servlet api的搜索路径.    然后我们还需要用Access生成一个数据库文件,表名就是user,里面有几个字段分别为ID,自动编号就行,name 随便加几个名字。然后要把数据库作为数据源进行连接。
        由于我们的系统是windows 2000 所以在开始---设置----控制面板-----管理工具---数据源ODBC   点"添加" 注意要在系统的DSN里面操作,然后把你的数据库放在一个没有中文字符路径中, 选择它就可以了。数据源的名称就是mydata。      现在我们可以启动Tomcat服务器了,然后测试一下我们刚才写的servlet,  我们打开IE浏览器输入
    http://127.0.0.1:8080/TestNet/returnMsg  来看看效果吧,,,,,,
         什么?什么都没出现吗,呵呵,,因为我们并没有向浏览器里面输出什么,当然什么也没有,,,你可以查看原文件,如果里面有你数据库的信息,那么就是连接成功了。servlet一切正常。      最后我们打开 WTK 新建工程文件,把前面我们写的那两个类放在scr里面,然后 build一下,然后run  点"连接" ,这时候模拟器中,就会出现和刚才在IE原文件里面一样的文字了。
         是不是很开心。呵呵!     当然在实际开发中,不会只实现如此简单的功能。我也在不断的摸索和学习中,希望各位朋友也谈谈你们在学习过程中的心得。我的QQ:19197
      

      
      
       
       

         
       

         
       
      



    源码下载:http://203.93.208.26/kj/cwb/dir7/TestNet.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-26 13:26 , Processed in 0.356237 second(s), 50 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表