《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > Vaadin开源框架
Vaadin开源框架
来源:微型机与应用2014年第1期
孙 雄
(天津工业大学 电气工程与自动化学院,天津300000)
摘要: 传统的Web应用开发会面对开发效率低下,疲于应付用户差异化需求,以及浏览器兼容等问题。Vaadin是一个用于创建互联网富应用程序的优秀开源框架,其拥有种类丰富功能完善的UI界面组件库,每个UI界面组件都带有自身的事件监听机制以及数据绑定功能。同时Vaadin还拥有各种由GWT实现的控件,由于Vaadin前台后台都采用纯Java语言实现,不用像传统的Web开发写Javascript代码,这就很好地解决了传统Web开发中所面临的前台后台兼容性开发问题。
Abstract:
Key words :

摘  要: 传统的Web应用开发会面对开发效率低下,疲于应付用户差异化需求,以及浏览器兼容等问题。Vaadin是一个用于创建互联网富应用程序的优秀开源框架,其拥有种类丰富功能完善的UI界面组件库,每个UI界面组件都带有自身的事件监听机制以及数据绑定功能。同时Vaadin还拥有各种由GWT实现的控件,由于Vaadin前台后台都采用纯Java语言实现,不用像传统的Web开发写Javascript代码,这就很好地解决了传统Web开发中所面临的前台后台兼容性开发问题。
 关键词: Web开发;Vaadin框架RIA应用程序;GWT

 现如今,基于浏览器端的Web程序已经越来越盛行,用户的桌面上,浏览器已经变成人们与外界沟通的第一站。人们对于浏览器的要求已经不仅仅限于信息的展现,而应该是能完成各种复杂的需求和有着完善功能的RIA应用程序的承载体。传统的Web开发模式效率比较低下,可复用率低,这给Web开发的技术人员和机构带来了前所未有的挑战,本文着眼于对Vaadin Web开发框架的前端性的研究,探讨一种效率高,优秀的RIA Web应用开发方式,并且让开发人员从繁琐的前台工作中解脱出来,满足用户差异化复杂化的需求。
1 研究的背景与目的意义
1.1 Web开发目前状况

 浏览器富应用程序的越来越盛行,使得浏览器不再仅仅是人们信息交流沟通的工具,而是能满足用户各种需求的RIA应用程序的载体,用户对B/S架构的浏览器应用要求越来越高,但复杂的RIA应用程序会给开发人员带来很多重复性的工作,而且前台和程序开发人员之间的配合也存在较大的阻碍[1]。
1.2 研究的目的
 探讨Vaadin Web开发技术对解决传统Web程序开发中后台开发人员和前台开发之间要相互制约,相互影响,沟通困难的解决方案,以及对Web程序模型层,视图层的分成开发模式的研究。
2 Vaadin Web开发框架
2.1 Vaadin简介、开发环境配置以及基本开发技术

 Vaadin是一款开源产品,使用Apache V2许可协议,由芬兰的IT Mill公司开发,IT Mill公司发布的2006版本名为IT Mill Toolkit,该版本包含了一项全新的技术,基于Ajax的表现层引擎,可以让客户端与服务器端的通信变得更简单。
 2009年,IT Mill公司为了避免命名上的混淆,用芬兰民间传说中的一种神话生物,是女神也是一种山岭驯鹿的神话祖先名Vaadin作为全新的名字发布了其第六个版本。
 Vaadin是一个用于创建互联网富应用程序的优秀开源框架,其拥有种类丰富功能完善的UI界面组件库,每个UI界面组件都带有自身的事件监听机制以及数据绑定功能。同时Vaadin还拥有各种由GWT实现的控件,由于Vaadin前台后台都采用纯Java语言实现,不用像传统的Web开发前台需要Javascript实现。Vaadin有客户端组件和服务器端组件两套UI组件,客户端组件是由服务器端组件驱动的,当客户端组件与服务器端组件绑定之后,通过事件监听机制,服务器端可以方便快捷地处理客户端UI的事件。
 Vaadin是通过GWT的原理对界面进行CSS渲染的,它所有的CSS代码都是由Java代码通过GWT编译后自动生成的CSS代码,开发人员不用去关心前台的CSS样式,由框架自动生成。Vaadin拥有完善的mvc分层开发模式,前台View层、逻辑业务层的代码是完全分层的,只有当程序运行时,才将具体的View和相应的Mode层绑定起来,完成相应的业务逻辑功能。Vaadin不仅仅是提供了核心的开发框架,在Vaadin社区vaadin.com还提供了非常丰富的插件供开发人员使用,这就极大地提高了开发人员的开发效率。使用Vaadin开发的应用程序完全兼容市场上大多数种类的浏览器,不需要安装任何插件就可以在浏览器里面运行,同时还能很好地处理url传值,以及浏览器后退按钮,Vaadin还有个优点,能防止恶意代码的攻击,传递信息具有安全性。
 Vaadin可以和任何J2ee兼容的系统兼容,既可以像Java和Javascript等语言一样嵌入HTML或者JSP页面里面运行,而且完全兼容Java的Servlet机制。Vaadin开发环境的搭建很简单,只需要去Vaadin社区下载开发jar包以及Eclipse或者NetBean插件就可以在上述两个平台上面进行应用程序的开发。
Vaadin应用程序很大程度上与C/S架构应用和桌面应用程序很相似,视图的基本单位是窗体,一个应用程序就是由许多窗体组成的,每个应用程序都有唯一的一个application入口,如下代码所示为Vaadin的一个简单示例应用。
package com.example.Vaadingapp;
import com.Vaadin.Application;
import com.Vaadin.ui.Label;
import com.Vaadin.ui.Window;

