基于J2ME-J2EE的移动工资查询系统 的设计与实现

来源:互联网 发布:网络西红柿哥真实名字 编辑:程序博客网 时间:2024/04/29 21:51

赵 明  刘  威  赵 新
     (北京城市学院理工学部 北京 100083)


     
     摘 要: J2ME和J2EE技术的结合为移动教师工资查询系统提供了很好的解决方案。介绍了J2ME-J2EE技术的体系结构,阐 述了系统的整体架构,并讨论了系统J2ME客户端和J2EE服务器端的设计和实现方法。
     关键词: J2ME;J2EE;移动工资查询
    


   一、引言
   伴随着移动通信技术的发展和手机等移动 设备的普及,基于手机平台的软件开发已经成为应用程序开发的研究热点之一。J2ME是SUN公司为了将Java 2应用于消费类电子产品和嵌入式系统而推出的一项技术,以其独特的优势,在基于手机平台的应用程序开发中发挥着重要作用;J2EE在J2SE的基础上进行 了扩展,用于提供完全的企业级应用解决方案。结合J2ME-J2EE技术,我们建立一个完整的移动电子商务平台——移动教师工资查询系统。本文首先简要介 绍了J2ME-J2EE技术的体系结构,在此基础上,分析并设计了系统的整体架构,最后着重讨论了系统客户端和服务器端的设计和实现方法。本系统已在多普 达900手机上测试成功,证明文中所探讨的技术和方法在实际中是切实可行的。


     二、技术背景
     1. J2ME体系结构
     J2ME(Java 2 Platform, Micro Edition)是SUN公司专门为消费类电子设备和嵌入式系统而设计的Java 2平台,目前,J2ME被大多数中高端手机和嵌入式设备所支持,它已成为在移动设备和嵌入式系统上实现网络数据应用的热点技术。
     J2ME 提出了配置(Configuration)的概念,将嵌入式设备划分为有限连接设备配置CLDC(Connected Limited Device Configuration)和连接设备配置CDC(Connected Device Configuration)两大类[1]。CLDC定位于运算能力较弱、电力供应有限、联机速度有限、内存小的低端消费类设备,如手机、PDA 等;CDC则定位于资源相对无限的高端嵌入式设备,如电视机顶盒、电冰箱、车载娱乐导航系统等。Configuration定义了在相同类别的嵌入式设备 中执行Java程序至少要符合的运算能力、供电能力、内存大小等规范,同时也定义了一组在这些设备上执行的Java程序所能使用的类库。
     J2ME在Configuration基础上提出了描述(Profile)的概念,用以满足相同类别中不同品牌的嵌入式设备对内存、用户界面、网络连接和 可移植性等方面的差异。Profile是架构在Configuration之上的规范,它针对不同品牌设备的特殊要求提供了高级的API,开发和装载于为 消费类电子设备的应用程序就建立在Profile上[2]。MIDP(Mobile Information Devices Profile)是目前发展较为成熟的Profile,已广泛应用于Java手机、Palm和PDA设备中,成为移动数据应用的良好平台。本系统的移动数 据应用模块就是基于CLDC/MIDP体系开发设计的。
     2. J2EE架构
     J2EE(Java 2 platform,Enterprise Edition)是目前流行的多层企业应用技术,是使用Java开发企业级应用的一种事实上的工业标准。J2EE将业务逻辑从系统服务功能和用户界面中分 离出去,放置在客户层和应用基础设施之间的中间层, 解决了传统的两层模式(client/server)中难以升级或改进、可扩展性差、业务逻辑和界面逻辑难以重用等弊端。J2EE相关的技术主要有 EJB、JSP、JavaServlet、JDBC、JavaMail、JMS 和CORBA等[3]。典型的J2EE应用体系结构可分为四层:
     (1)客户层:运行在客户机器上,采用XML/HTML等技术,主要组件有Web浏览器、Java Applets和独立的应用程序;
     (2)Web层:运行在J2EE服务器上,采用JSP/Servlet/XML/HTML和JavaBean等技术;
     (3)业务逻辑层:运行在J2EE服务器上,采用EJB技术实现业务逻辑;
    (4)数据存储层:主要是运 行在EIS服务器上的企业信息系统或大型数据库。
    

     三、移动工资查询系统 设计与实现
     1. 系统整体架构
     移动教师工资查询系统采用J2ME技术开发系统客户端应用程序,采用J2EE技术开发服务器端应用程序,使用HTTP协议实现客户端与服务器端之间的网络 通信[4]。系统采用基于J2ME-J2EE的四层体系结构,即客户层/应用表示层/业务逻辑层/数据存储层,系统的整体架构如图1所示。
     

