admin 管理员组

文章数量: 887021


2023年12月23日发(作者:德国表态不禁)

SOFTrWARE DEVEL0PMENT AND DESIGN 软件开发与设计 基于Struts2的无刷新翻页报表系统的设计与实现 崔志勇 ,钱存华 ,姚绍武 ,邵建峰 (1.南京工业大学,南京211816;2.湖州市新开元碎石有限公司,湖州313022) 摘要:探讨了J2EE平台下的MVC开发模式,研究基于Struts 2框架的Web报表,分析了Ajax数据交换技术, 实现了Web报表无刷新翻页的功能。 关键词:Struts 2;异步交互;无刷新翻页;Ajax Design and Realization of Not Refurbishing Flipbook for Report Forms System Based on Struts2 CIJI ,QIAN C,mh ̄,YAO Shaowu ,¥HAO Ji| (1.Nanjing University of Technology,Nanjing 211816;2.Huzhou Xinkaiyuan Crushed Stones CO.,LTD,Huzhou 313022) Abstract:This paper analyzes one of the MVC models on J2EE platform,researches Web report based on Sturts 2,analyzes Ajax interchange of data technology,and ifnishes lfipbook without refreshing for Web report ofrms. Key words:Sturts 2;Interact Asynchronously;Not Refurbishing Flipbook;Ajxa 随着计算机技术和网络技术的普及,很多公司及企事业单 式;使用xMLHttpRequest对象在用户和服务器之间交换操作 位需要将一些积累的数据做成报表,以便汇总及阅读。常用 数据;使用JavaSeript将它们绑定在一起,动态实现上述目的。 的报表形式主要有Excel报表、word文档以及pdf格式的报表 2 传统的Web应用模型及Ajax工作原理分析 等等,在此主要探讨Web报表。 目前大多Web报表都属于传统的Web网页,是同步工作 Web报表在数据量不多的时候,也往往会有数百数千甚 的,单击一个链接或按钮,向服务器提出请求,需要和服务 至数万条记录,这些数据放在一页显示,会出现等待页面的 器交换数据,客户端等待服务器的响应,然后刷新整个页面 延时过长,上下篇幅过多,不方便阅读。因此,目前的Web (如果使用框架则刷新框架内页面)。即便只有网页的小部分 报表基本采用分页的方式,这样每页显示不多的记录方便阅 内容需要更新,整个页面的数据都需要同步交换。 读。很多Web报表页面翻页的时候,是在向服务器提交请求, 使用Ajxa技术,客户端和服务器端交换数据是异步的, 然后等待服务器响应,客户端浏览器得到响应,刷新页面。 数据的更新不会导致整个网页的改变,只更新数据改变的那 这个过程不仅传递了下一页所需的数据,也传递了页面的显 部分。从这个角度看,Ajxa反应速度更快。 示形式的HTML代码,传递显示形式是一个重复的工作,每 如图1,两种工作模式的唯一不同是Ajax在浏览器和服 一页的显示形式基本一样,只有数据才是必须传递的。而用 务器之间增加一个Ajax引擎,用户向服务器发送请求时,不 户再提交请求,还有一个等待服务器响应和数据传递的过程, 直接发过去,而是由Ajax引擎处理后再发送给服务器。服务 这个等待的时间是可以缩短和隐藏的,数据传递量也可以去 器在向用户浏览器返回数据时,也是通过引擎处理后,再显 除显示形式的代码数据,就此问题提出解决方法。 示到客户端浏览器。 1 Struts2和Ajax技术 大部分界面上的用户动作触发一个事件到Web服务器的 Sturts2不是简单地对Sturts的升级,是以WebWork的设 H1TIP请求,服务器完成一些处理,接收数据,处理计算,再访 计思想为核心,吸收了目前使用广泛的MVC框架Sturts1的部 问其他的数据库系统,最后返回一个HTML页面到客户端。 分优点,建立起来的优秀的MVC框架。Sturts2采用一种非常 这种旧的途径使得每一个动作用户都要等待,如何按桌 松耦合的设计,让系统的Action不再与Serlet API耦合,增强 面程序的思维设计Web应用,不让用户总是等待。通过在用 了单元的测试性。Struts2具有强大的标签库,这些标签不仅 户和服务器之间引入一个Ajxa引擎,可以消除Web的开始一 提供了表现层的数据处理,同时还提供了国际化、Ajxa、上传 停止一开始一停止这样的交互过程。使用Ajax技术,不像加载 下载的功能。 一个页面一样,在会话的开始,浏览器加载了一个Ajax引擎, Ajax是Asynchronous JavaScript And XML的缩写,由 采用JavaScript编写并且通常在一个隐藏frame中。这个引擎 Adaptive Path公司的Jesse James Garrett于2005年2月在一篇 负责绘制用户界面以及与服务器端通信。如图2所示,Ajax 演讲中提出这个术语。AjaX不是新技术,而是几种原有技术的 引擎允许用异步的方式实现用户与程序的交互,不用等待服 重新应用。这些技术包括:XHTML和CSS处理网页内容和表 务器的通信。所以用户不用打开一个空白窗口,看到等待光 现形式;使用文档对象模型(Document Object Mode1)作动态显 标不断地刷新,等待服务器完成后再响应。 示和交互,控制网页;使用XML和XSLT作为数据交换的格 要产生一个HTrP请求的用户动作由JavaScfipt调用Ajax 收稿日期:2010—04—05 引擎来代替。任何用户动作的响应不再要求直接传到服务器, 一1一 

