新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于J2ME的防汛信息系统的研究

基于J2ME的防汛信息系统的研究

作者:时间:2012-04-16来源:网络收藏

在本系统中,客户端和服务器之间主要通过HTTP协议进行通信,工作流程如下:

(1) 用户启动手机上的MIDlet进入登录界面,输入用户名和密码进行登录。MIDlet用Connector类的open方法建立一个到服务器端的连接,并把这个连接强制转换成为HttpConnection类型。

(2) 客户端用HttpConnection类的openInputStream方法和openOutputStream方法来返回输入输出流并通过它们来发送请求和接收响应信息。

(3) 服务器端接收到客户端的连接请求后,把它封装成一个HttpServletRequest对象,调用相应的Servlet,通过EJB或JavaBean访问数据库,并把处理结果返回客户端的MIDlet。

(4) 客户端MIDlet使用输入流接收服务器端返回的结果,根据返回的是”station”(测站)、”person”(普通用户)还是”none”(无此用户)而在屏幕上呈现不同的界面。

(5) 登录成功后,MIDlet重新建立HttpConnection来进行数据更新或查询操作。

四、技术难点和解决方案

4.1 用户定制信息的接收

用户定制的信息有两种发送的方式:

(1)定时发送。用于把用户定制的日常信息每天定时发送给用户。

(2)紧急发送。当出现紧急汛情时即时把信息发送到相关的责任人。

在客户端,对相关信息的接收是通过的PUSH注册功能来实现的。Push技术是一种能够使得Midlet应用程序不需要用户的操作而自行启动运行的机制。在通常的网络连接中,是客户端主动去连接服务器,服务器接受请求并把处理结果返回客户端。而Push技术不同,它不需要应用程序通过“拉(pull)”的方式通过网络取得数据,客户端需要的数据会被主动“推(push)”向客户端的移动设备。当移动设备接收到信息时,相关的Midlet会被激活并开始运行,处理发送过来的数据。

服务器端使用Socket可以自动向与其相联的客户端发送数据,这就为Push技术提供了保证。先由客户端的 MIDlet注册好服务类型,地址,端口号,当服务器端检测到有紧急情况发生或用户定制的情况发生时,就会将相应的消息通过Socket发送到客户端,客户端会启动相应的MIDlet对该消息进行相应处理。

平台从MIDP2.0开始增加了对Push注册的支持。Push机制可以通过如下两种方式激活Midlet:一种是接入的网络连接的,当客户端接收到网络Push来的信息后就自动启动Midlet运行;另一种是计时器的警告通知,当。Push 注册机制可以使MIDlet 自动运行,运行方式有两种:一种定时技术,当到达特定时间,程序就会运行;另一种基于网络,当设备受到网络推送的信息时,可以启动程序运行。本系统采用第一种方式来实现定制信息的发送。

要在客户端使用Push技术,必须事先进行Push注册。Push注册有两个方法:静态注册和动态注册。静态注册需要将 Push注册信息添加到JAD文件中,在Midlet Suite安装时完成注册。静态注册的缺点是必须通过Midlet Suite安装过程来实现,一但安装好后就无法添加新的注册,同时如果要取消Push注册,也必须卸载Midlet Suite。动态注册是MIDlet通过Push Registry接口API来实现的,可以在程序运行时添加或取消Push注册,增加了灵活性。本文采用了动态注册的方法。

在动态注册时MIDlet需要告诉AMS它所要连接的服务器的IP地址、端口号和要启动的MIDlet类,实现代码如下:

String midletClassName=”com.water.PushInfo”;//这是自动运行处理数据的Midlet
String ConnectionURL =”socket://:6789”;
String AllowedSender=”*”;//*表示允许接收任意地址发送的信息
PushRegistry.registerConnection(midletClassName, ConnectionURL, AllowedSender);
…..

这样,当AMS监测到端口号为6789的Socket服务器发送来的数据后,就会启动com.water包下的PushInfo来处理这些数据。

取消注册可以使用PushRegistry.unregisterConnection(ConnectionURL)来完成。

4.2 数据库连接池技术

本例采用了数据库连接池技术。传统的Web应用程序进行数据库操作时一般要经过(1)建立数据库连接;(2)进行数据库的增加、删除、修改、查询操作;(3)断开数据库连接这三个步骤。这种方式有一个重要的缺点:要为每个Web请求建立一次数据库连接并对其进行管理,这些操作都会耗费大量的时间和资源。数据库连接池的基本思想是预先建立一些连接,放置在内存对象中以备使用。当程序中需要建立数据库连接时,只需从内存中取出一个来用而不用重新建一个连接。同样,使用完毕后,只需将此连接放回到内存中即可,而连接的建立和断开都由连接池自身来管理。Weblogic服务器提供了图形化的界面来建立数据库连接池,设置比较简单。建立好数据库连接池和数据源后,就可以在Servlet中通过JavaBean或EJB来调用,代码如下:

Hashtable ht = new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY,weblogic.jndi.WLInitialContextFactory);
ht.put(Context.PROVIDER_URL,t3://localhost:7001);
try
{
Context ctx=new InitialContext(ht);
DataSource ds=(DataSource)ctx.lookup(WaterJNDI);
Connection con=ds.getConnection();

}catch(Exception e){

}



评论


相关推荐

技术专区

关闭