GWT - 面试问题



尊敬的读者,这些GWT 面试问题是专门为帮助您了解在GWT面试中可能遇到的问题类型而设计的。根据我的经验,优秀的面试官在面试时很少会预先计划好要问哪些具体问题,通常会从主题的一些基本概念开始提问,然后根据后续的讨论和您的回答继续深入−

Google Web Toolkit (GWT) 是一个用于构建和优化复杂基于浏览器的应用程序的开发工具包。GWT 被 Google 的许多产品使用,包括 Google AdWords 和 Orkut。

以下是 GWT 的特性−

  • Google Web Toolkit (GWT) 是一个用于创建富互联网应用程序 (RIA) 的开发工具包。

  • GWT 为开发人员提供了使用 JAVA 编写客户端应用程序的选项。

  • GWT 将用 JAVA 编写的代码编译成 JavaScript 代码。

  • 用 GWT 编写的应用程序与跨浏览器兼容。GWT 自动生成适合每个浏览器的 javascript 代码。

  • GWT 是开源的,完全免费的,并且被全球数千名开发人员使用。它根据 Apache License 版本 2.0 许可。

以下是选择 GWT 进行开发项目的理由−

  • 基于 Java,您可以使用 Eclipse 等 Java IDE 开发 GWT 应用程序。开发人员可以使用代码自动完成功能/重构/导航/项目管理以及 IDE 的所有功能。

  • GWT 提供了完整的调试功能。开发人员可以像调试 Java 应用程序一样调试客户端应用程序。

  • GWT 易于与 Junit 和 Maven 集成。

  • 同样基于 Java,GWT 对 Java 开发人员来说学习曲线较低。

  • GWT 生成优化的 javascript 代码,自动生成特定浏览器的 javascript 代码。

  • GWT 提供的部件库提供了应用程序中所需的大多数任务。

  • GWT 是可扩展的,可以创建自定义部件来满足应用程序需求。

  • 最重要的是,GWT 应用程序可以在所有主要的浏览器和智能手机上运行,包括基于 Android 和 iOS 的手机/平板电脑。

以下是 GWT 的缺点−

  • 不可索引− 由 GWT 生成的网页不会被搜索引擎索引,因为这些应用程序是动态生成的。

  • 不可降级− 如果您的应用程序用户禁用了 Javascript,则用户只会看到基本页面,而不会看到更多内容。

  • 对设计师不友好− GWT 不适合那些喜欢使用纯 HTML 并为以后插入动态内容预留占位符的网页设计师。

以下是 GWT 的核心组件−

  • GWT Java 到 JavaScript 编译器− 这是 GWT 最重要的部分,它使 GWT 成为构建 RIA 的强大工具。GWT 编译器用于将用 Java 编写的全部应用程序代码转换为 JavaScript。

  • JRE 模拟库− Google Web Toolkit 包含一个模拟 Java 运行时库子集的库。列表包括 java.lang、java.lang.annotation、java.math、java.io、java.sql、java.util 和 java.util.logging。

  • GWT UI 构建库− GWT 的这部分包含许多子部分,包括实际的 UI 组件、RPC 支持、历史管理等等。

  • GWT 托管 Web 浏览器− GWT 托管 Web 浏览器允许您在托管模式下运行和执行 GWT 应用程序,在托管模式下,您的代码在 Java 虚拟机中以 Java 形式运行,无需编译成 JavaScript。

一个 GWT 应用程序由以下四个重要部分组成,其中最后一个部分是可选的,但前三个部分是必须的−

  • 模块描述符

  • 公共资源

  • 客户端代码

  • 服务器端代码

模块描述符是以 XML 形式存在的配置文件,用于配置 GWT 应用程序。模块描述符文件扩展名为 *.gwt.xml,其中 * 是应用程序的名称,此文件应位于项目的根目录中。

它提供应用程序的名称。

它将其他 gwt 模块添加到应用程序中,就像 java 应用程序中的 import 一样。可以以这种方式继承任意数量的模块。

