GWT开端
这篇文章是转载的,原地址:GWT开端
以前的基于GWT的项目中广泛使用的还是gwt-windows-1.5.3这个版本的。
1.下载地址:
http://code.google.com/webtoolkit/download.html
2.GWT Designer + WindowBuilder Pro
http://www.instantiations.com/
3.一本牛书:Eclipse Plug-ins
http://www.qualityeclipse.com/
4.下载Plugin for Eclipse在线安装,最好全选SDK(GWT2.0.4 + AppEngine1.3.8) + GDT plugin模式.如果装SDK的话,会自动
下载两个SDK的插件,它们都是windows版本的SDK:
com.google.appengine.eclipse.sdkbundle.1.3.8_1.3.8.v201010161055
com.google.gwt.eclipse.sdkbundle.2.0.4_2.0.4.v201006301254
一定要安装在J2ee版Eclipse3.5下面,那个普通的Eclipse中缺失了太多的依赖插件了。
Eclipse Galileo Sr2 Packages---Eclipse IDE for Java EE Developers, (190 MB)
http://www.eclipse.org/downloads/packages/release/galileo/sr2
在2010-10-28时,又做了更新,当前的:
Google Plugin for Eclipse 3.5----1.4.0.v201010280047
Google App Engine Java SDK 1.3.8----1.3.8.v201010161055
Google Web Toolkit SDK 2.1.0----2.1.0.v201010280047
对GWT而言,它的作用就是“新建工程/工程属性/编绎/运行配置”这三个作用,不具有其它的任何作用了。
运行配置是com.google.gwt.dev.DevMode模式的时候,需要安装下面的firefox插件。
gwt-dev-plugin.xpi(支持Firefox/IE/Chrome三个版本的)
在运行配置中的Arguments/Classpath这两个选项卡很重要,在工程属性中Entry Point Modules这个很重要。
5.编绎生成的mygwt.nocache.js和*.cache.html可以不用细看,因为GWT其主要目的,就是不需要你关注JS的。
6.gwt-servlet.jar, gwt-user.jar, gwt-dev.jar三者之间的关系。在实际deploy的时候,只需要gwt-servlet.jar就OK了。
7.可以导出成jar包(再改war包,因为它包含了classes目录了)。
8.不需要编绎就可以运行,还可以Debug.
9.有Shell/Dev/Deploy三种运行方式。
10.可以新建5种新的类型的文件:
Module----新创建一个Module,会生成tan.gwt.xml
Entry Point Class----新建一个页面入口,会生成onModuleLoad()方法,且会注册在tan.gwt.xml
HTML Page----新建一个主页面文件,对应于tan.gwt.xml这个模块的。
UiBinder ---组合多个UI元素(多个Button/Text)为一个界面元素。
ClientBundle --- 主要用来访问资源文件(Image)
GWT中实现跳转及不同entrypoint怎么互相访问
http://yaoyanzhu.javaeye.com/blog/434196
1.在Compile的时候,最关键的是MyGWT.gwt.xml这个文件,其中的<module rename-to='wyang'>,是编绎后生成文件的目录。
而这个主页面文件MyGWT\war\MyGWT.html是没有办法再生的,必须要手工进行修改,MyGWT\war\MyGWT.css也是一样的,需要手工改。
2.在主页面文件MyGWT\war\MyGWT.html中,最重要的是这个引入这个JS文件:
<script type="text/javascript" language="javascript" src="mygwt/mygwt.nocache.js"></script>
3.运行的模式:
com.google.gwt.dev.DevMode --->推荐这种方式运行。注意Web Application launch config中的Argument参数
com.google.gwt.dev.GWTShell

4.在使用eclipse-jee-galileo-SR2-win32的"Server + Dynamic Web Project"时, Server最多只支持Tomcat6.0.
布署时会把完整的web文件拷贝到这个目录下面:
D:\TDDOWNLOAD\eclipse-jee-galileo-SR2-win32\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0
在server.xml文件中有一个<Host/>结点,<Host/>下面是<Context/>, 这个Context就是真正的Dynamic Web Project.
5.在添加了额外的Web Module以后,需要重新Publish和Restart Server, 这样,新添加的那个External Web Module才能起作用
注意,这个Web Module的内容不会拷贝到.metadata\.plugins\org.eclipse.wst.server.core\tmp0这个目录下面的,意味着,任何改
变将会立即生效。
6.如果工程名为MyGWT,编绎后会生成6个cache.html文件:
5AB8EAF1DAFE5B0D49F403D5626DC4E0.cache.html------> firefox将会使用这个文件。
EA70C7B7151DF4DBCA138470D3530ECB.cache.html------> IE将会使用这个文件。
7.上面的6个cache.html文件,分别对应于6个不同的浏览器,属于编绎过程中的参数控制的,至少需要30秒:

