探索客户端批量维护服务器数据研究与实现
摘 要:
现在企业很多商务活动以web方式进行,大量数据以数据库的形式存在服务器上,而如果客户端对服务器中的数据以web页的方式进行大批量修改不是很方便。本文通过Java和XML结合使用Excel解决上述问题。
关键词:批量数据; XML;web应用
1. 引言
网络应用的最早方式C/S模式有许多优点,但是由于商业活动的业务规则的改变而带来系统的升级,所要的工作量以及对企业影响都是不容忽视的。随着信息量交互的大大增加, C /S结构的系统逐渐需要向B /S结构的系统演变。B /S结构的优点在于:只需要对服务端进行必要的设定,客户端基本上不需要进行任何配置,员工通过浏览器(以后下文专指IE),就可以完成自己的工作。这种在客户端零配置零维护,使员工把注意力关注自己的业务活动,极大的提高工作效率,从而增强企业的竞争力。
B/S模式一个不足之处在于:服务器向客户端发送大量数据,客户端只能浏览数据,而无法在IE中直接对数据进大批量行编辑,进而将修改后数据上传到服务器进行更新。现有很多系统通过数据库文件或其他格式文件进行上传文件的方式来解决这个问题,但同时也就意味着客户端需要同样配置相应的数据库软件或程序,形成计算机资源配置冗余。
本文通过采用XML作为传输中介,使用Java基于文法方式解析XML,结合Excel解决上述问题。
2. Web应用模型与协议
2.1 Web应用模型
Web应用通常是三层体系结构:客户端、中间层和企业信息层[1]。客户端就是用户IE界面,中间层就是依据用户请求进行商业活动的业务规则,企业信息层即企业在商业活动中形成资源库:信息井。
这是概念模式,其具体的实现模式由实际框架决定,如J2EE 中四层实现:Web 浏览器、web服务器、ejb 容器和企业数据库。
2.2 Web 通信协议
Web使用的通信协议是HTTP[2],HTTP客户与服务器之间传送大量的二进制信息,需要一种标准化的方法描述传递的数据。HTTP使用MIME[2] 来描绘信息内容, MIME提供了一种可以附加多种不同编码文件的方法,从而实现多种格式文件的传输。
由于 MIME 是对信息进行描,如果在服务端将MIME 设为传送Excel 格式的文档参数:
"application/vnd.ms-excel",那么客户端IE 接收到服务器的数据后会自动启动Excel,以Excel格式显示数据。这样就可以在客户端很方便的对服务器的数据进行编辑。
对于将大批量的数据更新到服务器,在客户端IE中如果不采用插件是无法对MIME数据进行设定,依据对RFC1867[3]中关于使用web方式进行文件上传的描述,可使用html语言input元素的file属性完成上传数据任务。
<form enctype=”multipart/form-data” action=”deal_page” meth=”post”>
Upfile name: <input type=”file” name=”usefile” >
<input type=”submit” value=”sendFile”>
</form>
2.3 Web XML 语言
XML 语言最大的优点在于对数据进行描述,从提出到现在,它事实上已成为持久性数据事实标准,适于不同应用程序语言之间交换持久性数据。服务器上的数据库种类繁多,通过XML 可以实现数据库之间的数据无缝导入和导出。因此选用XML 作为客户端和服务器信息交换的载体。
至此,分格服务器和客户端之间进行数据传送的通信机制。用XML 作为客户端和服务器进行数据交换的中介,在服务端通过设定MIME 数据,使其将信息描述为Excel 文档,使客户端在接收到数据后在IE 中自动启动Excel;在客户端使将修改后的文件通过input 元素的file 属性进行上传。
3.实现机制
确定客户端使用Excel 进行大批量数据的修改,修改后以文件形式上传至服务器。由于Excel 所支持不同格式文件,每种文件所需技术各相同,因而需要进行权衡。
3.1 Excel 文档格式选取
在客户端利用Excel进行大批量数据的修改,是非常适合。Excel是常用的办公软件,不存在对员工进行适应性培训,同时员工可从下载的数据中提取自己需要的图表信息,这是一般C/S模式是很难做到的;服务器要向客户端发送Excel文件,考虑以下方式:
(1)*.xls ,则需要在服务器端使用复杂的POI或JXL技术,其中Jakarta POI API[4]就是为Java程序员提供存取Microsoft文档格式强大工具,其中HSSF API能存取Microsoft Excel文档。
(2) Excel模式的*.xml,Excel2003帮助文档中有以下对XML支持的描述:Microsoft Office Excel 2003中创建或打开工作簿,可将 XML 元素映射到工作表后,实现无缝导入或导出 XML 数据。[5] 在Excel2003中可将数据存为XML表格,就形成Excel模式的XML文档。
绝大企业部分不会使用Excel作为其数据库系统,如果使用方式(1)这就意味着将进行数据库文件同Excel的*.xls格式进行互相转换。编程序人员将面临了解Excel文档的*.xls格式结构任务,同时服务端进行两种格式文件互相转换,其本质就是再设计个Excel数据库的设备驱动程序。尽管可以借助Jakarta POI API,实现起来涉及数据类型之间转换,工作量同样不小。本文使用方式(2),XML文件是纯文本格式,真正的是实现软硬件相关独立性,任何计算机和软件都识别纯纯文本,因而可以实现跨平台,跨语言。同数据库系统之间进行无缝导入或导出数据完会是可行。
3.2 XML解析
对XML的解析常用到方法基于树型DOM 和基于事件SAX 。 DOM 将 XML 文档转化为一个包含其内容的结点树,并可以对树进行遍历。由于进行遍历操作,对系统性能和内存的要求比较高。SAX基于事件的模型,对指定的结点的事件通过回调进行响应,告知结点情况。SAX 对内存的要求通常会比较低,由于使用回调时必将使用数据结构堆栈,从堆栈操作过程可知,不利于同时访问同一个文档中多个数据结点进行同时访问。
这两种方法可以实现对XML文档解析,但没有考虑到充分利用服务器的资源,也没有考虑到许多用户同时上传海量数据的可能,同时本身的机理而不便于用多线程方式来解析XML文档。对海量数据的实现高效处理,必需另行考虑。
Java语言强大的功能可以实现对XML文档的解析工作。XML如果是格式良好的,必然存在一定的文法,依据文法对XML进行解析是相当容易。本质上对XML的解析就是对一个长的字符串操作,只要定义好字符串的模式匹配,可以读取任何指定字符串的信息;对XML文档的生成只进行相应的字符串替换操作即可。同时很容易实现多线程方式对XML文档解析和生成:通过模式匹配,获取包含数据的最大字符串,然后将调用String类中split函数将这个字符串分段,启动多线程提取相应段中的数据;生成过程同样可以用多线程实现。
3.3 数据流程图
本文选应基于Excel模式的XML使用Java实现对其进行读写操作,从后台数据库读取数据,多线程方式形成Excel模式的XML文档后,传送给客户端;客户端上传Excel模式的XML文档给服务器,通过采用多线程对Excel模式的XML的解析提取数据,进行必要的数据格式转换后,提供给后台数据库完成更新操作。
通过Jsp 和Servlet相结合来实现业务规则,完成客户端到服务端之间的通信。基于以上分析,采用UML业务建模的方法,可以作如下时序图事件说明:
① 客户端浏览器提交查询的数据,验证输入的数据合法性。
② Servlet在处理用户提交的参数,生成SQL语句向后台数据库提取数据。
③ 后台数据库返回满足条件的数据集。
④ Servlet依据这个数据集,启动多线程生成Excel模式的xml文档。
⑤ 向客户IE传送个xml文档。
⑥ 客户IE提交修改数据以文件形式提交给Servlet。
⑦ Servlet对数据进行检验,启动多线程从XML中提取数据。
⑧ 数据合法,生成SQL语句向后台数据库DataBase提交本次更新数据。
⑨ 向客户IE返回用户的回馈信息,数据库中数据更新成功或更新失败的原因。
3.4 核心说明3.4.1 Excel模式的XML文档结构用BNF范式表示如下:
单元格:<cell> <data ss:type="datatype"> datavalue</data></cell>
行: <Row>{单元格}</Row>
工作表:<sheet> {行}〈/sheet>
工作薄:<Worksheet>{工作表} </Worksheet>
如行的匹配模式可定义为:
<Row> .* </Row> //> <之间可以存在任何字符3.4.2 关于模式匹配的实现由Java API核心库中java.util.regex包定义的两个子类Matcher和Pattern共同完成模式匹配操作,其中Matcher执行匹配操作, Pattern定义匹配模式。运行文法形式不难写出相应的匹配模式。
例:Pattern p1=Pattern.compile("<Row .*</Row>",42);//定义匹配模式及规则Matcher m=p1.matcher(InXml);//指定要求匹配的字符串String rec;While( m.find()){rec=m.group();.//获取当前匹配对象的字符串System.out.println(reg);}
3.4.3 Excel模式的xml生成
利用Java API核心库中java.lang.String包,String类中字符串替换函数:
public String replaceAll(String regex,String replacement)public String replaceFirst(String regex, String replacement)regex定义匹配模式replacement定义匹配对象例:
String cells="a1a1a1a1";Cells=cells. replaceAll(“a1”,”ty”);//生成Cells字符串4 个连续的ty,,即“tytytyty”;String cells="a1a1a1a1";生成一条记录的四个字段的方法Cells=cells. replaceFirst( (“a1”,”ty”);//生成Cells字符串中将第一个”a1”替换为”ty”,其他均不进行替换操作利用这两个函数可实现Excel模式的xml生成。
本问题涉及的要点全部分解完毕:核心是使用基于文法的形式对Excel模式的XML的解析与生成,可以由java提供的核心API中的类实现;能使用户能进行大批量数据的修改,是通过向客户端的IE发送Excel模式的XML文件,同时设定将MIME描述为"application/vnd.ms-excel",客户端接收后自动启动Excel。
4. 小结
使用本文提供方法成功的开发出县市联考网上登分系统。本文以XML文档格式作为文件传送的桥梁,用Java语言实现Web方式下服务器和客户机间大批量数据的解析与生成,实现在客户端对服务器进行大批量修改数据。同时基于文法的XML解析模式的使用对于今后解析XML文档具有工程参考价值。