一.什么是GWT的Module
Module是GWT打包资源的方式,一个资源的集合。根据资源的类型,一个modul可以包含定义不同的内容,GWT定义有好几种Module, 其中定义界面的为com.google.gwt.user.User,在其中可以定义连接的CSS,Javascript,GWT UI及Entry Point,这个集合的内容由一个xml文件定义,这个文件通常命名为:“模块名.gwt.xml”。一个Module要使用其它Module必须通过<inherits name=“com.google.gwt.junit.JUnit”/> 进行定义。inherits就表示:如果你自己的module inherits了一个module,那么该module中的所有内容及该module inherit的其它内容,包括css,javascript等所有资源都在你自己的module中可见并可直接使用。GWT编译的时候会为每个module生成自己的文件夹,并把该moduel的所有内容及项目的public目录中的内容生成到该文件夹中,文件夹的命名是“包名.module名”

二.什么是GWT的Entry Point
Entry Point可以理解为gwt对界面上不同模块部分的封装,比如一个web界面有两个主要的部分,一个部分是实时显示内容的告示区域,一个部分是留言的区域,那个就可以定义两个Entry Point,分别处理这两个界面部分,每个Entry Point是一个Java代码,这样不同功能、不一样的界面模块就可以分别写到不同的java代码中去了,当然你也可以把整个页面都定义在一个Entry Point里面去,那这个java代码里既要处理显示实时告示的逻辑,又要处理留言的逻辑,代码就很混杂,这就像现在的用php来整个定义一个页面一 样,Entry Point的定义在Module中通过 <entry-point class=””/>指定。
那么这个Entry Point显示在那个地方呢?
这不是Entry Point处理的内容,Entry Point只表示一个页面会分成几个不同功能的模块及负责这些模块的java类,甚至实际的界面会显示在什么地方由java类里面定义布局的代码定义。这里每个Module都有一个html页面,该页面负责加载最终gwt编译的javascript代码及ui,那么在这个html里面我们就可以定义一个布局显示的模板构架。定义好哪里要显示什么,比如:
<table> <tr><td id=”bbs”></td></tr> <tr><td id=”message”></td></tr> </table> 那就可以定义两个Entry Point一个负责BBS,一个负责Message,然后在BBS的java代码里通过
RootPanel.get(”bbs”).add(”负责bbs的布局定义"); RootPanel.get(”message”).add(”负责Message的布局定义"); 把两个不同的功能代码放到我们预定义的地方,如果RootPanel.get().add(”布局定义”);则加取页面的最后。
EntryPoint的EntryPoint.onModuleLoad()方法就是负责定义界面的地方,相当于RCP IViewPart的createPartControl

