GWT 入门介绍
GWT是 Google Web Toolkit的简称。
GWT是一个以Java语言为工具,以类似Swing的方式编写UI组件,之后通过GWT Compiler编译
为JavaScritp和HTML在客户端浏览器中运行的一个开发工具和编程模型。
GWT应用程序有两种方式运行:
Hosted Model
在Hosted Model方式下,Java程序并不会被编译成JavaScript,GWT只是创造了一个类似
浏览器的环境,直接运行使用GWT开发的程序。这种模式最具生产力(这种模式下可以Debug所有的Java代码),
所以开发环境通常使用Hosted Model,但是真正的程序执行不使用这种模式。
Web Model
就是将使用GWT编写的Java程序整整编译成JavaScript,在Web容器上运行,使用浏览器
访问的模式,这种方式只有在测试或者运行的时候才使用,每次对Java类的修改必须重新编译
这些Java类,之后重新部署应用。所以生产力比较低。
安装GWT
从如下位置下载GWT的最新版本:
http://code.google.com/webtoolkit/download.html
当前最新的Release版本为1.4.60, 上一个稳定的版本为1.3.3
第一步,安装JDK, 1.4 以上的版本都可以。
第二步,下载GWT压缩文件,这里使用1.4.59 RC2(gwt-windows-1.4.59.zip)
第三布,将GWT压缩文件解压缩到制定的目录,这里我使用的目录为,C:\程序开发\Java\gwt-windows-1.4.59
第四步,安装成功
安装之后的目录结构为:
C:\程序开发\Java\gwt-windows-1.4.59
doc(文档目录,开发文档和Java API文档)
samples(示例代码目录,非常有名的KitchenSink示例代码即在此目录中)
about.html
about.txt
applicationCreator.cmd
benchmarkViewer.cmd
COPYING
COPYING.html
gwt-benchmark-viewer.jar
gwt-dev-windows.jar
gwt-ll.dll
gwt-module.dtd
gwt-servlet.jar
gwt-user.jar
i18nCreator.cmd
index.html
junitCreator.cmd
projectCreator.cmd
release_notes.html
swt-win32-3235.dll
使用GWT建立开发
GWT的安装目录下有一个名叫Samples的目录,里边有很多的例子,其中KitchenSink比较全面的展现了GWT的Web组件。
applicationCreator创建一个可以以Hosted Mode形式运行的GWT应用程序,
以下命令将建立一个工程
C:\程序开发\Java\gwt-windows-1.4.59>applicationCreator.cmd -eclipse GWTLogon -out GWTLogon com.jpleausre.gwt.logon.client.GWTLogon
Created directory GWTLogon\src
Created directory GWTLogon\src\com\jpleausre\gwt\logon
Created directory GWTLogon\src\com\jpleausre\gwt\logon\client
Created directory GWTLogon\src\com\jpleausre\gwt\logon\public
Created file GWTLogon\src\com\jpleausre\gwt\logon\GWTLogon.gwt.xml
Created file GWTLogon\src\com\jpleausre\gwt\logon\public\GWTLogon.html
Created file GWTLogon\src\com\jpleausre\gwt\logon\client\GWTLogon.java
Created file GWTLogon\GWTLogon.launch
Created file GWTLogon\GWTLogon-shell.cmd
Created file GWTLogon\GWTLogon-compile.cmd
运行GWTLogon-shell.cmd可以看到GWT启动的服务端的Google Web Toolkit Development Shell,如下图:
和如下的Host Mode的浏览器:
点击其中的 Click Me 按钮,可以看到输出的Hello World!。
projectCreator建立一个基于ant构建的,或者基于eclipse的GWT开发工程,
例如:
C:\程序开发\Java\gwt-windows-1.4.59>projectCreator.cmd -ant GWTLogon -eclipse GWTLogon -out GWTLogon
Created directory GWTLogon\src
Created directory GWTLogon\test
Created file GWTLogon\GWTLogon.ant.xml
Created file GWTLogon\.project
Created file GWTLogon\.classpath
其中的GWTLogon.ant.xml构建文件的内容为:
GWTLogon build file. This is used to package up your project as a jar,
if you want to distribute it. This isn't needed for normal operation.
applicationCreator和projectCreator的区别是
applicationCreator创建了src目录和Demo代码,projectCreator不创建Demo代码,但是创建src目录和test目录。
applicationCreator创建了启动脚本GWTLogon-shell.cmd和GWT编译脚本GWTLogon-compile.cmd,而projectCreator不创建。
applicationCreator创建了eclipse launch文件,而projectCreator创建.classpath和.project文件。
通常情况下,我们先使用projectCreator创建按project,projectCreator创建的工程可以轻松的import到eclipse中,
之后我们使用applicationCreator创建需要的Java示例代码,eclipse launch文件,启动脚本和编译脚本。
使用Eclipse导入的GWT工程如下:
命令列表
projectCreator
生成基本项目框架,可以选择使用eclipse或者使用ant构建文件
applicationCreator
生成代码示例和一个可运行的应用程序
junitCreator
生成一个JUnit测试Case
i18nCreator
生成一个i18n属性文件和对应的Javascript脚本。
benchmarkViewer
显示benchmark结果
功能介绍(通用)
GWT体系结构
GWT Java-to-JavaScript Compiler
将Java程序翻译为JavaScript,通过GWT Compiler可以让GWT程序在Web 模式下运行
GWT Hosted Web Browser
GWT Hosted Web Brower让你的程序可以在Hosted模式下运行,在Hosted模式下运行的是Java代码而不是编译出来的JavaScript代码,在Hosted模式下可以轻松的做Debug。
JRE emulation library
可以称为JRE简化的类库。在客户端(用来编译成JavaScript代码的客户端Java代码)不是所有的java类库都被gwt支持,只有部分被支持,这些类库是几乎所有的java.lang包,java.util包的一部分。
GWT Web UI class library
使用GWT Web UI类库可以创建web 浏览器的组件,例如按钮,文本框,图片等。这是GWT的核心UI类库。
功能介绍(Web控件)
Web控件是GWT表示层的核心,通过使用GWT提供的Web控件可以创建丰富的客户端画面。
GWT的web组件主要分为两类:输入控件和Layout控件。
输入控件主要是指向服务器提交数据,处理操作,显示服务器数据的空间,主要包括:
Button,RadionButton,PushButton,ToggleButton,CheckBox,TextBox,PasswordBox
TextArea, HyperLink,ListBox,MenuBar,Tree,Table, TabBar,DialogBox, PopupPanel
RichTextArea, DisclosurePanel, SuggestBox
Layout 空间主要用来有规律地放置输入控件,主要包括:
Stackpanel,HorizontalPanel,VerticalPanel, FlowPanel, VerticalSplitPanel, HorizontalSplitPanel,
DockPanel, TabPanel,
事件模型(Event & Listener)
如何处理页面的事件呢,例如点击按钮,Textbox失去焦点等?
如下的代码建立了一个按钮,按钮的名字是“Click Me”,当你点击这个按钮的时候处罚一个Click事件,Click事件触发onClick(Widget sender)方法。
sender表示触发onClick方法的组件,这里只是简单的在页面上显示Hello World信息(相当于javascript的alert方法)。
Button b = new Button("Click Me");
b.addClickListener(new ClickListener() {
public void onClick(Widget sender) {
Window.alert("Hello World");
}
});
常见的Listener如下:
ChangeListener
ClickListener
FocusListener
KeyboardListener
MouseListener
MouseWheelListener
PopupListener
ScrollListener
TableListener
TreeListener
功能介绍(远过程调用RPC)
体系结构
GWT应用中页面一旦加载,就再也不会向服务器请求HTML内容,所有的画面迁移,转换都在客户端进行,但是数据还是会向服务器提交,或者从服务器获取。
服务器上负责处理数据的对象在GWT中叫做Service,每个Service有三个类组成:服务方法定义接口(Service),异步调用接口(ServiceAsync)和服务器方法实现类ServiceImpl。
以Login为例子说明:
// 服务方法定义接口
public interface LoginService extends RemoteService {
public boolean login(LoginSO login) throws ApplicationException;
}
// 异步调用接口
public interface LoginServiceAsync {
void login(LoginSO login, AsyncCallback async);
}
// 服务器方法实现类
public class LoginServiceImpl extends RemoteServiceServlet implements LoginService {
public boolean login(LoginSO login) throws ApplicationException {
...
return true;
}
}
其中前两个接口在client包内部,最后一个实现在server包内部。
客户端调用一个服务类的方法的代码如下:
LoginServiceAsync ourInstance = (LoginServiceAsync) GWT.create(LoginService.class); // Œ
((ServiceDefTarget) ourInstance).setServiceEntryPoint(GWT.getModuleBaseURL() + "/LoginService"); //
ourInstance.login(loginSO, new AsyncCallback() { //Ž
public void onFailure(Throwable caught) { //
if(caught instanceof InvocationException) {
// system exception
} else {
Window.alert(" " + GWTShowConstants.Messages.constants.maxQueryCount());
// aplication exception
}
}
public void onSuccess(Object result) { //
Window.alert("success");
}
});
// ‘
远程调用
Œ 获得服务器方法的调用接口(skeleton)。
设置服务位置。
Ž 远程调用服务器上的方法,注意这里是异步调用,在和调用之前‘代码可能先被调用了。
调用出错,或者调用方法抛出异常的时候调用的方法。
调用成功返回时候调用的方法。
参数和返回值系列化类型
这里的参数指的是Service方法调用的参数和返回值。
由于GWT的客户端代码都是JavaScript,而服务器代码都是使用Java编写的,这就涉及到JavaScript调用Java方法的时候
如何传递参数,如何取得返回值的问题。
可序列化的类型包括:
(1) 原始类型,例如:char, byte, short, int, long, boolean, float, double;
(2) String,java.util.Date,或者原始类型的包装类型,例如: Character, Byte, Short, Integer, Long, Boolean, Float, or Double;
(3) 可序列化类型数组(包含(4)和(5)定义的类型)
(4) 用户定义的可序列化类型
(5) 该类型至少有一个可序列化的子类型
针对上述(4)中说明的,什么是用户自定义的可序列化类型呢?必须满足以下亮点:
第一,必须直接或者间接(例如,父类型实现了这个接口)的实现了IsSerializable接口
第二,所有非transient类型都是可序列化的(final类型的属性在GWT中被视为transient类型)
是否支持容器类型呢?那么又如何声明呢?
支持容器类型,GWT可以使用Type 参数来表示容器类型内部的元素的类型,例如:
注意GWT暂时不支持使用 JDK 5.0 的模板容器
//用户自定义序列化类型
public class MyClass implements IsSerializable {
/**
* 这个Set中的元素的类型必须都是String类型
*
* @gwt.typeArgs
*/
public Set setOfStrings;
/**
* Map中的元素的Key和Value的类型都是String类型。
*
* @gwt.typeArgs
*/
public Map mapOfStringToString;
}
// 服务器方法实现类
public interface MyService extends RemoteService {
/**
* 第一个类型参数表示方法的参数c是一个List,并且其中只能放置Integer类型。
* 第二个类型参数表示返回值为List,并且其中的原书的类型为String类型。
*
* @gwt.typeArgs c
* @gwt.typeArgs
*/
List reverseListAndConvertToStrings(List c);
}
异常
在调用方法的时候异常怎么处理呢?
调用方法的过程中的异常可以分为两类:第一类,调用方法的过程中出现了异常,例如网络故障,服务类不存在等。
第二类,服务器方法抛出了异常。
在客户端调用的过程中这两种异常都在onFailure(Throwable caught)方法中处理,但是caught的类型有所区别,
第一种情况下,caught为InvocationException的子类,第二种情况下caught为用户自定义的异常。
由于异常也需要在客户端(JavaScript)和服务器端(Java)传递,所以Exception的定义也要满足可序列化的要求。
但是在GWT中已经定义了一个基本的异常类型来提一个Exception类的基础类,这个类是SerializableException,例如:
public class ApplicationException extends SerializableException {
public ApplicationException() {
super();
}
public ApplicationException(String msg) {
super(msg);
}
public Throwable getCause() {
return super.getCause();
}
public String getMessage() {
return super.getMessage();
}
public Throwable initCause(Throwable cause) {
return super.initCause(cause);
}
}
异常消息内容建议,服务器端的错误消息内容在服务器保存,客户端的错误消息内容在客户端保存(参看后续的国际化部分),两个地方
都需要的,出于GWT技术建议使用两份,分别放在客户端和服务器端。
为什么不能重用呢?
客户端的消息会被编译为JavaScript,所以服务器端通常无法使用。(还有另外的原因,参看后续的国际化部分)。
分享到:
相关推荐
这个“GWT入门 GWT中文教程”压缩包包含了一系列资源,旨在帮助初学者快速理解和掌握GWT的开发技术。 首先,EXT-GWT2.0.1是EXT-GWT(GWT-Ext)的一个版本,它是基于GWT的组件库,提供了丰富的用户界面组件,如表格...
Gwt中文手册,GWt入门Gwt中文手册,GWt入门Gwt中文手册,GWt入门
扫描完整版
**GWT 入门教程与实例解析** Google Web Toolkit(GWT)是Google推出的一款用于构建高性能、跨浏览器的Web应用程序的开源开发工具。它基于Java语言,通过编译Java源代码为JavaScript,使得开发者可以利用Java的强大...
### SmartGWT 入门详解 #### 一、SmartGWT 概述 **SmartGWT** 是一款基于 **Google Web Toolkit (GWT)** 的高级Web应用开发框架,旨在简化企业级Web 2.0应用的开发过程。自从 **GWT** 发布以来,它吸引了大量的...
### GWT入门 **1. 安装与配置** 首先,你需要下载GWT SDK,并在Eclipse或其他IDE中配置GWT插件。安装SDK后,创建一个新的GWT项目,包括设置模块文件.gwt.xml,定义项目的源代码路径和库依赖。 **2. 编写客户端代码...
**Java开发人员的Ajax:Google Web Toolkit (GWT) 入门** Google Web Toolkit (GWT) 是一个强大的工具,它允许Java开发人员使用熟悉的Java语言来构建高性能、跨浏览器的Ajax应用程序。GWT通过将Java代码编译为优化...
本"gwt入门项目代码"是一个很好的起点,适合初学者了解和学习GWT和GXT框架。这个项目中,你可以期待找到以下几个关键的知识点: 1. **GWT的基础概念**:理解GWT如何将Java代码转换为跨浏览器兼容的JavaScript,以及...
gwt入门.chm gwt入门资料,helloworld级别
以下是关于 GWT 入门的详细知识点: 1. **GWT 编译器**: GWT 的核心部分是其编译器,它能够将 Java 代码转换为浏览器可执行的 JavaScript。这使得开发者可以利用 Java 的强大功能和成熟的开发工具,同时享受 ...
GWT入门与经典实例解析源码提供了一个学习和实践GWT开发的宝贵资源,下面将详细介绍GWT的关键概念、核心特性以及通过实例解析来深入理解其工作原理。 1. **GWT的安装与设置**: 在开始GWT项目之前,你需要安装Java...
### GWT入门教程知识点详解 #### 一、GWT简介 **Google Web Toolkit (GWT)** 是由Google推出的一款强大的Ajax应用开发包,它允许开发者使用熟悉的Java语言来进行Web应用程序的构建。对于初学者而言,这无疑是一个...
标题 "GWT入门实例" 指向的是Google Web Toolkit(GWT)的初学者教程。GWT 是一个开源的Java开发框架,它允许开发者使用Java语言来编写客户端的Web应用,然后自动编译成优化过的JavaScript代码。GWT通过提供丰富的...
**入门GWT:** 在入门阶段,你需要了解GWT的基本概念和工作原理。GWT项目是基于Maven或Gradle构建的,包含一系列模块,每个模块代表一个独立的JavaScript输出。首先,你需要设置开发环境,安装Eclipse或IntelliJ ...
**GWT(Google Web Toolkit)入门教程** GWT(Google Web Toolkit)是一个开源的Java开发框架,由Google推出,主要用于构建高性能、富交互式的Web应用程序。这个框架允许开发者使用Java语言编写前端代码,并自动...
**一、GWT入门** 在入门阶段,首先需要理解GWT的基本概念,包括模块系统、事件处理、UI构建和数据绑定。GWT的模块系统允许开发者将应用拆分为可重用的部分,而事件处理机制则使得用户交互变得简单。UI构建主要依赖于...