gwt默认是使用ant脚本的。但是我们的项目都十分依赖maven,因为maven实在是太方便了。
在gwt项目中使用maven并不难,主要是使用这个插件:
目录结构和ant或者eclipse gwt插件稍有不同:
所有java文件采用的是maven惯用目录结构,但是web部分,使用ant和eclipse gwt插件约定的结构,这样是为了能使用到gwt eclipse插件。
使用eclipse的gwt插件可以自动生成gwt项目。
gwt sdk中也提供了命令行工具实现相同的功能,而且会生成一个ant的build.xml文件,供运行和测试等。
首先要下载gwt sdk,是一个zip包,把它解压缩到比如/opt/下,那么应该是/opt/gwt-2.0.0类似的一个目录。把这个路径设置到path环境变量中。这样就可以在任何目录下使用gwt sdk提供的命令了。
创建gwt项目的命令:
webAppCreator -out my_gwt_demo com.easymorse.DemoService
这将会创建一个名为my_gwt_demo的目录在当前目录下。项目的模块名为com.easymorse.DemoService。
可通过firebug观察gwt rpc调用请求和响应的内容。
使用eclipse自动生成的项目示例。观察到的请求内容如下:
可以看出是post请求。
观察到的响应内容:
在使用google chart生成动态图中演示可以使用google chart轻松生成统计图。如何将这个功能动态加入gwt程序中呢?也很容易。
RootPanel.get().add(new HTML("<img src=\"http://chart.apis.google.com/chart?cht=p3&chd=t:40,34,8,7,4,4,1&chs=500×250&chl=iPhone|Symbian|%E9%BB%91%E8%8E%93|Android|webOS|windows|Palm\" />"));
加上这句到代码中即可。效果如下。
gwt2.0包含了一种叫做ui binder的机制,用于使用自定义xml(html)页面模板绑定数据对象。这样可易于编写复杂和自定义界面组件。
这里演示通过eclipse的gwt向导生成最简单的ui binder。首先创建:
早期使用ajax开发的一个缺点是,当选择浏览器的回退按钮或者快捷键时,会跳出应用。而不是回退到上一步操作。
当前的ajax框架都提供了对这个问题的解决方案。gwt也不例外。
在在gwt树型菜单基础上动态加载视图基础上实现了这个功能。基本思路是,创建一个map,放置标记字符串和树型节点条目。其中标记会显示在地址栏中。
比如这里第一个菜单项的标记是字符串1,第二个是2。然后,通过:TreeItem.setUserObject()方法设置这个值。
经常有这样的需求,类似gwt showcase,左边是树型菜单,右边是动态的视图。
但是gwt showcase是为了展示功能,代码看上去很复杂,比如包括样式的处理、延时加载等等。
这里写了一个最简单的gwt应用,示意性的实现类似功能。
这个示例不包含样式方面的东西,比较丑陋。而且右边的widget也比较简单,就是一个html。
代码十分简单,因此不给出源代码了。
以下说明实现的步骤。
日志引用
gwt提供了一个show case项目,用于展示gwt各种图形窗口小部件的功能。该项目在gwt的sdk文件的samples目录下,有一个Showcase目录,就是showcase项目。
下载sdk的链接:
点击download SDK即可。
其实也可以在线看到这个showcase项目,见:
这个项目和在线的是一样的。
把它导入到eclipse项目,也很简单。首先在eclipse中创建一个web application project项目。然后将Showcase目录中的所有文件复制到该eclipse项目的目录下即可。
这样就可以通过修改/调试show case项目学习gwt了。
如果已经实现了gwt项目,这里指在eclipse中创建的gwt项目(还可以通过ant),那么部署到servlet容器,比如tomcat下,是很容易的,只需直接复制项目的war目录即可。
不过要注意的是在部署之前,需要编译项目。这个过程需要花点儿时间。编译后,会在war目录下的项目名称的目录下,生成一些js/html等文件,这些文件会在产品模式(production mode)下使用,也就是部署到servlet容器下使用。
如果gwt项目不牵扯到服务器端rpc交互,甚至可以部署到apache目录下,因为实际上是js文件,在浏览器端产生动态效果,并不与服务器通讯。
编译过程截图: