ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>国产精品毛片,日韩一级视频,亚洲我射avhttp://www.aygfsteel.com/dyerac/category/13368.htmldyerac 的天天天è“?/description>zh-cnWed, 25 Jul 2007 14:04:10 GMTWed, 25 Jul 2007 14:04:10 GMT60Google Ajax Search api 以及(qi¨¢ng) web api 的设计和架构?http://www.aygfsteel.com/dyerac/archive/2007/07/25/132362.htmldyerac in java...dyerac in java...Wed, 25 Jul 2007 09:52:00 GMThttp://www.aygfsteel.com/dyerac/archive/2007/07/25/132362.htmlhttp://www.aygfsteel.com/dyerac/comments/132362.htmlhttp://www.aygfsteel.com/dyerac/archive/2007/07/25/132362.html#Feedback0http://www.aygfsteel.com/dyerac/comments/commentRss/132362.htmlhttp://www.aygfsteel.com/dyerac/services/trackbacks/132362.html题记:
其实我这½‹‡æ–‡ç« çº¯¾_ÒŽ(gu¨©)˜¯æŠ›ç –引玉之意
Google Ajax Search çš„api使用èµäh¥òq¶ä¸å›°éš¾,如果有高手对此不屑一™å„¡š„è¯?不妨回答一下我的真正用æ„?那就是一个出色的web api该如何设计呢? 它的体系架构是什ä¹? 我对此有个初步的æƒÏx³•, 前端开发自å·Þqš„jsåº? 调用˜qœç«¯çš„æœåŠ? 但是具体实施该如何呢? 传输方式该是如何? JSON? 自定义XML? ˜q˜æ˜¯SOAP? 现在很火的RESTå¯?web api的设计有什么媄å“? ˜q˜æœ›å„位高手赐教 ^_^

回到正题,看看如何用google api构徏自己的ajax 搜烦.  é˜…读全文

]]>
google web toolkit 试用ž®è®°http://www.aygfsteel.com/dyerac/archive/2006/07/29/60749.htmldyerac in java...dyerac in java...Sat, 29 Jul 2006 06:49:00 GMThttp://www.aygfsteel.com/dyerac/archive/2006/07/29/60749.htmlhttp://www.aygfsteel.com/dyerac/comments/60749.htmlhttp://www.aygfsteel.com/dyerac/archive/2006/07/29/60749.html#Feedback9http://www.aygfsteel.com/dyerac/comments/commentRss/60749.htmlhttp://www.aygfsteel.com/dyerac/services/trackbacks/60749.html ajax现在的应用也很广泛了,其中可能用的最å¤?也几乎会(x¨¬)在每本介¾lajax的书上出现的案例,大概ž®±æ˜¯å…³äºŽç”¨æˆ·æ³¨å†Œæ—¶å¯¹ç”¨æˆ·åçš„‹‚€éª?因此我也选中用gwt完成¾cÖM¼¼çš„功èƒ?考虑到demo的简易æ€?具体的功能羃减如ä¸?
在输入框中输入用户名å?ž®†é¼ æ ‡ç‚¹¼›»è¾“入框, ½E‹åºž®†è°ƒç”¨åŽå°servlet自动‹‚€éªŒè¾“入信æ?如果输入内容为空,则提½Cºé”™è¯¯ä¿¡æ?如果输入信息为dyerac,则提½Cø™¯¥ç”¨æˆ·å·²æ³¨å†?本来应该是先‹‚€éªŒæ•°æ®åº“看用户名是否已经存在,ä¸ÞZº†½Ž€ä¾¿æˆ‘省去了这一æ­?直接用dyerac替代);如果都不æ˜?则显½Cºå‡º‹Æ¢è¿Žä¿¡æ¯.
同样,你也可以直接点击"test ajax"按键手工˜q›è¡Œ‹‚€éª?‹‚€éªŒåŽŸåˆ™å’Œå‰é¢ç›¸åŒ
  é˜…读全文

]]>
Google Web Toolkit 入门http://www.aygfsteel.com/dyerac/archive/2006/07/23/59686.htmldyerac in java...dyerac in java...Sun, 23 Jul 2006 11:19:00 GMThttp://www.aygfsteel.com/dyerac/archive/2006/07/23/59686.htmlhttp://www.aygfsteel.com/dyerac/comments/59686.htmlhttp://www.aygfsteel.com/dyerac/archive/2006/07/23/59686.html#Feedback0http://www.aygfsteel.com/dyerac/comments/commentRss/59686.htmlhttp://www.aygfsteel.com/dyerac/services/trackbacks/59686.htmlGoogle Web Toolkit 入门

è‚?è? å”?J 族创始äh


2006 òq?7 æœ?03 æ—?

