龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > Javascript编程 >

使用GWT开发AJAX应用程序(1)(2)

时间:2013-03-06 14:58来源:未知 作者:admin 点击:
分享到:
其它的文件或目录,包括./classes、./WEB-INF和./gwtproj.ipr,都是一个IntelliJ Web应用程序工程的必要组成部分;因此,你不必特别注意它们。 另外,直到生成你
其它的文件或目录,包括./classes、./WEB-INF和./gwtproj.ipr,都是一个IntelliJ Web应用程序工程的必要组成部分;因此,你不必特别注意它们。

另外,直到生成你的应用程序代码的GWT编译器时,./www目录才出现(除非你自己创建它)。我的工程使用了Ant文件gwtproj.xml,还有定义在gwtproj.properties中的属性。在我向你展示Ant构建文件前,我们先来看一下描述应用程序入口点的MyForm.java类。

八、入口点
这个MyForm.java类实现了GWT API接口EntryPoint;因此,该类必须实现onModuleLoad()方法,当浏览器加载你的Ajax应用程序时此方法为浏览器的JavaScript引擎所调用。

也就是说,GWT编译器把这个类编译成JavaScript代码。MyForm.java类为浏览器视图建立表单widget。该类还决定了点击OK和Submit按钮时用户的响应。代码中的注释已经作了详细的描述,所以在此不再多言。

注意,这个类中的大部分代码是处理GWT API。有意思的是,如果你必须实现JavaScript DOM编程(就象在showRpcStatus()方法中所展示的),那么你可以用Java来实现com.google.gwt.user.client.DOM类。

九、构建文件

下面是Ant构建文件的主要功能;这个构建文件:

1. 把Java文件编译到工程目录的./classes目录下。

2. 执行GWT编译脚本(在这个例子中是MyForm-compile)。

3. 把在./www目录下生成的结果代码移动到一个较大的已经发布到Tomcat上的web应用程序。

4. 把编译的Java servlet及相关接口(ShowRespService)复制到同一个web应用程序下。

注意,这里的两个目标:编译Java类和初始化到JavaScript的转换有可能使整个构建过程失败,如果期间发生任何错误的话。

十、Ant XML

下面是gwtpoj.properties文件包含的内容(省略了其它的内容):

web.deploy.location=/users/bruceperry/parkerriver/gwt
web.classes.location=/users/bruceperry/parkerriver/WEB-INF/classes

下列XML描述了刚才的Ant文件的主要功能:

<?xml version="1.0" encoding="UTF-8"?>
<project name="gwtproj" default="all">
<property file="gwtproj.properties"/>
<!―工程的顶级目录与ant文件存在的位置-->
<dirname property="module.gwtproj.basedir" file="${ant.file}"/>
<!--目录在顶级目录内的./classes-->
<property name="gwtproj.output.dir" value=
"${module.gwtproj.basedir}/classes"/>
<!--这个目标调用MyForm-compile以创建./www目录下的所有的内容-->
<target name="gwt-compile" depends=
"compile.production.classes"
description="use gwt's compiler">
<delete>
<fileset dir="${web.deploy.location}" includes="**/*"/>
</delete>
<exec executable=
"${module.gwtproj.basedir}/MyForm-compile"
failonerror="true"/>
<copy todir="${web.deploy.location}">
<fileset dir=
"${module.gwtproj.basedir}/www">
</fileset>
</copy>
</target>
<target name="compile.production.classes" description=
"Compile the gwtproj production classes">
<mkdir dir="${gwtproj.output.dir}"/>
<javac destdir="${gwtproj.output.dir}" debug=
"on" failonerror="true" nowarn=
"off" memoryMaximumSize="128m" fork=
"true" executable="${module.jdk.home.gwtproj}/bin/javac">
<classpath refid="gwtproj.module.classpath"/>
<src refid="gwtproj.module.sourcepath"/>
</javac>
</target>
<!--把Java servlet类复制到web应用程序-->
<target name="deploy.classes" depends="gwt-compile"
description="copy classes to web directory">
<copy todir="${web.classes.location}">
<fileset dir="${gwtproj.output.dir}">
</fileset>
</copy>
</target>
<target name="all" depends="deploy.classes"
description="build all"/>
</project>

你可以从IDE(在IntelliJ中)中或在包含该构建文件的目录下使用下列命令行来运行这个Ant文件:
ant -buildfile gwtproj.xml

大部分情况下,在修改应用程序和运行Ant后,你都可以通过重载浏览器页面而在浏览器中看到这些变化。

十一、 安装
注意,在安装时,你必须把gwt-user.jar库添加到你的web应用程序的/WEB-INF/lib目录下。

我把创建的JAR文件,还有javax包(gwt-user-deploy.jar)都添加到/WEB-INF/lib目录下。这是因为Tomcat不会加载单个的web应用程序的库文件,如果它已经包含servlet API类的话。

十二、 难点

applicationCreator还会为你创建Ajax应用程序的HTML前端,在这个例子中是MyForm.html。

如果你的应用程序的HTM必须满足一种标准(例如XHTML Transitional 或Strict),那么该怎么办呢?对于XHTML transitional,我首先把要求的DOCTYPE添加到MyForm.html的顶部以及该html标签的相关属性中:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

然后,我把MyForm.html上传到WWW协会的HTM验证程序(位于http://validator.w3.org/)。

在运行该验证程序后,我略微修改了一下该HTML,例如适当关闭meta标签并且把一个type="text/javascript"添加到脚本标签。

然而,如果你想满足XHTML Strict标准,那么还需要进行更为复杂的修改。例如,W3C的验证程序将把iframe标签显示为“undefined element”,而这个标签是GWT的历史支持功能(提供与一个浏览器back按钮相同的功能)必需的。XHTML Strict中已经删除了iframe元素。

这个对你来说可能不是个问题(可能会在GWT的未来版本中得到解决,还有任何其它明显的问题);然而,你还可以实现其它可选策略,例如扩展GWT的类并创建你自己的兼容widget等。

十三、 位置对齐问题

一个在web开发中普通存在的问题就是应用程序的可视化设计问题。工程的设计者可能想使页面看上去如其在Adobe Illustrator创建一样的效果,对不对?

尽管当你开发一个复杂的Ajax工程时你可能无法实现这种理想的视觉效果;但是,你至少可以使用Firefox的DOM Inspector来观察你的Java类最终生成的HTML。然后,再从这里进行修改。

例如,转到Firefox的“Tools=>DOM Inspector”菜单项(见图5)。


图5:使用DOM Inspector观察后台实现内容。
精彩图集

赞助商链接