您好,欢迎访问三七文档
GWT开发者手册格式规范:这种字体表示代码或术语文档目的:对新进员工进行GWT技术培训,使他们可以在以前没有接触过GWT的基础上,通过本文档,经过短期学习,即可使用GWT进行日常开发工作。GWT版本:gwt-windows-1.3.3面向读者:熟悉JAVA语言,有用J2EE开发三层架构软件系统的经验WEB应用程序开发者。一、基本概念核心GWT概念,诸如:把JAVA原码编译为JAVASCRIPT原码,调试,跨浏览器支持,和定义模块(module)等。GWT编译器主要用于把JAVA应用程序转换成对应的JAVASCRIPT应用程序GWT的核心是一个编译器,它可以把JAVA代码转换成JAVASCRIPT代码,把用于实际开发工作的JAVA应用程序转变成等价的JAVASCRIPT应用程序,一般来说:1.如果你的GWT应用在主机模式中编译运行,2.并且GWT把你的应用程序编译成JAVASCRIPT应用程序,而没有报错,3.那么的你的应用程序将会以同样的方式在WEB浏览器中工作,就像在主机模式中一样。GWT编译器支持大多数JAVA语言特性。GWT运行时库仿真了JAVA运行时库的一个子集。注意:1.语言支持:GWT可以编译J2SE1.4.2或更早版本。但有一些不一致需要注意。固有类型byte,char,short,int,long,float,double,Object,String,和数组都是支持的。毕竟,在JAVASCRIPT语言中没有64位整型,所以long类型变量被映射到JAVASCRIPT的双精度浮点类型值。为了保证主机模式和WEB模式中最大的一致性,我们推荐使用int类型变量异常try,catch,finally和用户自定义的异常都可以正常支持,但是注意,在WEB模式中Throwable.getStackTrace()方法不被支持。断言GWT编译器解析JAVAassert声明,但是它们不会被生成对应的JAVASCRIPT代码。多线程和同步JAVASCRIPT解析器是单线程的,所以GWT自然接受synchronized关键字,但是没有实际作用。同步相关的类库方法也不可用,包括Object.wait(),Object.notify(),和Object.notifyAll()反射为了效率最大化,GWT把你的JAVA原代码编译成单块集成脚本,并且不支持类的并发动态装载(我也不大懂是怎么回事,总之不要在GWT中使用JAVA的反射机制),另外,其他最佳化选项也不包括对反射的一般支持。但是可以使用GWT.getTypeName(Object)来查询一个对象的类名。无用对象清理JAVASCRIPT不支持垃圾回收阶段的对象清理,所以GWT不能支持WEB模式下的JAVA对象清理。严格浮点JAVA语言规范精确地定义了浮点支持,包括单精度和双精度,还有strictfp关键字。GWT不支持strictfp关键字,并且不能保证在转换后的代码中的浮点的详细精度,所以如果你需要保证精度的计算,则要避免在客户端代码中进行。2.运行时库支持GWT只支持JAVA2标准版和企业版类库的一个小的子集,由于这些库非常大,并且有很多在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元素是一个真正的HTMLbutton,而不是一个合成的类似按钮的界面元素,比如,一个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主页如下所示:htmlhead!--Thefully-qualifiedmodulename--metaname='gwt:module'content='com.example.cal.Calendar'!--Propertiescanbespecifiedtoinfluencedeferredbinding--metaname='gwt:property'content='locale=en_UK'!--Stylesheetsareoptional,butuseful--linkrel=stylesheethref=Calendar.css!--Titlesareoptional,butuseful--titleCalendarApp/title/headbody!--Includethebootstrapscriptjustinsidethebodyorinthehead--!--(startupisslightlyfasterifyouplaceitjustafterthebodytag--scriptlanguage=javascriptsrc=gwt.js/script!--IncludeahistoryiframetoenablefullGWThistorysupport--!--(theidmustbeexactlyasshown)--iframeid=__gwt_historyFramestyle=width:0;height:0;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.
本文标题:GWT开发者手册
链接地址:https://www.777doc.com/doc-4303272 .html