它指定将开始加载 GWT 应用程序的类的名称。

是的!可以添加任意数量的入口点类。

onModuleLoad() 函数会被调用,其作用类似于 java 应用程序的主方法。

它们按入口点类在模块文件中出现的顺序依次调用。因此,当第一个入口点的 onModuleLoad() 完成后,下一个入口点会立即被调用。

它指定 GWT 编译器将搜索源代码编译的源文件夹名称。

公共路径是您项目中存储 GWT 模块引用的静态资源(如 CSS 或图像)的位置。

默认公共路径是存储模块 XML 文件的目录下的 public 子目录。

自动注入位于 src 指定位置的外部 JavaScript 文件。

自动注入位于 src 指定位置的外部 CSS 文件。

模块入口点是任何可分配给 EntryPoint 且无需参数即可构造的类。加载模块时,会实例化每个入口点类,并调用其 EntryPoint.onModuleLoad() 方法。

它包含解决延迟绑定配置(例如,浏览器检测)和使用 GWT 编译器生成的查找表来定位 .cache.html 之一的 javascript 代码。

它包含 GWT 应用程序的实际程序。

以下是浏览器加载 GWT 应用程序时 GWT 应用程序引导过程的步骤−

  • 浏览器加载主机 html 页面和 .nocache.js 文件。

  • 浏览器执行 .nocache.js 文件的 javascript 代码。

  • .nocache.js 代码解决延迟绑定配置(例如,浏览器检测),并使用 GWT 编译器生成的查找表来定位 .cache.html 之一。

  • .nocache.js 代码然后创建一个 html 隐藏 iframe,将该 iframe 插入到主机页面的 DOM 中,并将 .cache.html 文件加载到同一个 iframe 中。

  • .cache.html 包含 GWT 应用程序的实际程序,加载到 iframe 后,在浏览器中显示 GWT 应用程序。

每次编译 GWT 应用程序时,GWT 编译器都会生成具有相同名称的 .nocache.js 文件。因此,浏览器应始终下载 .nocache.js 文件以获取最新的 gwt 应用程序。gwt.js 代码实际上在文件名末尾附加了一个唯一的 timestamp,以便浏览器始终将其视为一个新文件,并且永远不应该缓存它。

最重要的公共资源是主机页面,它用于调用实际的 GWT 应用程序。应用程序的典型 HTML 主机页面可能根本不包含任何可见的 HTML body 内容,但始终希望通过 <script.../> 标签包含 GWT 应用程序。

默认情况下,每个组件的类名称为 gwt-<classname>。例如,Button 部件的默认样式为 gwt-Button,类似地 TextBox 部件的默认样式为 gwt-TextBox。

不会!默认情况下,浏览器和 GWT 都不会为部件创建默认 id 属性。

此方法将清除任何现有的样式,并将部件样式设置为使用 style 提供的新 CSS 类。

此方法将为小部件添加一个辅助或从属样式名称。辅助样式名称是一个额外的样式名称,如果之前应用了任何样式名称,则会保留它们。

此方法将删除小部件中给定的样式,并保留与小部件关联的任何其他样式。

此方法获取对象的所有样式名称,以空格分隔的列表形式。

此方法设置对象的 primary 样式名称并更新所有从属样式名称。

默认情况下,小部件的主样式名称将是其小部件类默认样式名称。例如,Button 小部件的 gwt-Button。当我们使用 AddStyleName() 方法添加和删除样式名称时,这些样式称为辅助样式。

小部件的最终外观由添加到它的所有辅助样式以及其主样式的总和决定。您可以使用 setStylePrimaryName(String) 方法设置小部件的主样式。

有多种方法可以将 CSS 文件与您的模块关联。现代 GWT 应用程序通常使用 CssResource 和 UiBinder 的组合。

  • 在宿主 HTML 页面中使用 标签。

  • 在模块 XML 文件中使用 元素。

  • 使用 ClientBundle 中包含的 CssResource。

  • 在 UiBinder 模板中使用内联 元素。

