您好,欢迎访问三七文档
第一章编码基础在eclipse中添加GWT插件。升级安装源如下:Eclipse3.5(Galileo)(Ganymede)(Europa)第一节客户端代码1.1.1创建入口点新建GWT工程之后将生成的类文件都删除。并删除web.xml中如下的部分:!--Servlets--servletservlet-namegreetServlet/servlet-nameservlet-classcom.example.smallgwt.server.GreetingServiceImpl/servlet-class/servletservlet-mappingservlet-namegreetServlet/servlet-nameurl-pattern/smallgwt/greet/url-pattern/servlet-mapping然后观察生成的模块配置文件?xmlversion=1.0encoding=UTF-8?modulerename-to='smallgwt'!—rename-to为模块起一个别名,使用起来简单--!--InheritthecoreWebToolkitstuff.--!—下面是继承其他模块,User是必须继承的一个模块。--inheritsname='com.google.gwt.user.User'/!--InheritthedefaultGWTstylesheet.Youcanchange--!--thethemeofyourGWTapplicationbyuncommenting--!--anyoneofthefollowinglines.--!--继承缺省的GWT样式表.你能够改变GWT程序的主题。只需要去掉下面几行其中一个的注释--inheritsname='com.google.gwt.user.theme.standard.Standard'/!--inheritsname='com.google.gwt.user.theme.chrome.Chrome'/--!--inheritsname='com.google.gwt.user.theme.dark.Dark'/--!--Othermoduleinherits--!--Specifytheappentrypointclass.--!--指定应用的入口点类--entry-pointclass='com.example.smallgwt.client.Smallgwt'/!--Specifythepathsfortranslatablecode--sourcepath='client'//module每一个模块都有一个入口点。这个模块的入口点就是“Smallgwt”类。现在使用eclipse在com.example.smallgwt.client中创建这个类Smallgwt。同时指定接口为com.google.gwt.core.client.EntryPoint。自动生成的代码如下:packagecom.example.smallgwt.client;importcom.google.gwt.core.client.EntryPoint;publicclassSmallgwtimplementsEntryPoint{@OverridepublicvoidonModuleLoad(){x//TODOAuto-generatedmethodstub}}入口点类入口点类是整个GWT应用程序的入口,也就是说,GWT应用程序运行时会首先调用这段代码,工程的入口点类在工程模块的entry-point标签中指定。在入口点类中必须实现入口点方法onModuleLoad(),这个入口点方法是整个GWT应用程序开始执行的地方。这个方法中主要做的事情是:创建可视组件设置事件处理句柄将可视组件添加到网页上packagecom.example.smallgwt.client;importcom.google.gwt.core.client.EntryPoint;importcom.google.gwt.core.client.GWT;importcom.google.gwt.event.dom.client.ClickEvent;importcom.google.gwt.event.dom.client.ClickHandler;importcom.google.gwt.user.client.Window;importcom.google.gwt.user.client.ui.Button;importcom.google.gwt.user.client.ui.RootPanel;publicclassSmallgwtimplementsEntryPoint{@OverridepublicvoidonModuleLoad(){//TODOAuto-generatedmethodstub//创建一个按钮,按钮标题是Clickme.创建一个事件接收类,当用户点按钮的时候,这个类的方法被调用finalButtonb=newButton(Clickme,newClickHandler(){@OverridepublicvoidonClick(ClickEventevent){//TODOAuto-generatedmethodstub//弹出警告窗口,显示Hello,AJAXWindow.alert(Hello,AJAX);}});//将这个按钮添加到网页上。RootPanel.get().add(b);GWT.log(HelloWorld!,null);}}RootPanel.get([“soltName”]).add(widget)。如果get中为空。则得到整个网页,将组件添加到网页上。如果不为空。则将组件添加到get中的名字指定的位置。1.1.2HTML页面HTML页面和普通的HTML页面没有什么区别,可以使用一切HTML标签。有几个特别的地方如下:1、这个HTMLhead中必须引入下面的JavaScript代码,用来加载GWT工程模块,之后GWT读入模块文件(*****.gwt.xml)来查找入口点(EntryPoint)类,整个GWT程序才得以运行。另外,所有GWT的meta标签都应该出现在这段JavaScript代码之前。scriptlanguage=’javascript’src=’smallgwt/smallgwt.nocache.js’/script下面是在模块中没有定义模块别名的时候使用完整的长名字的情形:scripttype=text/javascriptlanguage=javascriptsrc=com.example.smallgwt.Smallgwt/com.example.smallgwt.Smallgwt.nocache.js/script这个nocache.js文件位于编译后的目录下,并且其命名规则为:模块的全路径名.nocache.js2、在HTML的body中可以加入下面这个iframe标签,其作用是为GWT提供历史支持,但这个标签是可选的。iframesrc=”javascript:””id=”__gwt_historyFrame”style=”width:0;height:0;border:0”/iframe这里的id属性值必须为“__gwt_historyFrame”。3、如果在MyApplication.java的RootPanel中指定了使用某些id,比如这里的“solt1”和“slot2”,那么在HTML页面中也必须明确指定以这些id命名的HTML标签,否则程序将抛出NullPointerException异常。tablealign=centertrtdid=”slot1”/tdtdid=”slot2”/td/tr/table1.1.3模块前面提到那段nocache.js代码用来加载GWT工程的模块。Smallgwt.gwt.xml中的内容:module!--modulerename-to='smallgwt'--!--指定模块别名的方法--!--指明此模块继承的夫模块,所有的GWT工程都继承自User--inheritsname=’com.google.gwt.user.User’/!--指明此GWT程序的入口点类.--entry-pointclass=’com.example.smallgwt.client.Smallgwt//moduleGWT模块名都是以.gwt.xml结尾的XML文件,用来配置这个工程,位于工程根目录下。1.1.4标准GWT工程结构使用标准的GWT工程结构可以有效的区分客户端和服务器端的代码,所以推荐使用标准的GWT工程结构。如下表:包名作用\工程的根目录,包含模块XML文件client\存放客户端代码server\存放服务器端代码public\存放静态资源,如.html,.css,图片等第二节Java语言和库的兼容性1.2.1语言支持GWT支持大部分的Java核心语言的语法和语义,但是还有一些小小的不同。GWT程序的目标语言是JavsScript,所以在开发模式和发布模式运行之间还是有一些需要注意的地方。内置类型:简单类型(boolean,byte,char,short,int,long,float,和double),Object,String,arrays,用户定义类等,都是被支持的。只是有点注意。数学类型:JavaScript中只有64位浮点型。所有的java基本算术类型(除了长整数)在发布模式下都要转换到这个64位浮点数。这就意味着byte、char、short和int等类型的不会象在java中一样溢出。也就是说,这些数据类型的值可以超出合法的取值范围。浮点数运算将作为double运算进行,并且结果的精度将更高。整数除法的执行结果将被四舍五入到整数值。long类型:Javascript没有64位整数类型。GWT使用两个32位整数类型完成64为整数的模拟。这就有两个问题:首先是性能问题,另外就是JSNIcode代码是不支持的。异常:try,catch,finally和用户定义的异常还是正常支持的,不过Throwable.getStackTrace()是不被发布模式支持的。注意:有几个JavaVM中最基本的异常是不会在发布模式中支持的,那就是NullPointerException、StackOverflowError和OutOfMemoryError。取而代之的是JavaScriptException异常。断言:在开发模式中断言语句总是不起作用的,因为它和在调试的时候GWT库提供的众多很有帮助的错误检测差的很远。GWT编译器默认移除和忽略所有的断言。但是可以通过为编译器指定-ea标志在发布模式下打开这些断言。多线程和同步:Javascript解释器是单线程的,所以GWT只是单纯的接收同步的关键字,而不起任何作用。同步相关的方法也不被接收,包括Object.wait()、Object.notify()和Object.notifyAll()。编译器将忽略同步关键字除非对象关联一个同步方法被调用。反射(Reflection):为了最大化效率,GWT编译Java源代码到一个整块的script,不支持类的连续动态调入。对这个的优化通常使用反射机制
本文标题:GWT开发指南
链接地址:https://www.777doc.com/doc-4303270 .html