基于J2ME-J2EE的移动工资查询系统  的设计与实现 - 林芬亮 - 断鸿零雁的博客
 图1 移动教师工资查询系统整体架构图


     
   在客户端,用户的手机需要与Internet进行连接,可以采用GPRS、Wi-fi或者3G网络等方式,用户只需下 载(如使用OTA技术)客户端MIDlet程序,安装到手机上就可以与服务器进行连接并发出访问请求;Web服务器使用Servlet容器来处理客户端的 连接和请求,然后再将这些请求发送到企业级服务器上,企业级服务器使用EJB进行会话,处理请求,并通过JDBC连接到数据库系统上;数据库系统根据 SQL查询语句,将生成的查询结果数据集发送回企业级服务器;企业级服务器把接收到的信息提交给Web服务器,Web服务器再通过HTTP将信息返回给客 户端;最后,客户端MIDlet将查询结果显示在用户的手机屏幕上。所有的访问并不直接访问后台的应用资源和数据资源,而是通过中间层进行访问,这样既可 以保证后台数据的安全性,又可以通过中间层的调度保证系统性能和事务的一致性。
     2. 客户端的设计与实现
     系统客户端的开发环境是由SUN公司提供的MIDP 20,我们使用J2ME Wireless Toolkit 25作为开发工具编写MIDlet程序querysalary.java,用户可以在“请输入查询号”文本框中输入教师查询编号,输入完毕后按“OK” 按钮发送请求,手机将把数据发送到服务器端,服务器端进行相应的处理后把查询结果返回给客户端,客户端MIDlet程序会把查询结果显示在用户手机屏幕 上。
     客户端MIDlet程序主要实现客户端与服务器端的连接,其代码如下所示。其中特别要注意的是,当单击“OK”按钮实现网络连接时,一定要另开辟一个线程 来予以实现。
     import …………………;//引入需要的类
     public class querysalary extends MIDlet implements CommandListener, Runnable{
       //初始化定义
     …………………
     public void startApp(){
     //初始化起始页面
     form = new Form("教师工资查询");
     tf = new TextField("请输入查询号","600601",6,TextField.NUMERIC);
       …………………
     }
     protected void pauseApp(){
     …………………
     }
     protected void destroyApp(boolean parm1){
       }
     protected void quitApp(){
     destroyApp(false);
     notifyDestroyed();
     }
     protected void setResultFrom(){
       //建立查询结果显示界面
     …………………
     //获取文本框中所输入的查询编号
     String salaryid = tf.getString();
     //设置通信的servlet的地址并传递参数salaryid,实现MIDlet与Servlet的通信
     String URL = "http://211.68.98.118:8080/servlet/ServletSalary?salaryid="+salaryid;
     HttpConnection conn = null;
     DataInputStream in = null;
     try{
     conn = (HttpConnection)Connector.open(URL);
     //设置连接为Post方式
     conn.setRequestMethod(HttpConnection.POST);
     conn.setRequestProperty("User-Agent","Profile/MIDP-2.0 Configuration/CLDC-1.1");
     conn.setRequestProperty("Content-Language","en-CA");
     in = conn.openDataInputStream();
     String ok = in.readUTF();
     if(ok.equals("find")){
       //对查询结果进行显示处理
     …………………
     }
     else
     {sb.append(in.readUTF()+"\n");}
     }catch(Exception e){
     //异常处理
     sb.append(e.toString());
     }finally{
     //最后处理
     …………………
     }
     //将工资查询的结果显示到手机屏幕上
     form1.append(sb.toString());
     }
     
     public void commandAction(Command c,Displayable s){
     if(c == okCommand){
     //单独开辟线程
     Thread newThread = new Thread(this);
     newThread.start();
     }
     if(c == exitCommand){
     quitApp();
     }
     }
     public void run(){
     try{
     setResultFrom();
     }catch(Exception ee){
     ee.printStackTrace();
     }
     }
     }
     3.服务器端的设计与实现
     系统的Web服务器平台使用Apache Tomcat 5.5,数据库采用Access 2003软件建立名为jssalary的教师工资查询数据库,其中的教师工资相关数据存储在表user中,通过JDBC-ODBC桥(也可以使用JDBC 技术)实现对数据库的访问。
       在服务器端编写的Servlet为ServletSalary.java,用于接收客户端请求, 执行与数据库的通信, 并将查询结果返回给客户端,其代码如下所示。服务器端实现的关键是如何获取客户端输入的查询参数并根据该参数实现对数据库的访问。我们使用doGet方法 中的HttpServletRequest参数来获取查询参数,查询结果则通过HttpServletResponse参数返回给客户端。
     import …………………;//引入需要的类
     public class ServletSalary extends HttpServlet{
     public void init() throws ServletException{}
     public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
       //设置返回的类型
     response.setContentType("text/html; charset=gb2312");
     DataOutputStream out = new DataOutputStream(new BufferedOutputStream(response.getOutputStream()));
     //获取手机传来的查询参数salaryid
     String salaryid = request.getParameter("salaryid");
     try{
       //加载jdbc驱动
     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
     //建立和Access数据库的连接,数据库为jssalary
       Connection connection = DriverManager.getConnection("jdbc:odbc:jssalary");
       //创建statement对象
     Statement statement = connection.createStatement();
     //查询
       ResultSet rs = statement.executeQuery("select * from user where salaryid ="+salaryid);
     if(rs.next()){
     //获取查询结果
     …………………
       }
     else
     {
       //若客户端输入的salaryid参数在表user中不存在,则提示用户查询失败
     String ok = "fail";
     out.writeUTF(ok);
     String errormessage = salaryid + "不存在";
     out.writeUTF(errormessage);
     }
     out.flush();
     out.close();
     }catch(SQLException ex){}
     catch(java.lang.Exception ex){}
       }
       public void destroy(){}
     }
     4. 系统运行效果
     根据系统的设计和实现代码,最终的运行效果如图2所示。分别为在文本框中输入查询编号和手机屏幕上查询结果的显示。四、结束语
     结合J2ME-J2EE技术,我们开发了一个端到端的无线移动应用系统,系统充分利用了客户端和服务器端开发的各项技术,并在WTK模拟器和多普达900 手机上测试成功。将本系统的源程序做适当修改,便可适用于许多不同行业的具体应用需求,如用于查询学生成绩、教务信息、天气预报、股票信息等。随着移动通 信技术的发展,尤其是3G技术的即将实施,使用J2ME-J2EE技术开发基于手机平台的移动商务和个人移动通信系统一定会得到更大的发展和更广泛的应 用。