UIObject 类是所有用户界面对象的超类。

  • UIObject 类是所有用户界面对象的超类。它只是包装了一个 DOM 元素,并且不能接收事件。它为像 Widget、MenuItem、MenuItemSeparator、TreeItem 这样的直接子类提供了支持。

  • 所有 UIObject 对象都可以使用 CSS 进行样式设置。

  • 每个 UIObject 都有一个主样式名称,用于标识应始终应用于它的关键 CSS 样式规则。

  • 可以通过操作对象的辅助样式名称来实现更复杂的样式行为。

Widget 类是大多数用户界面对象的基类。Widget 添加了从浏览器接收事件并直接添加到面板的支持。

此小部件包含文本,不解释为 HTML,使用

元素,导致它以块布局显示。

此小部件可以包含 HTML 文本,并使用

元素显示 html 内容,导致它以块布局显示。

此小部件在给定 URL 上显示图像。

此小部件表示一个简单的 元素。

Button 小部件表示一个标准的按钮。

PushButton 表示一个具有自定义样式的普通按钮。

ToggleButton 小部件表示一个时尚的有状态按钮,允许用户在向上和向下状态之间切换。

CheckBox 小部件表示一个标准的复选框小部件。此类也充当 RadioButton 的基类。

RadioButton 小部件表示一个互斥选择的单选按钮小部件。

ListBox 小部件以列表框或下拉列表的形式向用户显示一系列选项。

SuggestBox 小部件表示一个文本框或文本区域,它显示与用户输入匹配的预配置选项集。每个 SuggestBox 都与单个 SuggestOracle 关联。SuggestOracle 用于根据特定查询字符串提供选项集。

TextBox 小部件表示一个单行文本框。

PasswordTextBox 小部件表示一个文本框,它在视觉上掩盖其输入以防止窃听。

TextArea 小部件表示一个允许输入多行文本的文本框。

RichTextArea 小部件表示一个富文本编辑器,允许复杂的样式和格式化。

FileUpload 小部件包装了 HTML 元素。

Hidden 小部件表示 HTML 表单中的隐藏字段。

Tree 小部件表示一个标准的分层树小部件。树包含用户可以打开、关闭和选择的 TreeItem 层次结构。

MenuBar 小部件表示一个标准的菜单栏小部件。菜单栏可以包含任意数量的菜单项,每个菜单项可以触发命令或打开级联菜单栏。

DatePicker 小部件表示标准的 GWT 日期选择器。

CellTree 小部件表示树的视图。此小部件仅在标准模式下工作,这要求运行它的 HTML 页面具有显式的 声明。

CellList 小部件表示单元格的单列列表。

CellTable 小部件表示支持分页和列的表格视图。

CellBrowser 小部件表示树的可浏览视图,其中同一级别上一次只能打开一个节点。此小部件仅在标准模式下工作,这要求运行它的 HTML 页面具有显式的 声明。

布局面板可以包含其他小部件。这些面板控制小部件在用户界面上的显示方式。每个 Panel 小部件都继承了 Panel 类的属性,Panel 类又继承了 Widget 类的属性,Widget 类又继承了 UIObject 类的属性。

Panel 是所有面板的抽象基类,面板是可以包含其他小部件的小部件。

FlowPanel 小部件表示使用默认 HTML 布局行为格式化其子小部件的面板。

HorizontalPanel 小部件表示将所有小部件水平排列成单列的面板。

VerticalPanel 小部件表示将所有小部件垂直排列成单列的面板。

HorizontalSplitPanel 小部件表示一个面板,该面板将两个小部件水平排列成一行,并允许用户交互式地更改分配给这两个小部件的宽度比例。包含在 HorizontalSplitPanel 中的小部件在必要时将自动装饰滚动条。

VerticalSplitPanel 小部件表示一个面板,该面板将两个小部件垂直排列成一列,并允许用户交互式地更改分配给这两个小部件的高度比例。包含在 VertialSplitPanel 中的小部件在必要时将自动装饰滚动条。