三.什么是Remote Module
GWT没有这个概念,这个概念是Cypal插件定义的,它其实就是指GWT访问远程服务的代码,共有三个类:
XXXService:这是远程服务的定义接口,定义暴露的接口方法。该方法的实现在XXXServiceImpl中实现,同时该类需要通过@RemoteServiceRelativePath定义该服务的url路径名,由于XXXServiceImpl其实就是一个Servlet,所以这个路径会在web.xml的url-pattern用到
XXXServiceAsync:该接口是XXXService的副本,它的作用是当Java(最终应该说是javascript)调用XXXService后,该接口提供一个回调,所以该接口的方法定义比XXXXService的方法定义多了个AsyncCallbak<T>接口,该接口定义了两个方法:
onFailure(Throwable caught)//失败时调用
onSuccess(T result)//成功时调用
XXXServiceImpl:这是具体类,这就是具体实现远程接口的地方,可以在这里实现业务逻辑,访问ejb,访问web service等等
除了XXXServiceImpl这几个类外,其它两个接口都不需要我们实现,GWT会通过动态代理来实现这两个接口,所以那两个接口只要定义就可以了
那如何调用Remote Module呢?
调用Remote Module需要使用到XXXServiceAsync副本接口,首先需要通过GWT生成两个接口的动态代理:
XXXServiceAsync service = GWT.create(XXXService.class);
然后就可以调用了,在相关的界面事件处理的地方调用XXXServiceAsync的方法,该方法比XXXService多了一个AsyncCall回调参数,这是我们需要实现的类:
service.服务方法(new AsyncCallback<T>(){ //该类可以定义成匿名类 public void onFailure(Throwable caught){ //处理失败 } public void onSuccess(T result){ //处理成功 } })

原文:http://www.li-zone.cn/index.php/2009/05/gwt%e7%9a%84%e4%b8%80%e4%ba%9b%e5%9f%ba%e6%9c%ac%e6%a6%82%e5%bf%b5%e5%8f%8a%e7%90%86%e8%a7%a3/

GWT-基本概念及理解相关推荐

  1. Spring Security 实战干货: RBAC权限控制概念的理解

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 码农小胖哥 来源 | 公众号「码农小胖哥」 1 ...

  2. 架构漫谈(二):认识概念是理解架构的基础

    原文:架构漫谈(二):认识概念是理解架构的基础 架 构漫谈是由资深架构师王概凯Kevin执笔的系列专栏,专栏将会以Kevin的架构经验为基础,逐步讨论什么是架构.怎样做好架构.软件架构如何落地.如 何 ...

  3. BlockChain:区块链技术基础概念综合理解——个人总结

    BlockChain:区块链技术基础概念综合理解--个人总结 目录 区块链的进阶与意义 1.区块链技术的进阶 2.区块链技术三大意义-传递价值.建立可信用环境.提高效率和降低成本 1.传递价值 2.建 ...

  4. 从进程组、会话、终端的概念深入理解守护进程

    从进程组.会话.终端的概念深入理解守护进程 一.写在前面 「守护进程」是 Linux 的一种长期运行的后台服务进程,也有人称它为「精灵进程」.我们常见的 httpd.named.sshd 等服务都是以 ...

  5. pytorch 中维度(Dimension)概念的理解

    pytorch 中维度(Dimension)概念的理解 Dimension为0(即维度为0时) 维度为0时,即tensor(张量)为标量.例如:神经网络中损失函数的值即为标量. 接下来我们创建一个di ...

  6. MVC与模板概念的理解

    MVC与模板概念的理解 MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器.使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式.比如一 ...

  7. (图形学相关数学知识)-2.对基本概念的理解(一)

    总览 总结一些在图形学中经常用到的线性代数基本概念. 主要涉及: 标量, 向量, 位置, 方向, 坐标, 矩阵, 线性变换, 线性相关, 平移, 旋转, 缩放, 仿射变换, 齐次坐标等. 标量(数字) ...

  8. 开环与闭环概念的理解

    开环与闭环概念的理解 开环与闭环是自动控制原理里面的概念,在电路设计里面也经常用到,像是运放电路,时钟电路,开关电源电路等.用是用到了,但是真的要你针对这两个概念讲出个ABCD时就.... 1 开环系 ...

  9. 数学是一门逻辑性极强的演绎科学,只有对基本概念深入理解,对基本定理和公式牢牢记住,才能找到解题的突破口和切入点。

    考研数学备考目前已进入首轮复习阶段.此阶段考生要做的是全面整理基本概念.定理.公式,初步总结复习重点,把握命题基本题型,为强化期的复习打下坚实基础. 由于数学大纲一般变化不大,因此,虽然2003年考试 ...

  10. jar包等概念的理解、yaml语法学习和多环境切换

    一.学习内容 jar包等概念的理解 yaml语法学习 多环境切换 1.jar包等概念的理解 这部分的学习内容是关于一些名词的解释,这些名词是我在看课过程中,听到或看到却又未曾了解的.因为不理解这些名词 ...

最新文章

  1. frps server端配置_Docker 快速搭建 mock-server
  2. PECL 和 PEAR 有什么区别?
  3. Vcenter 管理中心 在服务器上新建虚拟机及安装系统
  4. 原创:通过jQuery进行跨域操作
  5. 用Java编写Hadoop MapReduce任务
  6. android四大组件之Service 注册广播接收者
  7. java方法_Java方法
  8. replace()替换文字扑获组做法
  9. 读《鸟哥的linux私房菜》有感--第四天
  10. 蓝桥杯,基础练习 Fibonacci数列(斐波那契数列) C++
  11. Flex TLF框架
  12. 新一代 OIer 的快速入门命令行教程
  13. 金庸小说人物知识图谱构建——图谱可视化
  14. 滴滴一下,小程序专车来了
  15. android 模拟器声音设置,逍遥安卓模拟器运行游戏过程中没有声音怎么解决
  16. 1388. 3n 块披萨
  17. Oracle 11g数据库基础教程(第2版)-课后习题-第七章
  18. 蔡司数码视疲劳测试软件_数码视疲劳的治疗
  19. 【180927】智能象棋游戏源码
  20. Lucene入门教程(一)

热门文章

  1. 1038 统计同成绩学生
  2. ArcGIS中加载各种在线地图
  3. 360全景倒车影像怎么看_360度全景倒车影像应该装么?告诉大家千万要冷静,一招对付所有...
  4. C网跟G网是什么意思?
  5. python counter_如何获得按输入顺序排序的python Counter输出?
  6. 神奇的λ-calculus
  7. 中国农业大学计算机考研参考书目,中国农业大学(专业学位)计算机技术考研参考书目...
  8. Win10代理自动打开无法永久关闭的问题排查和如何解决
  9. 401.3 您未被授权查看该页 错误原因和解决方案
  10. sql date_format用法