GWT 开发者手册v2Word文档格式.docx
- 文档编号:696271
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:72
- 大小:200.96KB
GWT 开发者手册v2Word文档格式.docx
《GWT 开发者手册v2Word文档格式.docx》由会员分享,可在线阅读,更多相关《GWT 开发者手册v2Word文档格式.docx(72页珍藏版)》请在冰点文库上搜索。
●反射
为了效率最大化,GWT把你的JAVA原代码编译成单块集成脚本,并且不支持类的并发动态装载(我也不大懂是怎么回事,总之不要在GWT中使用JAVA的反射机制),另外,其他最佳化选项也不包括对反射的一般支持。
但是可以使用GWT.getTypeName(Object)来查询一个对象的类名。
●无用对象清理
JAVASCRIPT不支持垃圾回收阶段的对象清理,所以GWT不能支持WEB模式下的JAVA对象清理。
●严格浮点
JAVA语言规范精确地定义了浮点支持,包括单精度和双精度,还有strictfp关键字。
GWT不支持strictfp关键字,并且不能保证在转换后的代码中的浮点的详细精度,所以如果你需要保证精度的计算,则要避免在客户端代码中进行。
2.运行时库支持
GWT只支持Java2StandardandEnterpriseEdition类库的一个小的子集,由于这些库非常大,并且有很多在WEB浏览器中不可用的功能。
详细请参考:
java.langandjava.util的API,那里列出了被支持的类和两个类库(GWT和标准JAVA类库)行为上的不同。
一些特定领域GWT与JAVA标准运行时不同。
●正则表达式
JAVA正则表达式的语法类似但也不同于JAVASCRIPT的正则表达式语法。
例如,replaceAll和split方法。
你可能只想使用和JAVASCRIPT同效的JAVA正则表达式。
●序列化
JAVA的序列化所依赖于一些机制是编译后的JAVASCRIPT中不可用,例如动态类装载和反射。
所以GWT不支持标准JAVA序列化,但是GWT有一个RPC机制,它提供了调用远程方法时与服务器交互的自动对象序列化。
如果你确保在一开始你的客户端代码中只使用了可以转换的类,你将会避免很多麻烦。
为了能够尽早确定问题所在,你的代码将会在主机模式中运行时被检查是否符合JRE仿真库。
所以,不支持的类库将会在第一次运行应用程序时被检测到。
应该尽早运行并经常运行你的程序。
跨浏览器支持
GWT架构可以在单一代码的基础上支持多浏览器。
GWT使你不用过于担心跨浏览器的不相容性。
如果你关注嵌入式的界面元素和组件,你的应用程序在最近版本的InternetExplorer,Firefox,和Safari浏览器中的表现是一致的(大多数情况下,Opera浏览器也是这样)。
DHTML用户界面是非常复杂的,虽然这样,也要确定在每个浏览器中彻底测试你的应用程序。
只要可能,GWT符合浏览器的本地用户界面元素。
例如:
GWT的Button元素是一个真正的HTML<
button>
,而不是一个合成的类似按钮的界面元素,比如,一个<
div>
。
这说明GWT按钮在不同的浏览器和不同的客户端操作系统中都能恰当地显示。
我们喜欢本地浏览器控制是因为它们是快速、可用并且被用户熟悉。
当开发一个风格化的WEB应用程序,CSS是非常理想的。
开发者应该在样式表中定义样式,这些样式使用样式名(stylenames)链接到应用程序代码。
在主机模式中调试
GWT有一个嵌入式的DHTML浏览器,你可以在转换成JAVASCRIPT应用之前,在任何JAVA开发环境中运行和调试你的应用程序。
你将会花费你的大部分的开发时间在主机模式上,这是说你和你的GWT应用程序互动时,不需要先把它转换成JAVASCRIPT。
任何时候你在JAVA集成开发环境中编辑、运行和调试应用程序,你都是在主机模式下工作。
当运行在主机模式,JAVA虚拟机实际上是在执行编译后的JAVA字节码,使用GWT输出到一个嵌入的浏览器窗口。
在这种传统的“编码-测试-调试”的开发周期中,主机模式是快速开发你的应用的最有效的方式。
启动一个主机模式会话,你的启动类应该是com.google.gwt.dev.GWTShell,这个类可以在gwt-dev-windows.jar(或gwt-dev-linux.jar)中找到。
小提示:
在主机模式下,GWT开发命令工具(developmentshell)会使用虚拟机的类路径查找模块(和客户端原代码)。
在运行GWT开发命令工具(developmentshell)时要确保把原代码路径加入到了你的类路径中。
在WEB模式中部署
为便于部署,首先把你的应用编译成JAVASCRIPT。
当你从开发阶段转移到端到端测试和生产,你会开始更多地和你的应用程序在WEB模式下交互。
WEB模式是指从通常的浏览器来访问你的应用程序-在浏览器中它作为纯净的JavaScript运行-正如它最终要被部署的样子。
为你的模块创建一个WEB模式版本,你需要使用主机模式浏览器中的“Compile/Browse”按钮或命令行编译器com.google.gwt.dev.GWTCompiler.
WEB模式论证了是什么使GWT不同凡响:
当你的应用在WEB模式中启动时,它完全作为JAVASCRIPT运行,并且不需要任何浏览器插件或JVM。
HTML主页
一个HTML文档形式的主页,它包含GWT模块。
任何符合适当规范的HTML页面可以包含GWT创建的代码,作为一个主页被引用。
一个经典的HTML主页如下所示:
<
html>
<
head>
!
--Thefully-qualifiedmodulename-->
metaname='
gwt:
module'
content='
com.example.cal.Calendar'
>
--Propertiescanbespecifiedtoinfluencedeferredbinding-->
property'
locale=en_UK'
--Stylesheetsareoptional,butuseful-->
linkrel="
stylesheet"
href="
Calendar.css"
--Titlesareoptional,butuseful-->
title>
CalendarApp<
/title>
/head>
body>
--Includethebootstrapscriptjustinsidethebodyorinthehead-->
--(startupisslightlyfasterifyouplaceitjustafterthebodytag-->
scriptlanguage="
javascript"
src="
gwt.js"
/script>
--IncludeahistoryiframetoenablefullGWThistorysupport-->
--(theidmustbeexactlyasshown)-->
iframeid="
__gwt_historyFrame"
style="
width:
0;
height:
border:
0"
/iframe>
/body>
/html>
这个结构是可以向现存的WEB应用程序添加功能而把改动最小化。
客户端代码
“客户端”意思是指将要被转换并在WEB浏览器中以JAVASCRIPT形式运行的原代码。
你的应用程序将要被通过网络送向客户,在那里它作为JAVASCRIPT运行在WEB浏览器中。
用户浏览器中所发生的一切,可以看作是客户端处理。
当你写在WEB浏览器中运行的客户端代码时,记住它们最终要变成JAVASCRIPT。
所以,要使用那些可以被转换的类库和JAVA语言结构是非常重要的。
服务端代码
“服务端”意思是指不会被转换,并且只作为字节码运行在服务器端的原代码。
发生在服务器端的一切可以被看作是服务器端处理。
当你的应用程序需要与服务器互动(例如,上载或下载数据),这会产生一个穿过网络的客户端请求(从浏览器)使用remoteprocedurecall(RPC)。
在进行处理时RPC,服务器要执行服务端代码。
GWT不会去管你的服务器运行JAVA字节码的能力。
服务端代码不需要被转换,所以你可以使用你认为有用的任何JAVA类库。
项目结构
GWT项目由一个推荐包布局构建而成。
GWT项目以JAVA包的方式进行布局,这样,大多数的配置可以从类路径(classpath)和你的模块定义(moduledefinitions)中推导出。
如果你要从代码片断开始一个GWT项目,你应该使用标准GWT包结构,这种结构可以很容易地区分客户端代码和服务端代码。
假定你的新项目叫“Calendar”。
则标准包结构会如下所示:
包
目的
com/example/cal/
项目根包,包含模块XML文件
com/example/cal/client/
客户端代码文件和子包
com/example/cal/server/
服务端代码和子包
com/example/cal/public/
静态资源
例子文件组织如下:
文件
目的
com/example/cal/Calendar.gwt.xml
一个通用基本模块,用于你的项目,它继承了com.google.gwt.user.User模块
com/example/cal/CalendarApp.gwt.xml
继承了com.example.cal.Calendar模块(见上)并且加入一个入口类
com/example/cal/CalendarTest.gwt.xml
一个你的项目定义的模块
com/example/cal/client/CalendarApp.java
客户端JAVA原代码,用于入口类。
com/example/cal/client/spelling/SpellingService.java
一个定义在子包中的RPC服务接口
com/example/cal/server/spelling/SpellingServiceImpl.java
服务端JAVA原代码,它实现了后台服务业务逻辑。
com/example/cal/public/Calendar.html
一个HTML页面,用于装载应用程序。
com/example/cal/public/Calendar.css
一个样式表,用于风格化应用程序。
com/example/cal/public/images/logo.gif
一个题头标志
模块
模块是一个XML文件,它包含与应用程序或类库相关的设置。
一个GWT配置的单独单元,是XML格式的文件。
包括所有的你的GWT项目需要的配置信息,即下列信息:
●继承模块
●一个入口点应用类名;
这些是可选的,虽然任何关系到HTML的模块都必须至少有一个指定的入口类。
●原代码路径
●公共路径
●延期绑定规则,包括属性提供者和类生成器。
模块(Modules)可以出现在你的类路径的任何包里,但是强力推荐它应该出现在标准项目布局的根包里。
入口类
一个模块入口是任何实现EntryPoint接口的类,并且可以被无参数构造实例。
当装载一个模块时,每个入口类被实例化,并且它们的EntryPoint.onModuleLoad()方法被调用。
原代码路径
模块能够指定哪个子包包含可转换原代码,方法是把命名包和它的子包被加入原代码路径。
只有在建立在原代码路径上的文件才可能被转换成JAVASCRIPT,客户端代码和服务端代码也可以无冲突地混合在同一个类路径中。
当模块继承其他模块,它们的原代码路径被绑定,这样每个模块将会能够访问到它需要的可转换原代码。
公共路径
模块能够指定哪个子包是公共的,方法是命名包和它的子包被加入到公共路径。
当你把你的应用程序编译成JAVASCRIPT时,在公共路径中能找到的所有的文件都被复制到模块的输出目录。
净效果是用户可见的URLs不需要包含一个完整的包名。
当模块继承其他模块时,它们的公共路径会合并,这样每个模块都可以访问它所需要的静态资源。
特殊规范
●模块XML格式
在XML文件中定义模块,并且置入你的项目包层级。
模块定义在XML文件中,它的文件名扩展是.gwt.xml。
模块XML文件应当位于你的项目的根包
如果你正在使用标准项目结构,你的模块XML可以像以下这样简单:
module>
inheritsname="
com.google.gwt.user.User"
/>
entry-pointclass="
com.example.cal.client.CalendarApp"
/module>
●装载模块
在JAVA类路径中发现的模块XML文件,被它们的逻辑模块引用,从主页用名字引入,也被其他模块引入。
模块总是关联到它们的逻辑名。
模块的逻辑名遵守这种形式pkg1.pkg2.ModuleName且不包括实际文件系统路径和文件扩展名。
模块XML文件的逻辑名位于:
~/src/com/example/cal/Calendar.gwt.xml
是
com.example.cal.Calendar
●可用元素
logical-module-name"
从指定的模块继承所有的设置,就像被继承的模块的XML被逐字复制。
一些模块可被用这种方式继承。
classname"
指定的入口点类。
一些入口类能够被从被继承模块加入、包含。
sourcepath="
path"
通过绑定包向原代码路径加入包,在包中,模块XML可以在特定的子包路径中找到。
任何出现在这个子包下的JAVA原代码文件,或任何下层子包内,假定都是需要被转换的。
如果在模块XML文件中没有定义<
source>
这个元素,客户(client)子包会被隐含地原代码路径,就像模块XML文件中有定义<
client"
一样。
这个默认设置帮助保持模块XML使用标准项目结构。
publicpath="
通过绑定包向公共路径中加入包,在绑定包中,模块XML将会在指定路径中被发现来指定
servletpath="
url-path"
class="
为了RPC测试的方便性,这个元素装载一个SERVLET类,它应用到指定的URL路径。
这个URL路径应该是绝对路径,并且符合目录形式(例如:
/spellcheck)。
你的客户端代码指定这个URL映射到一个调用ServiceDefTarget.setServiceEntryPoint(String)。
一些SERVLET可以用这种方式装载,包括那些从继承模块里来的。
scriptsrc="
js-url"
scriptready-functionbody<
自动注入外部的JAVASCRIPT文件,这个文件位于src指定的位置。
scriptready-functionbody是一个JAVASCRIPT函数体,当这个脚本已知被初始化时,它返回true
stylesheetsrc="
css-url"
自动注入外部的CSS文件,这个文件位于src指定的位置。
extend-propertyname="
client-property-name"
values="
comma-separated-values"
为一个已存在的客户属性值集合进行扩展。
一些值可以用这种方式添加,并且客户属性值通过继承模块进行累积。
你可能只是发现它对于“在国际化中指定本地”(specifyinglocalesininternationalization)有用
●自动资源注入
模块组(Modules)能够包含到外部JAVASCRIPT和CSS的引用,方法是当模块自身装载时,它们也被自动装载。
模块可以包含到外部JAVASCRIPT和CSS文件的引用,方法是当模块自我加载时自动加载。
●注入外部JAVASCRIPT
对于在你的模块自动地关联外部JAVASCRIPT文件,脚本注入是一个方便的方法。
脚本注入使用下面的语法:
[CDATA[
scriptready-functionbody
]]>
“ready-functionbody”部分是JAVASCRIPT函数主体部分,当脚本被装载并可用后,它返回true。
脚本被装载进主页(hostpage)的名字空间(namespace),其作用与你显式地使用HTML<
script>
元素进行引入是相同的。
假定你的模块需要的脚本名为:
InjectedScript.js。
那么示例代码如下:
functionfoo(){
//dosomethingneat
doSomethingTimeConsuming();
}
functionbar(){
//dosomethingelseneat
你的模块应该如下所示:
InjectedScript.js"
//Morecomplextestsarepossible,butusuallycheckingfortheexistence
//ofafunctionisenough.
if($wnd.bar)
returntrue;
else
returnfalse;
]]>
可用-函数(ready-function)的目的就是明确地指出脚本已被完全装载,这样,你的GWT代码就能够使用JSNI,并且可以确定被引用的标识符是可用的。
在上面的例子中,函数bar的存在就说明了脚本已经就绪了。
●注入外部的样式表
样式表注入是把外部的CSS文件自动关联到你的模块的一个便捷方式。
使用如下语法可以把CSS文件自动附加到你的主页(hostpage)上。
你能够用这种方式加入一些样式表,包含入页面时的顺序就是元素在你的模块XML文件中出现的顺序。
●注入和模块继承
模块继承使资源注入更加方便。
如果你想要创建一个可重用类库,这个库依赖特定的样式表的JAVASCRIPT文件,你可以确定你的类库的客户可以用从模块继承的方式自动得到所需之物。
●过滤公共包
在你的公共路径中滤进或滤出文件,以避免无意地发布文件。
public>
元素不支持完全的FileSet语义。
当前只有下列属性和嵌套元素被支持:
⏹includes属性
⏹excludes属性
⏹defaultexcludes属性
⏹casesensitive属性
⏹嵌套标志include
⏹嵌套标志exclude
其他属性和嵌套元素不被支持
重要注意事项
Defaultexcludes的默认值是true。
命令行工具
开始开发时需要的一些有用的命令行工具。
GWT只有很少的几个命令行工具。
它们也可以用于向现存项目加入新的东西。
例如,projectCreator可以用于使一个Eclipse项目符合GWT的规范。
●projectCreator
生成基本的项目骨架。
一个可选的Antbuild文件,和/或Eclipse项目。
projectCreator[-antprojectName][-eclipseprojectName][-outdir][-overwrite][-ignore]
-ant
生成一个Antbuild文件,用于编译源代码(将会加入.ant.xml)
-eclipse
生成一个eclipse项目。
-out
输出文件写入到这个目录(默认是当前目录)
-overwrite
覆盖任何已经存在的文件。
-ignore
忽略任何已经存在的文件;
不覆盖
⏹示例
~/Foo>
projectCreator-antFoo-eclipseFoo
Createddirectorysrc
Createddirectorytest
CreatedfileFoo.ant.xml
Createdfile.project
Createdfile.classpath
运行ant-fFoo.ant.xml将会把src编译到bin。
这个build文件也包含一个目的包,这个包用于把项目打包成一个jar文件。
.project能够被引入到Eclipse工作区
●applicationCreator
生成一个初始的应用程序,这个应用程序可以从主机模式启动,并且可以编译成JAVASCRIPT
applicationCreator[-eclipseproje
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- GWT 开发者手册v2 开发者 手册 v2