电脑编程技巧与维护 例如简单的数据校验、内存中的数据编辑,甚至一些页面导 航,引擎自己就可以处理它。如果引擎需要从服务器取数据 框架。 <filter> <filter-name>struts2</tilter-name> 来响应用户动作,假设它提交需要处理的数据,载入另外的 界面代码,或者接收新的数据,引擎让这些工作异步进行, <filter-class>org.apache.struts2.dispatcher.FilterDis— 通常使用XML,不用再耽误用户界面的交互。 客户端浏览器 : 客户端浏览器 “~ ^ 一一一 一 …一~一 一 … ……… ….…… .…. . I 用户接口 用户接13 css I Aiax引擎 web服务器或 web服务器 XML服务器 JJ T J 1、 I 用户接13 I 用户接13 ■………………………一~ ■………~…~…………j ; - 服务器端系统 ● … 冀 至筝… ●  、传统的Web应用模式 Ajax Web应用模式 图l传统Web应用模型与Ajax模型的比较 传统的Web模式(同步) AjaX下Web模式(异步) 图2传统Web应用的同步交互过程和Ajax应用的异 步交互过程的比较 3 报表无刷新翻页实现 (1)配置web.xml文件,添加filter的声明,使用Struts2 —8一 patcher </filter-class> </iflter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/ </url-pattern> /<filter-mapping>。 (2)配置struts.xml文件,声明result—types,即在客户端 请求的数据名称及类型;声明action,根据客户端的用户动作 匹配相应的action,并作出处理和响应。 (3)在iava action中声明用户请求的数据类型变量,该变 量与resuh—types所定义的变量必须名称和类型都相同,并且 根据用户动作,给变量赋值。 (4)将上面的变量以xml数据的形式传递到客户端。 (5)客户端脚本对xml数据进行接受并解析,通过Java Script实现无刷新的翻页。 创建xm1Ht【p对象,objXmlHttp=new XMLHttpRequest 0; 发送请求、调用回调方法,xmlHttp.open(”GET”,url, false); xmlHttp.setRequestHeader(”If_Modified—Since”,”0”); 得到返回过来的XML对象,进行数据处理 vat xmlDoc=new ActiveXObject r”Microsoft.XML— DOM”); xmlDoc.1oadXML(xmlHttp.responseText) 根据对数据的分析,通过JavaScript实现页面的无刷新更 新。 4分页查询的存储过程及实现 在实现翻页的过程中,需要对数据进行分页。传统的方 法是一次性将客户端所需的所有数据从数据库获取,保存于 服务器端的内存中,这种方法对资源消耗多,同时一次性获 取所有数据,可能造成用户等待时间偏长。 服务器端业务处理层实现与数据库进行数据交换,通过 建立存储过程的方法每次取出当前页所需的数据。数据量会 减少很多,同时数据可执行的速度会更快,服务器对客户端 的响应时间相应减少。 根据输入参数当前页码、每页显示的数据量、所查询的 表名称以及排序依据的字段名称来获取数据库数据。其实现 分页查询的存储过程代码如下: CREATE proc procPagination @currPage int,@pageSize int,@tableName varchar(50), @tableId varchar(50) aS begin declare@sql varchar(8000) set@sql= select top +convert(char(5),@pageSize)+ from @tableName+ where @tableld not in set@sql=@sql+ (select top +convert(char(5),@page— Size r@currPage-1))+ "+@tableId+ from +@tableName (下转到11页) 

