一种基于标签库的Webservice二次快速开发模式
- 格式:pdf
- 大小:171.72 KB
- 文档页数:3
作者简介:陈迟兵(1983-),男,湖北枝江人,中国地质大学硕士研究生,研究方向为网络地理信息系统研究与应用。
一种基于标签库的Webservice 二次快速开发模式陈迟兵(中国地质大学信息工程学院;教育部地理信息系统软件及应用工程中心,湖北武汉430074)摘要:随着Webservice 服务的完善与网络技术的进步,传统的Webservice 二次开发模式已经不能满足用户的需求,大量的脚本与服务器端的逻辑代码给二次开发带来了从开发到维护上等一系列的问题。
鉴此,在新的开发体系中引入了JSP 标签库,页面模版,Ajax 等新的技术,实现了快捷、高效的零知识、零代码的网络电子地图的二次开发模式。
关键词:JSP 标签库;Webservice ;Ajax 中图分类号:TP393.09文献标识码:A文章编号:1672-7800(2009)05-0126-030引言Webservice 作为一项新的技术出现在我们面前,它的出世是用于解决在不同的平台下的应用的协同的。
由于Webservice 自身的开放性,可以跨平台对服务进行调用,本文中主要介绍的是基于J2EE 服务的网络电子地图二次开发体系。
基于WebService 的网络服务开发实现了基于OGC 规范的WMS 、WFS 、WCS 服务的开发。
支持客户端的WMS 浏览、WFS和WCS 信息浏览与转换。
实现了网络电子地图的显示,地理矢量数据的查询和处理。
笔者针对以往网络电子地图二次开发优化,以及零知识、零代码编程方面提出了一套比较完善的解决方案,为用户提供透明的开发体系,在大大减轻二次开发复杂度的同时,开发效率得到成倍的提升。
1传统的二次开发模式1.1传统的二次开发模式体系在实际的Web 站点开发过程中,我们关心较多的是服务器端的业务逻辑层。
在传统的开发模式中,我们将Web 服务接口,利用Java Bean 根据不同的操作封装成不同的方法,例如将WMS 服务接口封装成放大、缩小、复位等涉及到取图的操作,并在JSP 页面中对Java Bean 进行调用。
在客户端的编程中主要针对不同的服务器端参数进行页面调度,在任何的Web 站点实现过程中,这些工作都是最基础的,但不同的脚本库设计与服务器端框架设计会直接影响到站点运行的效率以及客户的二次开发难易程度。
图1是基于WebService 的网络电子地图二次开发流程示意图。
第8卷%第5期2009年5月Vol.8No.5May.2009第5期结构,降低系统复杂度与维护难度。
对于服务器端,常采用的代码逻辑,如地图显示,查询等,我们将其封装为页面模板,开发人员不需要复制粘贴代码即可实现代码重用。
对于客户端脚本,我们使用面向对象思想进行了重构和简化,使其结构化,模块化,便于二次开发用户阅读和理解客户端交互和运转流程。
同时脚本库提供了若干二次开发接口,用户只需要极少量的代码即可实现脚本的二次开发。
新的脚本加入了AJAX技术,极大地减少了页面刷新,提高了性能,改善了用户体验。
在老的开发框架里,广泛采用了页面框架设计(Frameset 嵌套Frame的方式),这种方式有着它固有的优势,但也存在着一些问题,比如用页面框架来进行布局本身就比较繁杂。
新的体系中取消了这种方式,地图显示直接在主页面上进行,需要用到的局部刷新的页面广泛采用页面子框架(IFrame)。
这样做的好处是,开发人员即可以方便的把与相关的布局嵌入到其他的系统中,也可以在现有的布局中加入自己的东西。
2.2二次开发体系简介与传统的Web应用开发方式相比较,在新的开发模式中在浏览器端添加了一个层--Ajax engine,如图2所示。
在Ajax engine方式下,HTTP基于请求/响应的范式仍然没有变化,但是由于XmlHttpRequest对象(Ajax engine的核心)的支持,我们不需要以前那样将每一次请求发送到服务器后,由服务器解析请求再进行发配,之后返回刷新用的HTML页面。
在新的方式下,由于事件的监听和处理在浏览器的内部实现,它的反应周期可以被缩短,事件的处理力度可以更方便地做到更细,而且由于支持异步方式发送Request请求和接受Response响应,用户事件的控制有了更大的灵活性。
图2新的WebService版平台体系结构在新的二次开发体系中,采用的是基于MVC模式的Strust 框架作为开发技术,强制性将应用程序的输入、处理和输出分开,如图3所示。
将原来的JSP中与客户端脚本混写在一起的服务器端代码分离开来,这样不仅利用代码的重用,也利于代码的阅读。
2.3标签库的开发2.3.1JSP标签库的设计新的二次开发体系中将广泛采用JSP标签库,将页面中较为复杂的逻辑设计封装起来,利用自定义标签的方式加以展现。
例如在网络电子地图网站中最常见的放大、缩小、移动、复位基本操作,将针对其不同的功能设计不同的标签,以及标签的属性。
JSP标签库的主要功能就是减少页面代码,封装功能模块,开发人员只需在页面添加一行标签,就可以实现一个功能。
就标签的不同功能大致可以将自定义标签划分为5类分别是:(1)按钮类:放大、缩小、拖动、复位、更新(2)选择类:点击、拉框、画圆、多边型、折线、多点(3)容器类:地图容器、框架容器、Div容器(4)组合类:属性查看、属性编辑、属性统计、条件生成器、叠加分析器(5)其他:图层列表、右键菜单依据这些常用功能,封装了多达22个标签,能够满足大多数开发的需求,在后续的工作中,标签库的体系会进一步丰富和完善,以便开发人员提高工作效率。
2.3.2脚本库在以前的脚本库设计中,主要以操作来给脚本库分类设计,例如绘图类、闪烁类、鼠标事件类。
在以往脚本库的基础上,笔者吸取了其在分类方面的优缺点,对脚本库进行了新的设计,图4是脚本库结构图在新的脚本库设计中采用面向对象的思想对原有脚本库进行重构和简化,脚本针对不同对象进行基于对象的封装。
例如对于地图的鼠标操作,我们将其封装为地图类(MapClass),2009年软件导刊A Faster Webservice Secondary Development ModeBased on JSP Tag LibraryAbstract :With the development of Webservice and Internent techniques,the traditional secondary development mode based on Webser -vice can no longer meet the needs of users.A large number of scripts and server-side logic code bring a series of questions in developing and maintaining.This paper introduces JSP tag library,page templates,Ajax and other new techniques to the new development system in order to achieve a faster,more efficient zero-knowledge and zero-code secondary development mode.Key Words :JSP Tag Library;Webservice;Ajax在该类中将对地图的鼠标事件、右键菜单进行封装。
这样每次对地图进行基本操作时只需要调用基于地图类的基本方法即可实现,无须关心参数转换以及传递交互的过程。
在脚本库中还将VML 绘图进行了单独封装,对于显示状态类(MyView -StateClass ),其主要对地图逻辑坐标转换、值的传递等状态方法进行了封装。
更值得一提的是新的脚本库中加入了Ajax 技术,主要体现在地图显示以及空间分析等操作中,由用户产生的页面事件交由Ajax 引擎处理,它负责向服务器端发送请求,服务器传回的是业务数据而非HTML 。
引擎接受之后,进行渲染,通过浏览器的解析在页面上显示出来。
也就是将事件监听与页面渲染工作交给了浏览器,而后台服务器只负责业务逻辑的处理。
2.3.3JSP 标签库与脚本库的结合JSP 标签库的主要功能就是减少页面代码,封装功能模块,下面以地图容器标签为例对JSP 标签与IMS 脚本库的结合过程作简要介绍:首先需要在页面的头部分添加标签库引用<%@taglib uri="ZDMCC"prefix="ZDMCC"%>接下来添加脚本引用<script type="text/javascript"src="js/Map.js"></script>再然后MapContainer 标签。
以下依次是IFrameContainer 标签和右边一个MapContain -er 标签:<ZDMCC :MapContainer id="MapContainer1"height="300"width="400"showMapOnLoad="True"curLogicMinX='<%=curLogicMinX%>'curLogicMinY='<%=curLogicMinY%>'curLogicMaxY='<%=curLogicMaxY%>'curLogicMaxX ='<%=curLogicMaxX%>'logicMaxX ='<%=logicMaxX%>'logicMinY ='<%=logicMinY%>'logicMaxY ='<%=logic -MaxY%>'logicMinX='<%=logicMinX%>'mapDataSource='<%=map -DataSource%>'targetPage="GetMap.jsp"></ZDMCC :MapContainer>MapContainer 标签用来控制地图的显示。
从上面的示例代码中可以看出,标签中有许多属性需要设置,正是通过这些属性,传递了需要显示的地图信息,并指明将这些地图信息传送到那个页面进行地图的获取。