支持移动设备Web应用框架的研究
孔亮 殷兆麟
(中国矿业大学计算机学院,江苏 徐州 221008)
摘 要 Web应用面对不同类型的移动设备。自适应移动设备框架技术支持开发人员高效地适应不同类型移动设备的Web应用。该框架基于WWW和WAP协议,与现有成功的开源框架,如Struts、Hibernate、Spring集成,重用了Filter、Dom4J、XSLT和XPath等技术。
关键词 移动设备;框架;自适应;Web应用
1 引言
如何将现有的支持非移动个人计算机的Web系统和支持移动设备的Web系统集成起来是目前很多IT企业研发面临的课题。面向移动终端的框架研发目的是支持Web应用自动识别终端设备类型,返回适合用户终端设备的服务结果,高效地开发移动Web服务。MVC模式的框架Struts、持久层框架Hibernate、进一步降低开发难度的Spring框架给开发人员带来很大的方便。支持不同种类移动终端的Web应用开发的框架(简称终端框架),以上述框架集成,为开发人员开发面向移动的终端Web系统提供了便利。
2 WWW与WAP体系结构
WWW体系结构和WAP体系结构的相似性为自适应终端框架开发提供了可行性。
2.1 WWW体系结构
WWW体系结构如图1所示。它用标准的格式规范应用程序和内容。Web浏览器是一个标准的网络应用程序,它向网络服务器请求服务,网络服务器按服务请求服务并将服务结果返回。

图1 WWW体系结构
2.2 WAP体系结构
WAP体系结构(图2)与WWW体系结构类似,这给Web应用开发人员带来许多好处:软件体系结构是熟悉的,而且十分有效,同时可以利用已有的开发工具。为了适应无线应用环境的特征,WAP技术都尽量使用已有的技术标准,并以这些标准作为WAP技术的开发起点。

图2 WAP体系结构
WAP内容和应用采用基于WWW通信协议的一组标准通信协议进行传送。在无线终端的微浏览器作为普通的用户接口,这个微处理器与标准的Web处理器很相似。
3 终端框架的体系结构
终端框架如图3所示。它建立在Fitler、MAP、JSP等基本java技术基础上。

图3 终端框架体系架构
4 终端框架的实现
4.1 JSP输出XML内容
JSP是一种在通常的网页文件中嵌入Java脚本代码和JSP标记,产生动态内容的程序。如在网络服务系统中的登录页面,代码如下:
<%@ page language="java" import="java.util.*" pageEncoding
="utf-8"%><?xml version="1.0" encoding="utf-8"?>
<page>
<logon/>
</page>
<%out.flush();%>
该JSP输出的页面不是普通的HTML或WML页面。浏览器是不能直接解析,而要通过扩展样式表(XSL)进行转换。
4.2 终端设备类型的辨识
终端框架的核心在于如何准确、高效地发现、辨识终端类型。由于目前终端类型繁多,将来也会出现新的终端类型。所以开发一个具有很好的扩展性、可维护性的终端分析组件是自适应终端设备框架必须解决的问题。移动终端设备分析接口如下:
public interface IParseTerminal {
public final static String HTML_TYPE="html";
public final static String WML_TYPE="wml";
public final static String UNKOWN_TYPE="unkown";
public String parse(String URL,HttpServletRequest httpReq);
}
终端设备分析类的工厂类代码如下。
public class ParseTerminalFactory {
//解析终端类的工厂生成方法
public IParseTerminal createParseTerminal(Class c) {
IParseTerminal ipt=null;
try {
ipt=(IParseTerminal)c.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return ipt;
}
}
为了降低框架的使用复杂度,在框架中已经实现了一个具体终端分析类。这个类包含了目前大部分终端的识别,以满足普通开发人员的需求。
4.3 按移动终端设备类型定制显示样式
目前移动终端设备的类型繁多,移动终端设备支持的内屏像素、图片格式、屏幕动画、和弦等特征都是有差异的。只有对不同的移动终端设备加以区分,按特定移动终端设备显示特征才能输出合适的图片和动画,使页面显示自然、美观。
1)获得移动终端设备的特征
定制样式的第一步就是要获得移动终端设备的特征,由于现在微浏览器以及移动终端类型很多,不能确保从移动终端http请求头中能获得所有移动终端的特征。就如内屏像素来说,诺基亚、LG和三星等设备可以通过x-up-devcap- screenpixels头信息获得手机屏幕大小,而MOTO和中兴等手机设备则获得不到。其它的移动终端特征更是无法通过请求头获得。建立适配表可能是目前解决这个问题的较好的方法。适配表格式参见表1。
表1 适配表
|
手机型号
|
内屏
象素
|
图片
|
铃声(和弦)
|
屏幕
动画
|
|
京瓷KZ820
|
120*133
|
PNG
|
CMX(16)
|
---
|
|
三星X199
|
128*160
|
PNG
|
CMX(40)
|
SIS
|
|
MOTO-V730
|
128*160
|
PNG
|
MIDI(16)
|
SIS
|
通过请求头user-agent获得手机型号,在适配表匹配到相应项,取出该手机型号的特征。
2)定制适应特定移动终端的样式
在本框架设计中页面显示的数据和样式是分离的。样式文件是定义了一组描述页面属性的标签的XML文件。如pixel-x、pixel-y、img等标签。通过获得的移动终端特征信息来完成这些标签内容的填充。
3)结合样式文件进行XSLT转换
通过获得的移动终端特征信息设置特定的样式信息和数据xml文件结合成页面文件。再经过XSLT转换成特定终端类型的标记语言。如图4所示。