Ajax½Ž€ä»?br />
Ajaxæ˜?Asynchronous JavaScript and XMLåQˆä»¥å?DHTML ½{‰ï¼‰çš„羃写,由XHTML、CSS、JavaScript、XMLHttpRequest、XML½{‰æŠ€æœ¯ç»„合而成åQŒæ˜¯å½“前Web应用开发领域的热门技术,用于创徏更加动态和交互性更好的Web应用½E‹åºåQŒæå‡ç”¨æˆïL(f¨¥ng)š„‹¹è§ˆä½“验ã€?br />
Ajax的核心是JavaScript对象XmlHttpRequest。XmlHttpRequest处理所有服务器通信的对象,是一¿Uæ”¯æŒå¼‚步请求的技术。简而言之,XmlHttpRequest使æ?zh¨¨n)¨å¯ä»¥ä½¿ç”¨JavaScript向服务器提出è¯äh±‚òq¶å¤„理响应,而不é˜Õd¡žç”¨æˆ·ã€?br />
Ajaxòq¶ä¸æ˜¯æœ¬æ–‡çš„中心å…Ïx³¨ç‚¹ï¼Œå› æ­¤˜q™é‡Œä¸å†èµ˜è¿°åQŒè¯·å¤§å®¶è®‰K—®å‚考资源区的相关链接,了解更多关于Ajax技术和应用斚w¢çš„知识ã€?br />
ä¸ÞZ»€ä¹ˆé€‰æ‹©GWTåQ?br />
众所周知åQŒå³ä½¿å¯¹äºŽAjax技术非常熟æ‚(zh¨¨n)‰çš„开发者而言åQŒAjax应用的开发和调试˜q‡ç¨‹ä¹Ÿä¸æ˜¯ä¸€ä»¶å®¹æ˜“的事情åQŒæ›´å›°éš¾çš„æ˜¯åQŒåˆ°ç›®å‰ä¸ºæ­¢åQŒä¸€ç›´æ²¡æœ‰å‡ºçŽ°åˆé€‚çš„å¼€å‘å·¥å…¯‚ƒ½å¤Ÿæ”¯æŒAjax应用的开发和调试ã€?br />
与此相反的是åQŒJava语言--企业应用开发的ä¸ÀLµè¯­è¨€-的开发和调试˜q‡ç¨‹å´å› ä¸ºæœ‰å„种各样开发工å…ïL(f¨¥ng)š„æ”¯æŒè€Œç®€å•的多,而且˜q™æ ·çš„开发工å…ähˆ‘们可以免费获得,比如Eclipse、NetBeansã€?br />
如果能够应用Java语言开发AjaxåQŒAjax应用开发的最大难é¢?开发工å…ïL(f¨¥ng)š„¾~ºå¤±-ž®±å°†˜qŽåˆƒè€Œè§£ã€‚è¿™¿Uæƒ…况下åQŒæˆ‘们就可以既充分利用Java语言的开发优劉K™ä½ŽAjax应用开发的隑ֺ¦åQŒåŠ å¿«Ajax应用的开发速度åQŒäØ“(f¨´)Ajax的大规模应用创造可能,又可以充分发挥Ajax技术的优势åQŒåˆ›å»ºæ›´åŠ åŠ¨æ€å’Œäº¤äº’æ€§æ›´å¥½çš„Web应用½E‹åºåQŒæå‡ç”¨æˆïL(f¨¥ng)š„‹¹è§ˆä½“验ã€?br />
Google Web Toolkit(½Ž€¿U°GWT)的出çŽîCØ“(f¨´)我们提供了这¿Uå¯èƒ½ã€‚GWT是Google推出的Ajax应用开发包åQŒæ”¯æŒå¼€å‘者ä‹É用Java语言开发Ajax应用。GWT框架本èín是开源的åQŒä½†æ˜¯GWT中的开发工具仅仅提供开发用LicenseåQŒä¸å…è®¸åˆ†å‘ã€?br />
GWT提供了一¾l„基于Java语言的开发包åQŒè¿™ä¸ªå¼€å‘包的设计参考Java AWT包设计,¾cÕd‘½åè§„则、接口设计、事件监听等都和AWT非常¾cÖM¼¼ã€‚熟æ‚(zh¨¨n)‰Java AWT的开发者不需要花费多大的力气ž®Þpƒ½å¤Ÿå¿«é€Ÿçš„理解GWT开发工具包åQŒå°†æ›´å¤šåœ°æ—¶é—´æŠ•入到GWT应用的开发过½E‹ä¸­ã€?br />
开发出来的Java应用ž®†ç”±GWT开发包提供的编译工å…ïL(f¨¥ng)¼–译后声生成对应的、应用了Ajax技术的Web应用åQŒJava应用中出现的、和服务器之间的交互动作被自动生成的异步调用代码所代替ã€?br />
GWTç‰ÒŽ(gu¨©)€?br />
GWT除了支持ž®†åº”用Java语言开发的应用转化为Ajax应用åQŒåŒæ—¶æä¾›äº†æ›´å¤šçš„高¾U§ç‰¹æ€§ï¼Œä¸‹é¢æ˜¯è¿™äº›ç‰¹æ€§çš„½Ž€å•描˜q°ã€?br />
1. GWT¾~–译å™?br />
GWT¾~–译器是GWT的核心,负责完成ž®†Java代码¾˜»è¯‘很Ajax内容的工作。GWT¾~–译器能够翻译Java语言的大部分ç‰ÒŽ(gu¨©)€§ã€‚包括支持Java语言中的基本¾cÕdž‹ã€è¿ä¾‹å¤„理等åQŒæ”¯æŒjava.lang包和java.util包中的绝大部分类和接口,支持正则表达式和序列化ã€?br />
2. è·¨åã^台支æŒ?br />
如果你ä‹É用GWT中提供的昄¡¤º¾l„äšg(比如Button)和组装组ä»?比如VerticalPanel)åQŒGWT¾~–译生成的Ajax应用能够支持大部分的‹¹è§ˆå™¨å’Œæ“ä½œ¾pȝ»ŸåQŒæ¯”如Internet Explorer、Firefox½{‰ï¼Œä¹Ÿèƒ½å¤Ÿæ”¯æŒLinux、Windows½{‰ä¸åŒæ“ä½œç³»¾lŸã€‚这是因为GWT最大限度的ž®†è¿™äº›æŽ§ä»¶ç¿»è¯‘成‹¹è§ˆå™¨å†…¾|®çš„¾cÕdž‹ã€‚比如Button¾cȝ¼–译后生成的是标准HTMLåQ?lt;input type="button">ã€?br />
GWT廸™®®ä½¿ç”¨CSS修饰™åµé¢å…ƒç´ çš„æ˜¾½Cºæ•ˆæžœã€‚GWT的类中很ž®‘提供访问页面元素样式属性的æ–ÒŽ(gu¨©)³•åQŒæˆ‘们可以直接在CSSæ–‡äšg中通过对应的样式名¿U°æ¥è®„¡½®™åµé¢å…ƒç´ çš„默认显½Cºæ•ˆæžœã€‚比如ä‹Éç”?.gwt-Button { font-size: 150%; } 使用Button元素的默认显½Cºæ•ˆæžœã€?br />
3. 宿主模式(Hosted Mode)

宿主模式是指我们和没有è{æ¢äØ“(f¨´)Ajax应用的GWT应用交互的状态。当我们开发和调试æ—Óž¼Œæˆ‘们ž®×ƒ¸€ç›´å¤„在宿ä¸ÀL¨¡å¼ä¸‹ã€‚在˜q™ç§æƒ…况下,Java虚拟æœÞZ‹É用GWT内置的浏览器˜qè¡ŒGWT应用¾~–译后的class内容åQŒå› æ­¤èƒ½å¤Ÿæä¾?¾~–码、测试、调è¯?˜q‡ç¨‹çš„æœ€ä½³é€Ÿåº¦ã€?br />
我们可以˜qè¡Œcom.google.gwt.dev.GWTShell启动宿主模式ã€?br />
4. Web模式(Web Mode)

Web模式是指已经成功转化为Ajax应用的状态,˜q™ç§çŠ¶æ€ä¸‹åQŒæˆ‘们已¾lå¼€å§‹é€šè¿‡Web方式来访问Ajax应用了ã€?br />
在Web模式下运行时åQŒä¸å†éœ€è¦GWT工具包或者JVM的支持ã€?br />
5. 命ä×o(h¨´)行工å…?br />
GWT工具包中提供了几个非帔R€‚用的小工具来帮助我们更快的建立GWT应用开发环境:(x¨¬)projectCreator、applicationCreator、junitCreatorã€?br />
projectCreator
创徏在Eclipse中开发GWT应用所需要的™å¹ç›®åŸºæœ¬æ–‡äšg和可选的Ant buildfileæ–‡äšgã€?
applicationCreator
applicationCreator命ä×o(h¨´)用于创徏基本的HelloWorldåQåº”用和GWT应用开发环境ã€?
junitCreator
生成junti‹¹‹è¯•代码ã€?
通过上面的内容,我们已经了解了GWT工具集工作的基本原理和主要特性。有些迫不及(qi¨¢ng)待了吧,那么ž®Þp¯·éšæˆ‘一赯‚¿›å…¥GWT应用开发的˜q‡ç¨‹å§ï¼Œäº«å—应用Java语言开发Ajax应用带来的简单和便利ã€?br />
本文中所有的环境准备、实例开发和说明均针对Windows操作òq›_°åQŒå¦‚æžœä‹É用其他的操作¾pȝ»ŸåQŒè¯·æ ÒŽ(gu¨©)®å®žé™…情况˜q›è¡Œé€‚当的调整ã€?br />
环境准备

1�下蝲和安装JDK1.4.X

GWT工具包的¾~–译需要JDK支持åQŒå› æ­¤åœ¨å®‰è£…GWT工具包之前请下蝲和安装合适的JDK。GWT工具支持Java语言1.4版本或者以下版本,因此JDK版本选择JDK1.4.X是比较合适的åQŒä¸éœ€è¦é‡‡ç”¨æœ€æ–°çš„JDK5.0或者更高版本ã€?br />
误‚®¿é—®java.sun.com¾|‘站上下载安装版本,下蝲后安装到C:/jdk目录下,本书中的后箋内容中将使用%JAVA_HOME%变量来引用这个目录ã€?br />
æ‚(zh¨¨n)¨å¯ä»¥æ ¹æ®å®žé™…情况将JDK安装åˆîC“Q意目录下。但是在˜qè¡Œæœ¬æ–‡ä¸­ä¾‹å­çš„æ—¶å€™ï¼Œè¯¯‚®°ä½å°†å¯¹åº”çš?JAVA_HOME%变量替换为æ?zh¨¨n)¨çš„实际安装目录ã€?br />
2�下蝲和安装GWT

误‚®¿é—?/font> http://code.google.com/webtoolkit/ 下蝲GWT的最新版本,ž®†ä¸‹è½½çš„压羃文äšg解压¾~©åˆ°C:/GWT目录下。本书中的后¾l­å†…容中ž®†ä‹Éç”?GWT_HOME%变量来引用这个目录ã€?br />
GWT工具包支持不同的操作¾pȝ»ŸåQŒè¯·æ ÒŽ(gu¨©)®è‡ªå·±çš„æ“ä½œç³»¾lŸé€‰æ‹©åˆé€‚的安装包ã€?br />
æ‚(zh¨¨n)¨å¯ä»¥æ ¹æ®å®žé™…情况将GWT安装åˆîC“Q意目录下。但是在˜qè¡Œæœ¬æ–‡ä¸­ä¾‹å­çš„æ—¶å€™ï¼Œè¯¯‚®°ä½å°†å¯¹åº”çš?GWT_HOME%变量替换为æ?zh¨¨n)¨çš„实际安装目录ã€?br />
½W¬ä¸€ä¸ªä¾‹å­?Hello WorldåQ?br />
下面的内容中我们ž®†ä»‹¾lå¦‚何ä‹É用GWT工具集来完成½W¬ä¸€ä¸ªGWT的例å­?"Hello WorldåQ?åQŒåƈ且将使用GWT¾~–译å?qi¨¢ng)将他è{åŒ–äØ“(f¨´)Ajax应用åQŒåœ¨‹¹è§ˆå™¨ä¸­å®Œæˆ‹¹‹è¯•ã€?br />
我们要完成的例子要实现的功能包括åQ?br />
1ã€?在页面上昄¡¤ºä¸€ä¸ªæŒ‰é’?br />
2ã€?点击该按钮,默认情况下,我们ž®†åœ¨æŒ‰é’®åŽé¢ç´§è·Ÿç€æ˜„¡¤ºå­—符ä¸?Hello World!"ã€?br />
3ã€?如果点击按钮æ—Óž¼Œ"Hello World!"字符串已¾læ˜¾½Cºåœ¨‹¹è§ˆå™¨ä¸­åQŒæˆ‘们要ž®†ä»–隐藏èµäh¥ã€‚我们现在开始ä‹É用GWT工具集完æˆ?Hello WorldåQ?例子的开发,下面的步骤是完成"Hello WorldåQ?例子开发环境配¾|®ã€åº”用开发、编译的基本步骤åQŒåŒæ ·é€‚用于其他GWT应用的开发,只是æ ÒŽ(gu¨©)®å®žé™…情况可能有增减ã€?br />
1�创徏GWT应用开发环�br />
从上面的GWTç‰ÒŽ(gu¨©)€§éƒ¨åˆ†æˆ‘们知道,GWT工具包中提供的applicationCreator命ä×o(h¨´)行工具可以帮助我们创建GWT应用开发所需要的环境åQŒå› æ­¤æˆ‘们可以直接ä‹É用applicationCreator帮助我们完成˜q™é¡¹å·¥ä½œã€?br />
打开命ä×o(h¨´)è¡Œå·¥å…øP¼Œ˜q›å…¥C:/根目录下åQŒæ‰§è¡?mkdi"命ä×o(h¨´)创徏新的文äšg目录HelloWorldã€?br />

C:\> mkdir HelloWorld





执行下面的命令将%JAVA_HOME%\bin目录�GWT_HOME%目录加入到PATH路径中�br />

C:\>set path=%JAVA_HOME%\bin;%GWT_HOME%





请将命ä×o(h¨´)行中çš?JAVA_HOME%替换为实际环境中JDK的安装目录,ž®?GWT_HOME%替换为GWT工具包的安装目录ã€?br />
˜q›å…¥æ–°åˆ›å»ºçš„HelloWorld目录åQŒç„¶åŽè¿è¡ŒapplicationCreator命ä×o(h¨´)创徏GWT应用开发环境ã€?br />
applicationCreator.cmd命ä×o(h¨´)支持的语法如下ã€?br />
ApplicationCreator [-eclipse projectName] [-out dir] [-overwrite] [-ignore] className 其中最重要的一个参数是classnameåQŒä¹Ÿž®±æ˜¯æˆ‘们创徏的GWT应用中的主Java¾c»ï¼Œæˆ‘们˜q™é‡Œé€‰æ‹©ä½¿ç”¨org.vivianj.gwt.client.HelloWorldã€?br />

C:\HelloWorld>applicationCreator.cmd org.vivianj.gwt.client.HelloWorld





æ ÒŽ(gu¨©)®GWT工具包的默认规则åQŒGWT应用中的主Java¾cÀLŠ¥åçš„æœ€åŽä¸€ŒDµå¿…™åÀL˜¯client。也ž®±æ˜¯è¯ß_(d¨¢)¼Œåªæœ‰xxx.client.Xxxx˜q™æ ·å‘½åçš„Java¾cÀL‰èƒ½è¢«è¯†åˆ«ä¸ºæ­£¼‹®çš„GWT应用ä¸È±»ã€?br />
ApplicationCreator工具˜qè¡Œçš„æ—¶å€™ï¼Œå±å¹•上会(x¨¬)打印如下内容ã€?br />

Created directory C:\HelloWorld\src
Created directory C:\HelloWorld\src\org\vivianj\gwt
Created directory C:\HelloWorld\src\org\vivianj\gwt\client
Created directory C:\HelloWorld\src\org\vivianj\gwt\public
Created file C:\HelloWorld\src\org\vivianj\gwt\HelloWorld.gwt.xml
Created file C:\HelloWorld\src\org\vivianj\gwt\public\HelloWorld.html
Created file C:\HelloWorld\src\org\vivianj\gwt\client\HelloWorld.java
Created file C:\HelloWorld\HelloWorld-shell.cmd
Created file C:\HelloWorld\HelloWorld-compile.cmd





2ã€?å¼€å?Hello WorldåQ?例子

使用ApplicationCreator工具的时候,ApplicationCreator工具其实已经帮我们生成了½W¦åˆHello World!例子要求的全部内宏V€‚䨓(f¨´)了不打断½W¬ä¸€ä¸ªä¾‹å­çš„æ¼”示˜q‡ç¨‹åQŒæˆ‘们先½Ž€å•的了解一下ApplicationCreator工具的生成内宏V€‚我们将在将在测试过½E‹åŽé¢åšå‡ºæ›´åŠ è¯¦¾l†çš„分析ã€?br />
å›?中显½CÞZº†ApplicationCreator工具执行后生成的目录¾l“æž„ã€?br />

� GWT应用开发环�br />


å›?中的src\org\vivianj\gwt\client目录中的HelloWorld.java是GWT应用的主¾c»ï¼›src\org\vivianj\gwt\public目录中的HelloWorld.htmlæ–‡äšg是例子的默认™åµé¢åQ›src\org\vivianj\gwt目录下的HelloWorld.gwt.xml是GWT应用的配¾|®æ–‡ä»Óž¼Œæä¾›GWT应用中页面和ä¸È±»çš„配¾|®ä¿¡æ¯ï¼›æ ¹ç›®å½•下的HelloWorld-compile.cmdæ–‡äšg用于提供ž®†è¯¥GWT应用¾~–译成Ajax的命令;根目录下的HelloWorld-shell.cmdæ–‡äšg用于启动宿主模式(Hosted Mode)åQŒæ–¹ä¾¿æµ‹è¯•GWT应用ã€?br />
3ã€?在宿ä¸ÀL¨¡å¼ä¸‹å¯åЍ"Hello WorldåQ?例子

我们可以直接在命令行中执行HelloWorld-shell.cmd来启动宿ä¸ÀL¨¡å¼?Hosted Mode)åQŒè¿è¡Œæ–°åˆ›å¾çš?Hello WorldåQ?例子ã€?br />