FlexTable 小部件表示一个灵活的表格,可以按需创建单元格。它可以是锯齿状的(即,每一行可以包含不同数量的单元格),并且可以将各个单元格设置为跨越多行或多列。

Grid 小部件表示一个矩形网格,可以在其单元格中包含文本、html 或子 Widget。必须将其显式调整为所需的行列数。

DeckPanel 是一个面板,它以“叠放”的方式显示其所有子小部件,一次只能显示一个。它由 TabPanel 使用。

此小部件表示一个面板,该面板将其子小部件“停靠”在其外边缘,并允许其最后一个小部件占据其中心的剩余空间。

此小部件表示一个包含 HTML 的面板,并且可以将子小部件附加到该 HTML 中的已识别元素。

此小部件表示一个面板,该面板表示一组选项卡式页面,每个页面包含另一个小部件。当用户选择与其关联的不同选项卡时,将显示其子小部件。选项卡可以包含任意 HTML。

此小部件表示一种可以包装另一个小部件的小部件类型,隐藏包装小部件的方法。添加到面板时,复合小部件的行为与包装的小部件被添加时的行为完全相同。

SimplePanel 是仅包含一个小部件的面板的基类。

ScrollPanel 小部件表示一个简单面板,该面板将其内容包装在可滚动区域中。

FocusPanel 小部件表示一个简单面板,该面板使其内容可聚焦,并增加了捕获鼠标和键盘事件的功能。

此小部件表示一个面板,该面板将其内容包装在 HTML

元素中。

此小部件表示一个可以在其他小部件上弹出的面板。它覆盖浏览器的客户端区域(以及任何先前创建的弹出窗口)。

此小部件表示一种弹出窗口,其顶部有一个标题区域,用户可以拖动它。与 PopupPanel 不同,对 PopupPanel.setWidth(String) 和 PopupPanel.setHeight(String) 的调用将设置对话框本身的宽度和高度,即使尚未添加小部件。

GWT 提供了一个类似于 Java AWT 或 SWING 用户界面框架的事件处理程序模型。

监听器接口定义了一个或多个方法,小部件会调用这些方法来宣布事件。GWT 提供了一个与各种可能事件相对应的接口列表。

希望接收特定类型事件的类实现关联的处理程序接口,然后将对自身的引用传递给小部件以订阅一组事件。

例如,Button 类发布点击事件,因此您必须编写一个类来实现 ClickHandler 以处理点击事件。

所有 GWT 事件处理程序都扩展自 EventHandler 接口,并且每个处理程序只有一个带有单个参数的方法。此参数始终是关联事件类型的对象。每个事件对象都有一些方法来操作传递的事件对象。

GWT 提供三种创建自定义用户界面元素的方法。有三种通用的策略可供遵循:

  • 通过扩展 Composite 类创建小部件 这是创建自定义小部件最常见也是最简单的方法。在这里,您可以使用现有的小部件来创建具有自定义属性的复合视图。

  • 使用 GWT DOM API 在 JAVA 中创建小部件 GWT 基本小部件就是以这种方式创建的。但这仍然是一种创建自定义小部件非常复杂的方法,应谨慎使用。

  • 使用 JavaScript 并使用 JSNI 将其包装在小部件中 通常应仅在万不得已时才使用此方法。考虑到原生方法的跨浏览器影响,它变得非常复杂,并且也变得更难以调试。

  • UiBinder 是一个旨在分离用户界面功能和视图的框架。

  • UiBinder 框架允许开发人员将 GWT 应用程序构建为 HTML 页面,并在其中配置 GWT 小部件。

  • UiBinder 框架使与 UI 设计师的协作更加容易,因为 UI 设计师对 XML、HTML 和 CSS 比对 Java 源代码更熟悉。

  • UIBinder 提供了一种声明式的方式来定义用户界面。

  • UIBinder 将程序逻辑与 UI 分离。

  • UIBinder 类似于 JSP 与 Servlet 的关系。

  • RPC,远程过程调用是 GWT 使用的一种机制,客户端代码可以直接执行服务器端方法。

  • GWT RPC 基于 Servlet。

  • GWT RPC 是异步的,客户端在通信期间永远不会被阻塞。

  • 使用 GWT RPC,Java 对象可以直接在客户端和服务器之间发送(由 GWT 框架自动序列化)。

  • 服务器端 Servlet 称为服务。

  • 从客户端代码调用服务器端 Servlet 方法的远程过程调用称为调用服务。

