GWT hotye.com 好易自助终端
?
?
经过1年多来反反复复改版、业务需求逻辑不断变化,广州最大自助终端好易,其网站hotye.com定版3.1,hotye网站由java gwt开发。开发人员3-6名。
?
没有听过gwt? gwt是什么? 以下为你浅析gwt以及hotye.com
?
?
?
gwt 是什么
gwt全称google web toolkit 由google的开源项目,用java开发、调试类似swing代码,最终编译成javascript。
接触过gwt的都感觉gwt是一个十分有趣项目:
?
1 独创host模式,开发、调试ajax代码:
1.1编辑 Java 代码,然后立即查看更改而无需重新编译
1.2使用 Java 调试器单步调试当前 AJAX 代码
1.3编译和部署优化的、跨浏览器的 JavaScript
?
什么是host模式?以下是host模式运行图,host模式即你所编写的java网站代码运行在java虚拟机上,并能调试:
hosted mode, the application is running in the Java Virtual Machine (JVM). This is typically the mode you'll use to debug your applications.
?
?
?
?
2?gwt不是开发javascript的替代品,gwt是一个优秀网络应用程序解决方案:
2.1 RPC 与服务器通信 :支持JSON与XML,并提供google rpc
2.2 跨项目重复使用 UI 组件,使用其他 JavaScript 库和本机 JavaScript 代码
2.3 国际化,跨浏览器,java开发工具提高生产力,java特性,junit单元测试
可以使用所有喜欢的 Java 开发工具(Eclipse、IntelliJ、JProfiler、JUnit)来进行 AJAX 开发
?
?
?
hotye.com 架构
?
在广州的朋友一定对银行里摆放的好易自助终端不陌生,好易是一家提供自助金融服务的企业,业务覆盖:羊城通、移动联通花费、彩票、一站式车主服务(交罚、车船税、商业险、交强险等)。
?
好易网在整个好易平台中,模拟成一个好易终端机,提供在线业务,将网站请求转发到内部系统,并连接银联与各大机构完成交易。好易网还提供会员积分营销功能。
?
定义一个gwt servlet服务与spring整合,获得前端进行本地处理------->好易综合服务系统------->各大业务方(银联、移动、彩票中心)
?
这不是卖广告么?有空看看这个这个gwt开发的网站,批判批判:www.hotye.com
?
?
?
gwt浅析
?
3.1 结构:gwt把一个组件定义为一个模块
以下是一个gwt模块的代码结构:
?
A.client包:ajax的java代码实现
?
B.定义xml,让gwt引擎编译运行你这个模块
?
C.public文件夹下存放html以及css(当然,可以改写代码,把全部模块资源文件存放到某个文件下,便于生成发布)
?
?
3.2 google web toolkit Serializable gwt序列化:
gwt提供rpc请求与后台交互,支持JSON与XML,默认GWT RPC其序列化后传递数据格式如下:
传输一个book对象: [4,1237909072078,3,200.0,2,1,["demo.javaclient.MyClient$Book/1105674023","WANGZX","java.util.Date/1659716317","TITLE"]]
?
?
?
3.3 host模式运行原理
?
host模式下,在java IDE中开发类似swing代码,即可运行具有ajax效果的应用,其原理:
?
A.站长巨人肩膀上,封装ui的js并使用org.eclipse.swt.browser.Browser显示出来。
B.内嵌Tomcat获得html资源
?
以下是host工作流程图:
1.GWT使用了 eclipse swt 来构建HOST模式的用户界面,在其中嵌入了一个浏览器(在我的机器上,是IE浏览器),GWT同时使用了SWT提供的访问os native/COM的相关机制。对于浏览器窗口,GWT在其中设置了一个external 变量,window.external, 现在这个window.external 指向的 IDispatch 对象实际上是一个 Java 对象来的,对其的方法调用将变为对java代码的调用。
?
2.url请求host模式下GWTShellServlet获得图片,css
?
3.html装载完毕后运行,由no-cache.js调用external变量
?
4.external变量的调用其实是java代码的调用,Java对象被包装成为一个 IDispatch 对象,javascript 中 对这些对象的访问都会动态的调用回 java
?
?
?
其他帮助:
1.gwt官网:http://code.google.com/intl/zh-CN/webtoolkit/
2.一个很久没有更新的工具包:http://code.google.com/p/macaufly-gwt-tool/
3.gwt如何动态调用java:http://wangzaixiang.blogspot.com/2006/08/discover-gwts-host-mode.html