C:\HelloWorld>HelloWorld-shell.cmd





˜q™ä¸ªå‘½ä×o(h¨´)ž®†å¯åŠ¨ä¸¤ä¸ªå¯è§†åŒ–ç•Œé¢åQšGoogle Web Toolkit Development ShellåQˆè§å›?åQ‰å’ŒGWT内置的GWT应用‹¹è§ˆå™¨ï¼ˆè§å›¾3åQ‰ï¼ŒGWT应用‹¹è§ˆå™¨ä¸­ž®†æ˜¾½C?Hello WorldåQ?例子的初始界面,如果我们点击界面上的"Click Me"按钮åQŒæŒ‰é’®åŽé¢å°†ä¼?x¨¬)显½C?Hello World!"字符ä¸ÔŒ¼ˆè§å›¾4åQ‰ï¼Œå¦‚果再次单击™åµé¢ä¸Šçš„"Click Me"按钮åQŒæŒ‰é’®åŽé¢çš„"Hello WorldåQ?字符串会(x¨¬)消失ã€?br />

å›? Google Web Toolkit Development Shell˜qè¡Œç•Œé¢



å›? "Hello WorldåQ?例子初始˜qè¡Œç•Œé¢



å›? "Hello WorldåQ?例子-单击"Clieck Me"按钮后的界面