以下是 GWT RPC 通信机制中使用的三个组件:

  • 在服务器上运行的远程服务(服务器端 Servlet)。

  • 用于调用该服务的客户端代码。

  • 将在客户端和服务器之间传递的 Java 数据对象。

  • GWT 客户端和服务器都会自动序列化和反序列化数据,因此开发人员无需序列化/反序列化对象,并且数据对象可以通过 HTTP 传输。

Java 数据对象应该实现 isSerializable 接口,以便能够在 GWT RPC 中通过网络传输。

国际化是一种在网站上显示特定于区域设置的信息的方式。例如,在美国以英语显示网站内容,在法国以丹麦语显示网站内容。

GWT 提供三种国际化 GWT 应用程序的方法:

  • 静态字符串国际化。

  • 动态字符串国际化。

  • Localizable 接口。

此技术最为普遍,在运行时需要很少的开销;对于翻译常量字符串和参数化字符串都是一种非常有效的技术;最易于实现。静态字符串国际化使用标准的 Java 属性文件来存储翻译后的字符串和参数化消息,并创建强类型 Java 接口来检索其值。

此技术非常灵活,但比静态字符串国际化慢。主机页面包含本地化字符串,因此当我们添加新的语言环境时,不需要重新编译应用程序。如果要将 GWT 应用程序与现有的服务器端本地化系统集成,则应使用此技术。

此技术是三种技术中最强大的。实现 Localizable 允许我们创建自定义类型的本地化版本。这是一种高级的国际化技术。

extend-property 标签,其属性名称设置为 locale,值设置为特定于语言的语言环境,例如 de 代表德语语言环境。

为了使用 GWT 历史记录支持,我们必须首先将以下 iframe 嵌入到我们的主机 HTML 页面中。

<iframe src="javascript:''" id="__gwt_historyFrame" style="width:0;height:0;border:0"></iframe>

日志框架模拟 java.util.logging,因此它使用与服务器端日志记录代码相同的语法并具有相同的行为。

GWT 日志记录是使用 .gwt.xml 文件配置的。

我们可以配置日志记录以启用/禁用;我们可以启用/禁用特定处理程序,并更改默认日志记录级别。

SystemLogHandler 将日志记录到标准输出,并且这些消息只能在 DevMode 窗口的开发模式下看到。

DevelopmentModeLogHandler 通过调用方法 GWT.log 进行日志记录。这些消息只能在 DevMode 窗口的开发模式下看到。

ConsoleLogHandler 将日志记录到 javascript 控制台,该控制台由 Firebug Lite(用于 IE)、Safari 和 Chrome 使用。

FirebugLogHandler 将日志记录到 Firebug 控制台。

PopupLogHandler 将日志记录到应用程序左上角的弹出窗口,当启用此处理程序时,该弹出窗口将显示。

此处理程序将日志消息发送到服务器,服务器将使用服务器端日志记录机制记录这些消息。

接下来是什么?

接下来,您可以回顾一下您之前完成的与该主题相关的作业,并确保您能够自信地谈论它们。如果您是应届毕业生,面试官不会期望您回答非常复杂的问题,而是您必须使自己的基础概念非常牢固。

其次,如果您无法回答一些问题,实际上并不重要,重要的是,无论您回答了什么,都必须充满自信地回答。因此,在面试过程中要保持自信。我们在 tutorialspoint 祝您面试顺利,并祝您未来的事业一切顺利。干杯 :-)

广告