BK863

Friday, August 18, 2006

Tomcat整合GWT

本篇介绍如何通过打包为war文件在Tomcat中装载GWT的应用程序。
需要Google Web Toolkit(GWT) 1.1.0

预准备:制作不含javax的gwt-user.jar包
  • 用zip解压gwt-user.jar文件到空目录thisistmp下
  • 在thisistmp目录下执行 jar cvfm gwt-user-good.jar META-INF/MANIFEST.MF -C * .
  • 复制新制作的gwt-user-good.jar到WEB-INF/lib下
所有需要做的就是以下几点(均由ant的build.xml文件完成):
  1. 在www目录下建立tomcat需要的目录结构 (由ant 的createdir任务来完成)
  2. ${appname}-compile编译生成client部分的javascript代码(由gwt-compile任务来完成)
  3. javac编译所有可能需要的server部分的servlet的class文件,并放到www目录的WEB-INF/classes下
  4. 制作不含javax的gwt-user.jar包,置于WEB-INF/lib下,deploy后会被tomcat加载
  5. www目录整个打成war包
  6. deploy到tomcat
下面列出的build.xml和web.xml文件是需要修改的部分,其余部分都以gwt自带的DynaTable为例。
把修改后的这两个文件放到samples/DanaTable下后,就可以执行ant  warfile来生成war文件了。
需要修改的部分在代码中用=====XXXXX来表示。

  • mainclass就是用applicationCreator 创建的时候写的class name;
  • name是应用程序名,即${name}-compile里出现的名字
  • commonlib.home是tomcat的所在目录,需要里面的servlet-api.jar, gwt-user.jar并不需要放在那里,因为前面已经手动重新生成不带javax的gwt-user.jar
  • 如果在windows下,${name}-compile要改为相应的批处理文件名
  • 因为gwt自动生成的tomcat目录是为host-mode创建的,它本身不包含我们要创建的war包需要的web.xml文件,下面会附带根据DynaTable需要的service而修改的web.xml,放置于应用程序目录下后由ant自动拷贝到www/WEB-INF/下



<?xml version="1.0" encoding="ISO-8859-1"?>
<project name="gwtproj" default="warfile">
<property name="mainclass" value="com.google.gwt.sample.dynatable.DynaTable====XXXXX" />
<property name="name" value="DynaTable====XXXXX" />

<property name="tomcat.url" value="http://localhost:8080" />
<property name="tomcat.username" value="admin" />
<property name="tomcat.password" value="admin" />

<property name="src.dir" value="src" />
<property name="web.dir" value="www" />
<property name="build.dir" value="${web.dir}/WEB-INF/classes" />
<property name="commonlib.home" value="/usr/share/tomcat-5.5/====XXXXX" />


<path id="master-classpath">
<fileset dir="${web.dir}/WEB-INF/lib">
<include name="*.jar" />
</fileset>
<fileset dir="${commonlib.home}/common/lib">
<include name="servlet*.jar" />
</fileset>
<pathelement path="${build.dir}" />
</path>

<target name="createdir" description="create nessary directories">
<mkdir dir="${web.dir}/WEB-INF/" />
<mkdir dir="${web.dir}/WEB-INF/lib" />
<mkdir dir="${web.dir}/WEB-INF/classes" />
</target>

<target name="build" depends="createdir,gwt-compile" description="Compile main source tree java files">
<mkdir dir="${build.dir}" />
<javac destdir="${build.dir}" debug="true" deprecation="false" optimize="false" failonerror="true">
<src path="${src.dir}" />
<classpath refid="master-classpath" />
</javac>
</target>

<target name="gwt-compile" description="use gwt's compiler">
<exec executable="./${name}-compile====XXXXX" failonerror="true" />
<copy todir="${web.dir}">
<fileset dir="${web.dir}/${mainclass}/" includes="**/*">
</fileset>
</copy>
<delete dir="${web.dir}/${mainclass}">
</delete>
</target>

<target name="warfile" depends="build" description="create war file">
<copy todir="${web.dir}/WEB-INF/">
<fileset file="web.xml">
</fileset>
</copy>
<war destfile="${name}.war" webxml="${web.dir}/WEB-INF/web.xml">
<fileset dir="${web.dir}">
<include name="**/*.*" />
</fileset>
</war>
</target>
</project>




<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>calendar====XXXXX</servlet-name>
<servlet-class>
com.google.gwt.sample.dynatable.server.SchoolCalendarServiceImpl====XXXXX
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>calendar====XXXXX</servlet-name>
<url-pattern>/calendar====XXXXX</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsf</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
<welcome-file>DynaTable.html====XXXXX</welcome-file>
</welcome-file-list>
</web-app>

0 Comments:

Post a Comment

<< Home