S0FrWARE DEVEL0PMENT AND DESIGN 业务逻辑层去访问DAL数据访问层直接处理数据。 前台UI层也提供了一些对于用户输入数据的验证功能, 目的是在提高效率,把能在前台做的操作直接操作。 (2)BLL业务逻辑层接受前台UI层发送过来的数据,并 J 软件开发与设计 (4)数据库公用访问组件采用的是动软开发Maticsof1. DBUtility组件封装了ADO.NET数据访问代码,涉及到本次插 入功能的ExecuteSql方法。该组件将所有的ADO.NET组件都 封装到控件中,可以增加代码复用。 三层架构是一种严格分层方式,用户通过前台UI层发送 把数据校验后将逻辑传递给DAL层,此层为前台uI层和 DAL层建立一个桥梁。 (3)DAL数据访问层直接处理BLL层传递过来的数据, 信息给后台BLL业务逻辑层,业务逻辑层处理数据,并把数 据发送给DAL数据库访问层,DAL层通过公有的数据库访问 组件进行底层的数据处理。同样,用户获取数据也必须通过 例如添加IP黑名单操作。该层操作全部采用参数化查询方式, 避免危险的SQL注入。添加IP黑名单代码如下: void insert(string startip,string endip) 与BLL层交互。三层之间松散耦合,各层之间通信必须通过 { 相应接口。 string str=”insert into badip(bstart,bend,bstartstring, bendstring)values(?,?,?,?)”; 3 结语 OleDbParameter f]op=new OleDbParameter[4]; 主要讨论了基于.NET三层架构的全文传递系统的实现。 op【0】=new OleDbParameter(”@bstart”,OleDbType. 三层架构是目前软件开发的主流方向,这种架构的系统具有 Double); 开发效率高、耦合度低、易于维护等特点。 op【1]=new OleDbParameter(”@end”,OleDbType. Double); op[2] =new OleDbParameter(”@bstring” , 参考资料 OleDbType.VarChar); [1]徐建哲,沈芳阳.三层结构及其应用实例研究【J】.广东工 op[3] =new OleDbParameter(”@bendstring”, 业大学学报,2003,12(12):79—80. OleDbType.VarChar); 【2]胡百敬,姚巧玫.SQL Server 2005数据库开发详解[M]. op【O】.Value=stringToLong(startip); 北京:电子工业出版社,2006. op【1】.Value:stringToLong(endip); op[2】.Value=startip; . 【3]叶安胜..NET通用数据访问层封装[J].成都大学学报 op[3].Value=endip; (自然科学版),2007. Maticsoft.DBUtility.DbHelperOleDb.ExecuteSql(str,op); (上接第8页) set@sql=@sql+ order by +@tableId+ 1 order by 互性能好的Web开发模式。目前各大浏览器和技术平台对A— +@tableld jax持续关注和支持,通过MVC框架结合Ajax技术会得到越 exec(@sq1) end 来越广泛的应用。 GO 参考文献 5 ajax缓存问题 【1】丁波,晁爱农.基于Struts2框架的AJAX开发研究[J]. Ajax使用时,有一个问题,删除一项,恢复之后就不能 计算机工程与设计,2009,30(16). 再接着删除,必须要等一段时间,这是IE缓存的问题,解决 [2]刘利军,王冉冉,马帅,黄青松.基于J2EE的Web报表 方法探讨: 系统的设计与实现.计算机技术与发展Ⅲ,2007,11 (1)在Ajax请求的页面后加个随机函数,可以使用随机 (17). 时间函数,在JavaScript发送的URL后加上t=Math.random 0。 【3]吴淑雷,雷景生,陈焕东.基于XML的异构数据交换技 不是直接把t=Math.random()拷贝到URL后面,应该是: 术.广西师范大学学报【JJ,2007,6(25). URL+”&”+”t=”+Math.random 0: 【4]肖舒,赵建华,李宣东,等.J2EE平台上的所见即所得 (2)在xMLHnpRequest发送请求之前加上XMLHttpRe- 的HTML电子表格工具的设计.计算机科学[J], quest.setRequestHeader(”if-Modiifed—Since”,”0”)一般情况 2007,12(34). 下,这里的XMLHttpRequest不会直接使用。应该在代码 XXXXX.send(YYYYYY);前添加XXXXX.setRequestHeader(’. If-Modified—Since”.”0”1。 作者简介 6结语 崔志勇,男(1983一),硕士研究生,研究方向:可靠性研究、 针对传统的Web报表翻页等待的问题,提出了使用 信息系统。 Struts2+Ajax架构、同时在数据库端使用分页查询的存储过程 钱存华,教授/博士。 的方案来解决此问题。这个方案可以提供更高效、便捷、交 邵剑峰,讲师/硕士。 


本文标签: 数据 用户 实现 报表