图4 结合样式文件的XXLT转换
为了能根据终端类型返回对应的页面内容,XSLT根据终端类型将XML文档转换成对应的页面文件。XML和XSLT之间的映射关系使用一个映射文件来配置。映射文件中的根元素为config,仅包含一个views和parseclass元素。Views中包含多个view元素,每一个view元素表示一种终端的类型信息和适应这种终端的XML与XSLT的映射。如下面映射文件:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<views>
<view>
<terminal>html</terminal>
<xsltmap>
<data>/login.JSP</data>
<xslt>/page.xsl</xslt>
</xsltmap>
</view>
<view>
<terminal>wml</terminal>
<xsltmap>
<data>/WAP/index.JSP</data>
<xslt>/WAP/index.xsl</xslt>
</xsltmap>
</view>
</views>
</config>
view元素中包含terminal和xsltmap元素进行终端类型信息和XML和XSLT映射配置,xsltmap中包含data元素表示输出xml的JSP文件;xslt元素表示对应的XSLT文件。
parseclass元素为了通知系统开发人员自定义解析终端类的类名。
4.5 使用filter将XML转换
终端框架的实现依赖于Filter 技术。使用Filter 将JSP输出的内容截获,并转换为适应终端的页面内容如WML标记页面内容。
对于Web应用程序来说,过滤器是一个驻留在服务器端Web组件,它可以截取客户端和资源之间的请求与相应信息,并对这些信息进行过滤。
HttpServletRequest类并没有提供对请求信息进行修改方法,而HttpServletResponse也没有提供得到响应数据的方法。也就是说,虽然过滤器可以截取到请求和响应对象,但是却无法直接修改请求和响应对象的状态。如果利用请求和响应的包装(wrapper)类,就可以间接改变请求和响应的对象的状态。在Servlet规范中,共定义了4个包装类:ServletRequestWrapper,ServletResponseWrapper,HttpServlet RequestWrapper,这4个包装类分别实现了请求或响应的接口,如下所示:
public class ServletRequestWrapper implements ServletRequest
public class ServletResponseWrapper implements ServletResponse
public class HttpServletRequestWrapper implements HttpServletRequest
public class HttpServletResponseWrapper implements HttpServletResponse
通过包装类就可以改变JSP的输出流,以便可以使用XSLT技术将其处理成对应终端类型的标记语言。
4.5 终端框架的处理流程
通过继承javax.servlet.Filter类实现自定义的XsltFilter类,这个类的主要功能是调用IParseTerminal判别终端的类型,并且根据view-config.xml的配置的xml和xsl的映射关系,寻找页面所对应的xsl文件。通过上面所说的封装类转换从JSP输出的内容。以适应各个终端。通过将框架的各个模块组合在一起完成最终功能。
如图5所示,实现共分四步:
(1)获得请求的URL字符串,并使用IParseTerminal接口应用ipt通过URL字符串和请求头来分析终端类型。
(2)寻找对应的map,获得URL对应的XSLT文件。
(3)将JSP输出的内容转换为适应终端的页面内容,如终端是手机,就转换为WML内容。
(4)将内容输出到终端。

图5 终端框架的处理流程
5 网络校园服务系统
网络校园服务系统提供一个人们使用手机或个人计算机寻找自己的好友,给好友发信,写日志,买卖物品等功能。系统会发布公告和新闻消息,以供人们了解站内动态和国内外新闻。
该系统使用了J2EE轻量级框架(Hibernate、Struts)和自行设计的支持不同类型移动终端框架,开发本应用系统。其体系结构图如图6所示。

图6 网络校园服务系统体系结构
参考文献
[2] Sun Microsystems Inc.,Reference,http://developers.sun. com
[3] A Pashtan et al.,A Context-Aware Tourist Information System. Proc. of the 4th International Workshop of Mobile Computing,Rostock,June 2003
[4] WAP Forum,WAP Push Architectural Overview. WAP-250-PushArchOverview-20010703-a.
收稿日期:10月28日 修改日期:11月28日
作者简介:孔亮,男,江苏徐州人,中国矿业大学计算机学院,研究生,专业方向:计算机应用,软件工程。殷兆麟,男,江苏泰兴人,中国矿业大学计算机学院,教授,专业方向:分布式计算,软件工程。 |