快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

最好的体育网站排行_酒文化网进入



一、 小序

假如你是一个Java软件和Ajax开拓者,那么,Google Web Toolkit(GWT)应该已经引起你的关注。Google公司已经于2006年5月在Apache许可协议下宣布了这种免费的开拓对象包。GWT的设计目的是为了简化用Java说话开拓Ajax利用法度榜样。Google初始发行的beta版本可以适用于Windows和Linux平台,并许诺稍后要发行一个Mac OS X版本。

本文将探究在Mac OS X上应用GWT和认识的Java对象,例如Apache Ant,Tomcat 5.0 servlet容器和IntelliJ IDEA集成开拓情况开拓一个简单的Ajax利用法度榜样的完备历程。

二、 与GWT一路应用Ant

我下载的是GWT的Linux beta版本,并选用Java开拓利用法度榜样,然后应用一个Ant构建文件进行编译,着末在一个Tomcat 5.0实例上宣布该利用法度榜样。留意,这个Ant文件运行的是GWT Java-to-JavaScript编译器。着实,这个“编译器”只是一个履行一个GWT Java类的敕令行脚本,该Java类认真为利用法度榜样编写JavaScript。

应用GWT beta包括两种开拓要领:主机要领和web要领。

主机要领是应用一个嵌入式的GWT浏览器和中心开拓步骤;在这个要领中,你的编译代码继承运行于一个Java虚拟机(JVM)中。然而,主机要领无法利用于我们这些应用Linux版本操作系统的Mac OS X用户。只有Google发行了一个Mac OS X版本,我们才可以应用主机要领。

三、 不相助风的Web开拓

在创建远程历程调用(RPC)办事的同时,本文将具体评论争论一些范例的GWT开拓者可能面对的web开拓有关的义务。RPC是一个软件模型的一部分,主要为应用面向办事的架构(SOA)的利用法度榜样而设计。这些开拓义务包括:

应用一个构建文件(构建运行GWT编译器,然后宣布编译器的输出,并且把你的办事器真个Java类文件宣布到一个servlet容器,例如Tomcat,Jetty或Resin)来自动化开拓和宣布步骤。

应用Firefox的DOM Inspector来察看由该GWT利用法度榜样天生的HTML。

从新设置页面中的各部件而不必存取内在的HTML(既然你在应用GWT的Java API)。

确保HTML是有效的标记,例如,你的组织可能必要基于一个特其余XHTML文档类型。

四、 办事功能

首先,我将简短描述本文示例利用法度榜样要创建的办事,设计这个示例是为了展示GWT应用的模型。

该利用法度榜样在浏览器中显示一个表单,要求用户输入他们的姓名、年岁和原籍国家。当用户经由过程点按按钮提交表单时,该利用法度榜样在一个文本域中显示一个办事器相应,而不必初始化一个页面刷新。图1显示了在Safari浏览器中该利用法度榜样看上去的样子。

图1.一个由GWT天生的简单视图

例如,当用户保留一个文本框为空而点击OK,Submit按钮时将显示出图2所示结果。

图2:该利用法度榜样用血色显示一条差错消息

五、 奇妙的办事机制

在Ajax利用法度榜样中应用RPC可以打消显式地处置惩罚XMLHttpRequest和相关的办事器返回值的需要性,由于GWT工具能够为你处置惩罚繁杂义务。

你的利用法度榜样定义的每个办事都要求实现两个Java接口和一个Java类。为了编译这些类,你必须确保gwt-user.jar库位于你的classpath(由一个Ant文件进口认真实现这项义务)中。下列代码示例展示了定义我们的办事的Java接口。

package com.parkerriver.gwt.testapp.client;

import com.google.gwt.user.client.rpc.RemoteS最好的体育网站排行ervice;

public interface ShowRespService extends RemoteService{

String displayResponse(String req);

}

这个办事接口要求扩展GWT接口RemoteService。它定义了单个措施displayResponse()。

别的,你还必须定义一个客户端(或应用终极下载的JavaScript代码)用于调用这个办事措施的接口。当我显示客户端代码时(请参考MyForm.java),该GWT应用一个我描述的回调设计模式。