8.只支持firefox的GWT编绎文件,至少需要下面三个:
MyGWT.html ----》mygwt.nocache.js -----》5AB8EAF1DAFE5B0D49F403D5626DC4E0.cache.html
如下图:
9.辅助使用alert()或者是firefox的JS debug的插件,来对mygwt.nocache.js进行剖析:
得出:
M = L + Vb中的L=5AB8EAF1DAFE5B0D49F403D5626DC4E0 Vb=.cache.html M=5AB8EAF1DAFE5B0D49F403D5626DC4E0.cache.html
另外:
mygwt.onScriptLoad = function()将会被自动执行。
function C()中的c.gwtOnLoad(z, R, t, y);是很重要的一个调用。
10.5AB8EAF1DAFE5B0D49F403D5626DC4E0.cache.html里面几乎全部都是JS。
真正的ajax原来是完全用JS来强写body部分的(body部分用div + css)
11.直接访问http://localhost:8080/mygwt/mygwt/5AB8EAF1DAFE5B0D49F403D5626DC4E0.cache.html是不能正常显示出结果的。因为没有初始化的页面环境MyGWT.html。
12.firefox是gecko ['gekəu] n. 壁虎系列的浏览器。
可以使用它的Proxy Port方式来启用TCP/IP Monitor的view进行web访问的代理监听:

13.Eclipse Java EE IDE for Web Developers.也即:eclipse-jee-galileo-SR2-win32
---在config.ini中:
osgi.framework=file\:plugins/org.eclipse.osgi_3.5.2.R35x_v20100126.jar

14.使用firefox进行JS的调试:

poster-extension
http://code.google.com/p/poster-extension/
tamperdata
http://tamperdata.mozdev.org/
Firebug----对JS进行debug:
https://addons.mozilla.org/zh-CN/firefox/addon/1843/?src=api
密码同步sync:
https://mozillalabs.com/sync/
15.关于share包下面的类,将要做client和server端双重验证,所以,不要访问JS,不然不支持server端了;不要访问File和DB,不然不支持client端了。参见FieldVerifier的类注释:
This class is in the shared package because we use it in both the client code and on the server. On the client, we verify that the name is valid before sending an RPC request so the user doesn't have to wait for a network round trip to get feedback. On the server, we verify that the name is correct to ensure that the input is correct regardless of where the RPC originates.

16.关于GWT的配置文件,以及代码入口问题:
MyGWT.gwt.xml---》<entry-point class='org.wyang.client.MyGWT'/>--》interface EntryPoint----》void onModuleLoad();
另外,这个参数是设置compile的时候的引用到的package路径的:
<source path='client'/> ---->org.wyang.client
<source path='shared'/> ---->org.wyang.shared
17.常用的Widget以及主要的API:
Button
--addStyleName("sendButton");
--setEnabled(true);
--setFocus(true);
--addClickHandler(handler);
TextBox
--setFocus(true);
--selectAll();
--addKeyUpHandler(handler);
Label
--setText("");
HTML
--setText(textToServer);
--addStyleName("serverResponseLabelError");
--removeStyleName("serverResponseLabelError");
--setHTML(SERVER_ERROR);
RootPanel
--get("sendButtonContainer").add(sendButton);
DialogBox
--setText
--setAnimationEnabled(true);
--setWidget(dialogVPanel);
--hide();
--center();
VerticalPanel
--setHorizontalAlignment
--add
KeyUpEvent --- KeyUpHandler ---event.getNativeKeyCode() == KeyCodes.KEY_ENTER
ClickEvent --- ClickHandler
18.MyGWT.java中如果含有中文的话,需要save成UTF8编码,这样GWT编绎生成的JS中才可以正常在页面显示中文。
19.使用插件Run Web Application的功能时,Jetty是会对web.xml中的servlet进行检查的。----(Tomcat5.5不会进行检查)
-codeServerPort 9997 -port 8888

20.在进行客户端验证时,要把所用到的类的package添加到MyGWT.gwt.xml中,不然模块加载错误。(还有一个处理办法就是把这些类直接和client放在同一个包下)
21.在点击button后,要进行服务器端验证,必须要进行回调机制,不然不能生成JS代码。
常用的处理方法是:
@RemoteServiceRelativePath("checkLoginServlet")
public interface GreetService extends RemoteService{
boolean checkLogin(String username, String password);
}
因为有了RemoteService所以studio会提示生成回调java类:
void checkLogin(String username, String password,AsyncCallback<Boolean> callback);
因为有了@RemoteServiceRelativePath,所以需要在web.xml中对该servlet的path进行注册:/mygwt/checkLoginServlet
public class GreetingServiceImpl extends RemoteServiceServlet implements GreetingService
这个类本质上是一个servlet,因为它实现了RemoteServiceServlet.在这个类里面可以衔接Spring + Hibernate
还有点,在使用那个回调方法时需要声明引用:
GreetServiceAsync service = GWT.create(GreetService.class);
回调中的两个API:
void onFailure(Throwable caught);
void onSuccess(T result); ----->interface AsyncCallback<T>,这就要求了那个类servlet的API必须要有返回值。
GWT开端的更多相关文章
- F#之旅0 - 开端
F#之旅0 - 开端 UWP的学习告一段落,CozyRSS的UWP版本并没有做.UWP跟wpf开发几乎一模一样,然后又引入了很多针对移动设备的东西,这部分有点像android.没啥太大的意思,不难,估 ...
- GWT入门学习之下载安装
1.准备 安装 jdk: 下载路径:http://download.oracle.com/otn-pub/java/jdk/8u92-b14/jdk-8u92-windows-i586.exe?Aut ...
- GWT资料收集
1.别人的GWT笔记 http://www.blogjava.net/peacess/archive/2007/08/06/84950.html 2.GWT系统类库参考手册 http://www.bo ...
- GWT工程架构分析与理解
上一篇文章中介绍了GWT技术的一些理论性的东西,涉及到GWT得一些技术原理及实现.接下来笔者将通过创建一个GWT工程去理解分析GWT工程架构. GWT工程架构解析 笔者使用的是Eclipse插 ...
- GWT RPC
GWT RPC GWT RPCRemote Procedure Calls GWT: Google Web Toolkit的缩写,有了 GWT可以使用 Java 编程语言编写 AJAX 前端,然后 G ...
- GWT 中日期格式化 ,处置Date
GWT的view中不能用java原生的DateFormat 必须使用gwt封装的格式化方法,方法如下 import com.google.gwt.i18n.client.DateTimeFormat; ...
- GWT环境搭建--eclipse
上面下来需求,需要用到GWT,以前没接触过,搭个开发环境研究研究 安装软件我放在百度云盘里了(其他版本自己找,我的版本 eclipse4.4 luna gwt2.7) 链接:http://pan.b ...
- gwt 创建 超链接cell (HyperTextCell)
package com.cnblogs.hooligen.client; import com.google.gwt.cell.client.AbstractCell; import com.goog ...
- GWT 实现文件上传和下载
首先下载两个包 commons-fileupload-?.jar和commons-io-?.jar 将他们配置到你的项目中 先把它们放在 "项目名/war/WEB-INF/lib" ...
随机推荐
- JAVA高级编程序——JDBC(连接mysql数据库)——(一)
java要想连接数据库,就要用JDBC(java database connection),用这个jar包 (mysql-connector-java-xxx-xx-bin.jar) sun公司为我们 ...
- MINIDVD
import java.util.*; public class MiniDVD { public static void main(String[] args){ //扫描器 Scanner inp ...
- Nginx+Python+uwsgi+Django的web开发环境安装及配置
Nginx+Python+uwsgi+Django的web开发环境安装及配置 nginx安装 nginx的安装这里就略过了... python安装 通常系统已经自带了,这里也略过 uwsgi安装 官网 ...
- 在Angular中,如果权限值是异步请求所得,如何将其设置为HTTP请求头的Authorization?
遇到此问题的背景:项目需要实现单点登录,在前后端分离的前提下,前台如何保存token值成为了一个问题.想到的解决方案是,将token值统一存到一个前端程序,其他的前端程序去这个前端程序去取token( ...
- struts2.5框架使用通配符指定方法(常见错误)
在学习struts框架时经常会使用到通配符调用方法,如下: <package name="shop" namespace="/" extends=&quo ...
- WPF DataGrid Drag
自己实现的功能.代码比较简单的DataGrid的Drag处理,着重处理DataGrid里的拖动排序. using System; using System.Collections.Generic; u ...
- 【经验】AngularJS
1.关于ng-model <textarea id="feature_name" class="col-sm-3" placeholder="软 ...
- SpringMVC-HelloWorld (XML)
Spring2.5.6开启了Spring的注解时代,简化了的xml配置,提高了开发效率:但是,对于Spring的初学者,xml配置更容易理解的Spring的Ioc特性,aop特性:本文使用Maven构 ...
- .NET Core 1.1日期解析无APi、SQL Server数据转换JSON
前言 在批量导入Excel中的数据时发现出生日期为整数也就是为天数,结果倒腾了翻,这是其一,其二是数据库中的某一列存的是JSON数据,但是场景是为了作为作业来运行,此时不得不将筛选出的数据手动拼接成J ...
- 专题:DUILIB Win32 透明效果
Win32 透明效果相关基础知识 Layered Windows 分层窗口.这是Windows2000开始引入的概念,重新定义了窗口的Hit Testing方法,以前都是把窗口按rectangle的方 ...