4ã€?¾~–译"Hello WorldåQ?例子

要将GWT应用¾~–译成Ajax应用åQŒæˆ‘们可以执行HelloWorld-compile.cmdã€?br />

C:\HelloWorld>HelloWorld-compile.cmd





命ä×o(h¨´)˜qè¡Œæ—Óž¼Œç•Œé¢ä¸Šå°†ä¼?x¨¬)显½CÞZ¸‹é¢çš„内容ã€?br />

Output will be written into C:\HelloWorld\www\org.vivianj.gwt.HelloWorld
Copying all files found on public path
Compilation succeeded





其中的第一行显½Cºç”Ÿæˆçš„Ajax应用位于C:\HelloWorld\www\org.vivianj.gwt.HelloWorld目录下ã€?br />

å›? "Hello WorldåQ?例子¾~–译后的目录¾l“æž„



从上面的图中我们可以看到åQŒæ–°ç”Ÿæˆçš„www目录下有一个名为org.vivianj.gwt.HelloWorld的目录,它的命名规则是GWTä¸È±»å…¨å(org.vivianj.gwt.client.HelloWorld)åŽÀLމ其䏭çš?client."ã€?br />
org.vivianj.gwt.HelloWorld目录下的HelloWorld.htmlæ–‡äšgž®±æ˜¯"Hello WorldåQ?例子对应的页面,ä»?cache.html后缀¾l“尾的文件就æ˜?Hello WorldåQ?例子中对应的Ajax代码部分åQŒè€Œgwt.jsæ–‡äšg则是GWT提供的、Ajax代码中需要用到的JavaScript公共函数。其他还有些辅助文äšgã€?br />
5ã€?Web模式下测è¯?Hello WorldåQ?例子

˜qè¡ŒHelloWorld-compile.cmd后,GWT应用ž®±å·²¾lè¢«¾~–译成Ajax应用了,不再依赖于JDKå’ŒGWT环境åQŒè€Œä»…仅依赖于‹¹è§ˆå™¨ã€?br />
我们打开IE‹¹è§ˆå™¨ï¼Œæ‰“å¼€C:\HelloWorld\www\org.vivianj.gwt.HelloWorld\HelloWorld.htmlæ–‡äšgåQŒå°±å¯ä»¥çœ‹åˆ°"Hello WorldåQ?例子在Web模式下的˜qè¡Œæ•ˆæžœåQˆè§å›?åQ‰ï¼Œå•击™åµé¢ä¸Šçš„"Click Me"按钮åQŒæŒ‰é’®åŽé¢ä¼š(x¨¬)出现"Hello WorldåQ?字符ä¸ÔŒ¼ˆè§å›¾7åQ‰ï¼Œå¦‚果再次单击™åµé¢ä¸Šçš„"Click Me"按钮åQŒæŒ‰é’®åŽé¢çš„"Hello WorldåQ?字符串会(x¨¬)消失ã€?br />

å›? Web模式下运è¡?HelloWorldåQ?例子的默认效æž?br />


å›? Web模式下运è¡?HelloWorldåQ?例子-单击"Click Me"按钮后的效果


实例详细分析

上面的步骤中åQŒæˆ‘们已¾lå®Œæˆç¬¬ä¸€ä¸ªGWT应用的编译和‹¹‹è¯•åQŒä¸‹é¢æˆ‘们来详细的介¾lä¸€ä¸‹GWT应用开发过½E‹ä¸­æ¶‰åŠ(qi¨¢ng)的几个文ä»Óž¼š(x¨¬)昄¡¤º™åµé¢HelloWorld.html、主¾c»HelloWorld和配¾|®æ–‡ä»¶HelloWorld.gwt.xmlã€?br />
1. 昄¡¤º™åµé¢HelloWorld.html

GWT应用中的HTML内容必须存放在public目录下,public目录的全路径æ˜?org\vivianj\gwt\ublic"åQŒæ˜¯ž®†ä¸»¾c»HelloWorld的包å?org.vivianj.gwt.client"中的client替换ä¸?public"后åŞ成的目录¾l“æž„ã€?br />
我们ž®†ä¸»è¦ä»‹¾lHelloWorld.html中和GWT相关的内容,HelloWorld.htmlæ–‡äšg的全部内容见清单1ã€?br />

24.   <meta name='gwt:module' content='org.vivianj.gwt.HelloWorld'>




在HelloWorld.htmlæ–‡äšg的第24行,我们使用meta标签指定了本™åµé¢å’ŒGWT模块" org.vivianj.gwt.HelloWorld"之间的联¾p»ï¼Œmeta标签的name属性是不变的,而content属性则是GWTä¸È±»å…¨å(org.vivianj.gwt.client.HelloWorld)åŽÀLމ其䏭çš?client."后的¾l“æžœã€?br />

40.       <script language="javascript" src="gwt.js"></script>




在HelloWorld.htmlæ–‡äšg的第40行,我们使用script标记引入GWT工具提供的默认函数库。根据HTML语言的规定,我们可以选择åœ?lt;head></head>之间加入˜q™è¡Œä»£ç åQŒä¹Ÿå¯ä»¥é€‰æ‹©åœ?lt;body></body>之间加入˜q™æ®µä»£ç ã€‚GWT廸™®®åœ?lt;head></head>之间加入˜q™è¡Œä»£ç åQŒä»¥ä¾¿èŽ·å¾—ç¨å¾®å¿«ä¸€äº›çš„èµ·åŠ¨é€Ÿåº¦ã€?br />

56.    <td id="slot1"></td><td id="slot2"></td>




在HelloWorld.htmlæ–‡äšg的第56行,我们使用td标签定义了两个相é‚?c¨¨)š„表格单元æ û|¼Œä»–们分别命名ä¸?slot1"å’?slot2"åQŒæ ¹æ?HelloWorld!"ä¾‹å­çš„è¦æ±‚ï¼ŒåäØ“(f¨´)"slot1"的单元格中应该显½CºæŒ‰é’®ï¼Œè€Œåä¸?slot2"的单元格中则æ ÒŽ(gu¨©)®æƒ…况军_®šæ˜„¡¤º"HelloWorld!"字符串或者不昄¡¤ºä»ÖM½•内容ã€?br />
我们ž®†åœ¨ä¸È±»HelloWorld.java的源代码中ä‹É用RootPanel.get("slot1")来获得对该单元格的引用,请参考下面的"ä¸È±»HelloWorld"部分的说明ã€?br />

43.    <iframe id="__gwt_historyFrame" style="width:0;height:0;border:0"></iframe>




在HelloWorld.html的第43行,我们使用iframe标签来设¾|®å½“前页支持历史功能åQŒiframe的属性必™åÕd’Œä¸Šé¢çš„内容保持一è‡ß_(d¨¢)¼Œå¦åˆ™ž®†ä¸ä¼?x¨¬)è“våˆîC“Q何效果ã€?br />

清单1 src\org\vivianj\gwt\public\public\HelloWorld.html
1.    <html>
2.        <head>
3.        
4.            <!--                             -->
5.            <!-- Any title is fine                 -->
6.            <!--                             -->
7.            <title>Wrapper HTML for HelloWorld</title>
8.    
9.            <!--                             -->
10.            <!-- Use normal html, such as style         -->
11.            <!--                             -->
12.            <style>
13.                body,td,a,div,.p{font-family:arial,sans-serif}
14.                div,td{color:#000000}
15.                a:link,.w,.w a:link{color:#0000cc}
16.                a:visited{color:#551a8b}
17.                a:active{color:#ff0000}
18.            </style>
19.    
20.            <!--                             -->
21.            <!-- The module reference below is the link   -->
22.            <!-- between html and your Web Toolkit module -->        
23.            <!--                             -->
24.            <meta name='gwt:module' content='org.vivianj.gwt.HelloWorld'>
25.            
26.        </head>
27.    
28.        <!--                             -->
29.        <!-- The body can have arbitrary html, or     -->
30.        <!-- you can leave the body empty if you want -->
31.        <!-- to create a completely dynamic ui       -->
32.        <!--                             -->
33.        <body>
34.    
35.            <!--                             -->
36.            <!-- This script is required bootstrap stuff.   -->
37.            <!-- You can put it in the HEAD, but startup   -->
38.            <!-- is slightly faster if you include it here. -->
39.            <!--                             -->
40.            <script language="javascript" src="gwt.js"></script>
41.    
42.            <!-- OPTIONAL: include this if you want history support -->
43.            <iframe id="__gwt_historyFrame"
style="width:0;height:0;border:0"></iframe>
44.    
45.            <h1>HelloWorld</h1>
46.    
47.            <p>
48.            This is an example of a host page for the HelloWorld application.
49.            You can attach a Web Toolkit module to any HTML page you like,
50.            making it easy to add bits of AJAX functionality to existing
pages
51.            without starting from scratch.
52.            </p>
53.    
54.            <table align=center>
55.                <tr>
56.                    <td id="slot1"></td><td
id="slot2"></td>
57.                </tr>
58.            </table>
59.        </body>
60.    </html>




2. ä¸È±»HelloWorld

ä¸È±»HelloWorldå¿…é¡»¾l§æ‰¿è‡ªcom.google.gwt.core.client.EntryPoint¾c»ï¼Œòq¶ä¸”覆盖其public void onModuleLoad()æ–ÒŽ(gu¨©)³•ã€?br />
在onModuleLoad()æ–ÒŽ(gu¨©)³•中,我们使用GWT中提供的默认昄¡¤º¾l„äšg(比如Button)和组装组ä»?比如VerticalPanel)来设计需要显½Cºçš„界面åQŒæ‰€æœ‰è¿™äº›ç»„仉™ƒ½ä½äºŽcom.google.gwt.user.client.ui包下面。这些组件的命名规则和Java AWT的命名规则基本类ä¼û|¼Œä½¿ç”¨æ–¹å¼ä¹Ÿå’ŒAWT的基本一è‡ß_(d¨¢)¼Œä¸è¿‡GWT中提供了不少的新¾l„徏可供选择åQŒæ¯”如可以直接用VerticalPanel来实现垂直方向的布局½Ž¡ç†ã€?br />
HelloWorld.java中的19å’?0行,ž®±å£°æ˜Žäº†Buttonå’ŒLabel两个昄¡¤º¾l„äšgã€?br />

19.   final Button button = new Button("Click me");
20.   final Label label = new Label();




onModuleLoad()æ–ÒŽ(gu¨©)³•中,我们需要把生成的显½Cºç»„件或者组装组建加入到昄¡¤º™åµé¢çš„对应显½CºåŒºåŸŸã€‚首先,我们需要在™åµé¢ä¸Šä‹É用idå±žæ€§äØ“(f¨´)昄¡¤ºåŒºåŸŸæŒ‡å®šå”¯ä¸€çš„名¿U?参见清单1中的56è¡?。com.google.gwt.user.client.ui.RootPanel的静态方法get可以æ ÒŽ(gu¨©)®ä¼ å…¥çš„å­—½W¦ä¸²å‚æ•°åQˆå‚数值就是显½CºåŒºåŸŸçš„id属性)获取™åµé¢ä¸Šå¯¹åº”的昄¡¤ºåŒºåŸŸã€?br />
HelloWorld.javaçš?6ã€?7行,ž®×ƒ‹É用了RootPanelçš„getæ–ÒŽ(gu¨©)³•分别获得™åµé¢ä¸Šidä¸?slot1"ã€?slot2"的显½CºåŒºåŸŸï¼Œç„¶åŽè°ƒç”¨addæ–ÒŽ(gu¨©)³•ž®†ç”Ÿæˆçš„Buttonå’ŒLabel对象加入到显½CºåŒºåŸŸä¸­ã€?br />

36.   RootPanel.get("slot1").add(button);
37.   RootPanel.get("slot2").add(label);




Ajaxæœ€é‡è¦çš„åŠŸèƒ½å°±æ˜¯äØ“(f¨´)用户提供更好的交互体验,GWT中ä‹É用和AWT中相同的事äšg监听机制完成客户端事件监听,GWT中支持的Listener接口包括ChangeListener、ClickListener½{‰ã€‚我们可以通过各种各样的Listener接口获得用户界面上所发生的动作,通过处理˜q™äº›åŠ¨ä½œæ¥å®Œæˆå¯¹åº”ä¸šåŠ¡é€»è¾‘ã€?br />
HelloWorld.java中的½W?2行~29行的内容ž®±å®žçŽîCº†ä¸€ä¸ªClickListender接口åQŒåƈ且提供了对应的onClickæ–ÒŽ(gu¨©)³•实现åQŒç”¨äºŽå¤„理按钮点å‡ÕdŽçš„业务逻辑åQˆåˆ¤æ–­æ˜¯å¦éœ€è¦æ˜¾½C?Hello World!"字符ä¸ÔŒ¼‰åQŒç„¶åŽè°ƒç”¨Button对象的addClickListeneræ–ÒŽ(gu¨©)³•增加监听器ã€?br />

22.   button.addClickListener(new ClickListener() {
23.       public void onClick(Widget sender) {
24.         if (label.getText().equals(""))
25.         label.setText("Hello World!");
26.         else
27.         label.setText("");
28.       }
29.   });




HelloWorld¾cȝš„全部源代码内容见清单2ã€?br />

清单2 src\org\vivianj\gwt\client\HelloWorld.java
1.    package org.vivianj.gwt.client;
2.    
3.    import com.google.gwt.core.client.EntryPoint;
4.    import com.google.gwt.user.client.ui.Button;
5.    import com.google.gwt.user.client.ui.ClickListener;
6.    import com.google.gwt.user.client.ui.Label;
7.    import com.google.gwt.user.client.ui.RootPanel;
8.    import com.google.gwt.user.client.ui.Widget;
9.    
10.    /**
11.     * Entry point classes define <code>onModuleLoad()</code>.
12.     */
13.    public class HelloWorld implements EntryPoint {
14.    
15.     /**
16.       * This is the entry point method.
17.       */
18.     public void onModuleLoad() {
19.       final Button button = new Button("Click me");
20.       final Label label = new Label();
21.    
22.       button.addClickListener(new ClickListener() {
23.         public void onClick(Widget sender) {
24.         if (label.getText().equals(""))
25.           label.setText("Hello World!");
26.         else
27.           label.setText("");
28.         }
29.       });
30.    
31.       // Assume that the host HTML has elements defined whose
32.       // IDs are "slot1", "slot2". In a real app, you probably would not want
33.       // to hard-code IDs. Instead, you could, for example, search for all
34.       // elements with a particular CSS class and replace them with widgets.
35.       //
36.       RootPanel.get("slot1").add(button);
37.       RootPanel.get("slot2").add(label);
38.     }
39.    }




3. 配置文äšgHelloWorld.gwt.xml

配置文äšg中包括两个元素。Inherits元素地设¾|®GWT应用的ç‘ô承信息,而entry-point元素的class属性则用于讄¡½®è®„¡½®GWT应用的主¾c…R€?br />

清单3 src\org\vivianj\gwt\HelloWorld.gwt.xml
1.    <module>
2.    
3.        <!-- Inherit the core Web Toolkit stuff.             -->
4.        <inherits name='com.google.gwt.user.User'/>
5.    
6.        <!-- Specify the app entry point class.             -->
7.        <entry-point class='org.vivianj.gwt.client.HelloWorld'/>
8.    
9.    </module>




¾l“束è¯?br />
Ajax是当前热门的Web应用开发技术,Java是企业应用开发中的主‹¹æŠ€æœ¯ï¼ŒGWT框架ž®†è¿™ä¸¤ç§æŠ€æœ¯åˆäºŒäØ“(f¨´)一åQŒæ˜¯æˆ‘们能够应用Java语言来开发AjaxåQŒåœ¨ä¿ç•™Ajax技术的优点基础上,解决了Ajax应用开发、调试困隄¡š„¾~ºç‚¹ã€?br />
本文中介¾läº†GWT的基本知识、主要特性,提供äº?HelloWorldåQ?例子说明使用Javaå’ŒGWT框架开发Ajax应用的开发、编译、测试过½E‹ï¼Œòq¶ä¸”通过å¯?HelloWorldåQ?例子中涉å?qi¨¢ng)文件的分析åQŒè®²è§£äº†ä½¿ç”¨GWT框架开发Ajax应用的技术细节和¾U¦æŸæ¡äšgã€?br />
GWT 在线资源åQ?
http://code.google.com/webtoolkit/gettingstarted.html

GWT 下蝲地址åQ?/font> http://code.google.com/webtoolkit/

GWT 在线FAQåQ?/font> http://code.google.com/webtoolkit/faq.html

GWT 开发者论坛:(x¨¬)
http://groups.google.com/group/Google-Web-Toolkit

使用 Google Web Toolkit 开�Ajax



]]>
Google Web Toolkit(¾˜»è¯‘,è½? http://www.aygfsteel.com/dyerac/archive/2006/07/23/59684.htmldyerac in java...dyerac in java...Sun, 23 Jul 2006 11:08:00 GMThttp://www.aygfsteel.com/dyerac/archive/2006/07/23/59684.htmlhttp://www.aygfsteel.com/dyerac/comments/59684.htmlhttp://www.aygfsteel.com/dyerac/archive/2006/07/23/59684.html#Feedback0http://www.aygfsteel.com/dyerac/comments/commentRss/59684.htmlhttp://www.aygfsteel.com/dyerac/services/trackbacks/59684.html阅读全文

]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º °ÍÂí| ÁÙ¸ßÏØ| Ã÷ÏªÏØ| Ù¤Ê¦ÏØ| °×ºÓÏØ| Áú¿ÚÊÐ| ÎÚËÕÊÐ| ãäÁêÏØ| ̨ÖÐÏØ| ºø¹ØÏØ| ¸ÊÄÏÏØ| ÕØ¶«ÊÐ| »³Ô¶ÏØ| ÁÖµéÏØ| Çì°²ÏØ| ÈýÃ÷ÊÐ| Ë«³ÇÊÐ| °¢¿ËËÕÊÐ| ÐÇ×ù| ¹ãºÓÏØ| ºé½­ÊÐ| Ç¦É½ÏØ| ºÓ½òÊÐ| ɳÌïÇø| ÁÙå¢ÏØ| °ÍÑåÄ×¶ûÊÐ| ß®ÑôÏØ| Ä«ÓñÏØ| ÎåÁ«ÏØ| Îå·å| Î人ÊÐ| ³¤°×| Ëì´¨ÏØ| ¸»ÄþÏØ| °ÍÁÖÓÒÆì| ÐÂÓàÊÐ| µç°×ÏØ| ÑŽ­ÏØ| ¶«Ïç| ͨ»¯ÏØ| ¾¸°²ÏØ|