package com.parkerriver.gwt.testapp.client;

import com.google.gwt.user.client.rpc.AsyncCallback;

public interface ShowRespServiceAsync {

public void displayResponse(String s,AsyncCallback callback);

}

这个AsyncCallback工具认真(作为GWT API的一部分)为客户端处置惩罚办事相应。

六、 一个Servlet

着末,你必须定义一个实现远程办事接口的Java类。这个类将位于你的Ajax利用法度榜样的办事器端。

package com.parkerriver.gwt.testapp.server;

import com.parkerriver.gwt.testapp.client.ShowRespService;

import com.google.gwt.user.server.rpc.RemoteServiceServlet;

import java.util.Date;

public class ShowRespServiceImpl extends RemoteServiceServlet

implements ShowRespService {

public String displayResponse(String req) {

if(req.length() < 1) {

throw new IllegalArgumentException(

"Blank submissions from the client are invalid.");

}

StringBuffer buf = new StringBuffer("Your submission: ");

Date date = new Date();

String serverInfo = this.getServletContext().getServerInfo();

buf.append(req);

buf.append("\n");

buf.append("Server response: ");

buf.append(date.toString());

buf.append("\n");

buf.append(serverInfo);

return buf.toString();

}

}

这个类必须承袭RemoteServiceServlet(这是本身承袭自javax.servlet.http.HttpServlet的一个GWT API工具)。也便是说,这个类及着实现的接口必须被宣布到你的servlet容器中。

七、 步骤

现在,既然定义了办事,那么让我们往返首一个这个利用法度榜样的目录布局。GWT包括一个敕令行脚本applicationCreator,它能够为你天生一个框架性的工程目录布局。在你解压下载的GWT后,你会在顶级目录下发明该applicationCreator。我应用下列敕令行作为开最好的体育网站排行始:

applicationCreator -out /Users/bruceperry/1gwt/secondapp/ com.parkerriver.gwt.testapp.client.MyForm

图3展示了该目录看上去的样子。

图3:一个GWT和IntelliJ工程目录

applicationCreator天生./src目录以及MyForm-compile和MyForm-shell脚本。我的Ant文件履行的是MyForm-compile;另一个脚本将在GWT模式下启动主机要领。这个./src目录中包括了嵌套的目录以匹配你的包名,如图4所示。

图4.一个GWT利用法度榜样的Java包和模块

MyForm.gwt.xml文件是一个天生的设置设置设备摆设摆设文件,它着实是GWT调用的一个“模块”。它指定描述你的利用法度榜样“进口点”的Java类(这是一个类似于一个包孕一个main()措施的Java类)。

<module>

<!—承袭核心Web Toolkit。-->

<inherits name='com.google.gwt.user.User'/>

<!--指定利用法度榜样进口点类。-->

<entry-point class='com.parkerriver.gwt.testapp.client.MyForm'/>

</module>

其它的文件或目录,包括./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="us最好的体育网站排行e 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察看后台实现内容。

上图显示了,你在Java代码中应用的com.google.gwt.user.client.ui.Grid工具被实现为一个HTML table标签。这个tab最好的体育网站排行le中的包孕OK,Submit按钮的TD标签与一个style属性(其值为"verticle-align:top")相关联。

下面是在MyForm.java类中相关的初始化适当款式的Java代码:

//设置OK按钮单元格的垂直位置

grid.getCellFormatter().setVerticalAlignment(3,0,

HasVerticalAlignment.ALIGN_TOP);

假如在代码中不进行这个调用,那么该按钮可能会在文本域的中心部分高低浮动。

十四、 总结

Google公司宣布的Google Web Toolkit(GWT)已经引起业界的普遍关注。既然GWT的设计目的是为了简化用Java说话开拓Ajax利用法度榜样,而Ajax是Web 2.0期间的技巧根基,以是GWT发行所引起的轰动应该在料想之中。

本文仅给出应用GWT和认识的Java对象开拓一个简单的Ajax利用法度榜样的示例,而有关GWT的更多的商量刚刚开始,还依附于广大年夜读者的努力。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: