zoukankan      html  css  js  c++  java
  • 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'>,是编绎后生成文件的目录。
    而这个主页面文件MyGWTwarMyGWT.html是没有办法再生的,必须要手工进行修改,MyGWTwarMyGWT.css也是一样的,需要手工改。

    2.在主页面文件MyGWTwarMyGWT.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:TDDOWNLOADeclipse-jee-galileo-SR2-win32workspace.metadata.pluginsorg.eclipse.wst.server.core mp0
    在server.xml文件中有一个<Host/>结点,<Host/>下面是<Context/>, 这个Context就是真正的Dynamic Web Project.

    5.在添加了额外的Web Module以后,需要重新Publish和Restart Server, 这样,新添加的那个External Web Module才能起作用
    注意,这个Web Module的内容不会拷贝到.metadata.pluginsorg.eclipse.wst.server.core mp0这个目录下面的,意味着,任何改
    变将会立即生效。


    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必须要有返回值。

     

  • 相关阅读:
    金额转中国大写
    double 四舍五入保留一定的位数
    通过ajax提交表单上传文件
    微信扫码提示浏览器打开的
    在Servlet中获取spring容器WebApplicationContext
    Oracle CONNECT by 简单用法
    JS 删除Array对象中的元素。
    数据导出excel
    DWZ 在js中刷新某个navTab
    Python发送邮件
  • 原文地址:https://www.cnblogs.com/klbc/p/3709822.html
Copyright © 2011-2022 走看看