基于J2ME-J2EE的移动工资查询系统  的设计与实现 - 林芬亮 - 断鸿零雁的博客
 

图2 系统运行效果


     
参考文献
     [1] [美]James Keogh:J2ME开发大全[M],潘颖 王磊译,北京:清华大学出版社,2004
     [2] 王森:Java手机/PDA程序设计入门[M],北京:电子工业出版社,2004
     [3] [美]Deepak Alur,John Crupi,Dan Malks.J2EE核心模式(原书第2版)[M],刘天北,熊节等译,北京:机械工业出版社,2005
     [4]见雷春,余鹰,范辉:J2ME/MIDP和J2EE平台集成策略研究[J],微型机与应用,2003,(10): 35-37

Application of J2ME and J2EE in Mobile Salary Querying 
Zhao Ming  Liu Wei  Zhao Xin

Abstract: The combination of J2ME and J2EE technology provides a good solution for Mobile Teacher Salary Query System. In this paper, we introduce the architecture of J2ME and J2EE, and elaborate on the overall architecture of the system. Finally, we discuss the design and Implementation of J2ME client-tier and J2EE server-tier.
Key words: J2ME, J2EE, Mobile Salary Querying

收稿日期:2006年12月20日
作者简介:赵明,硕士,北京城市学院理工学部教师


http://www.bcu.edu.cn

0 0