public class mainApplication extends Application {
    @Override
    public void init() {
        /* …添加一个主窗体…*/
        Window mainW = new Window("mainApplication");
        setMainWindow(mainW);
        /*…在主窗口中添加一个子窗口UI…*/
        Label lab=new Label("hi,welcome to vaadin");
        mainW.addComponent(lab);
        Window win=new Window("Sub Win");
        mainW.addWindow(win);
    }
}
 图1为基于窗体的RIA应用程序示例。

2.2 Vaadin的数据模型
 Vaadin的数据模型是整个Vaadin框架中的一个核心概念,数据模型机制可以将UI组件与应用程序的数据源直接绑定在一起,这样修改数据就非常方便,直接在UI端修改就可以了,修改后的数据直接存入数据源,不需要中间层的转换。Vaadin的数据模型包含3层嵌套的抽象对象:property、item和container。整套模型的实现位于包com.Vaadin.data中。由接口Property、Item、Container和其他一系列更加细化的接口和类组成。数据模型本身并不定义数据的表现形式而只是一些接口定义。具体的表现形式需要由容器的实现来定义。实现的形式可以是多种多样的,例如Java POJO对象,文件系统或是数据库查询等方式。Vaadin框架提供了这几个接口的一些内置实现类来作为UI组件的默认数据模型。下面对这些接口和实现类做一简要介绍。
Property:属性接口是Vaadin数据模型的基础,提供了标准的API接口来读取单独对象的数据,Property还提供ValueChangeEvent的事件广播,当属性值发生变化时,可以被ValueChangeListener监听器处理。Property的读写方法为getValue()和setValue()。getValue()返回通用的Object类型的对象,因此可以强制转换成所需的数据类型。Property的类型可以通过getType()取得。
 Item接口相当于Property属性的容器,Item可以用来管理Property属性,Item中的每个property都由唯一的一个PID确定,Item可以通过getItemProperty()来读写其中的Property。Vaadin应用程序开发中很多地方会用到Item,比如对于一个Table对象,Item可以对应到Table每一行的某个coloumn。Tree的每个节点数据也可以对应到一个Item,在Web开发的表单提交中,每个Item可以对应一个数据输入控件。使用Item可以实现Item接口,最简单的方法是使用Vaadin的PropertysetItem或BeanItem。
 Container:容器是Vaadin数据模型中的最高层接口。正如Item是property属性的容器一样,Container是Item的容器,Item在Container容器中有唯一的item identifier标识,Container通过方法addItem(),getItem()等方法来灵活管理Item属性,addItem()方法是用来在Container容器中添加一条Item属性的,同样,可以通过getItem()方法来从Container中获取一个Item对象。Container内部包含了一些排序的接口,如果实现了这些接口,就可以为Item属性排序,这个接口的典型应用就是对table中选中某一个属性,然后对其进行排序。Container接口也内建有事件监听机制来处理内容变化。IndexedContainer、BeanItemContainer和FilesystemContainer都是Container容器的内置实现类。其中IndexedContainer是Vaadin框架的默认Container实现。
3 Vaadin框架的开发流程
 Vaadin是纯Java语言开发框架,基本可以支持所有的Java开发编译器,但Vaadin主要为eclipse,netbeans提供了开发插件。在Vaadin官网下载相应的IDE插件,然后集成到开发环境中,搭建好其他Java开发所必需的环境以及服务器之后就可以进行Vaadin应用的开发了,综上,可以在但不限于上述两种IDE中快速开发Vaadin应用。
 Vaadin的一般开发流程如图2所示。

4 Vaadin框架相对于传统web开发模式的优势
 Vaadin是一个服务器端实现的RIA框架,这与一般的客户端实现的RIA有很大的不同。一般的客户端RIA实现中,服务器端基本上只负责处理数据,并暴露REST风格的接口;而客户端则依托JavaScript框架或浏览器插件来实现复杂的界面逻辑。服务器端RIA的好处在于客户端的逻辑变简单了,但是交互性却没有受到影响。这是依靠Vaadin的界面组件来实现的。Vaadin中的界面组件包括服务器端的Java实现和该组件在客户端的对等体(peer)。组件对等体之间的通信由框架完全负责。Vaadin的客户端组件是通过Google的GWT转换出来的,但是Vaadin相对于GWT来说的一个重要优势在于Vaadin只包含服务器端的Java实现,可以完全忽略客户端的存在。客户端的处理完全由框架来完成。
 Vaadin框架非常适合产品的快速原型开发。因为它只有服务器端的Java实现,在原型开发中要考虑的因素很少,可以快速完成。而在实际的项目中,如果是传统的数据库驱动的信息管理系统,Vaadin也比较合适。 表1为Vaadin与现阶段比较流行的几个开发框架的对比:

 文章简洁的介绍了当下基于B/S架构的Web应用开发的基本状况,探讨了RIA应用开发存在的一些问题,对Vaadin开源框架进行了深度的解析,以及介绍了Vaadin的开发流程和在RIA应用开发方面所拥有的优势。
参考文献
[1] 马荣.谁是未来的主宰?浅析Web App发展现状[N].http://soft.zol.com.cn,2012(12):25.
[2] Vaadin Team,Vaadin6.88中文开发手册[M].https://vaadin.com,2011.

此内容为AET网站原创,未经授权禁止转载。