I am new to GWT and learning it via the the Google documents. How do I setup GWT with Tomcat? I am required to intergrate it with Tomcat for work purposes.
There is nothing special to do. You just have to compile your gwt project, and export the war folder to the Tomcats webapps folder.
What IDE are you using? If you are using eclipse or similar, and a newer version of tomcat, just export the contents of the war folder as a regular zip archive. Then change the extension from .zip to .war, and copy it to the webapps folder. Restart tomcat, and it will automatically unzip the archive and create the appropriate folder. I.E. the contents of the .war archive might look something like the following:
project_name.war
- css
- images
- WEB-INF
- gwt compiled_javascript folder
- index.html
A more convenient method to run GWT in Development mode on external tomcat server is as follows. It involves two parts
I will be using following paths and names in this example
First step is to point tomcat to war dir of GWT project. One method to run GWT on external server is to copy static, image files and gwt dir to tomcat/webapps dir. On any changes in server side classes (like rcp etc) or static files we have to copy them again. This will be cumbersome during develpment cycle. Instead we can point tomcat to project's war directory so that tomcat runs the app directly from eclipse workspace. On any changes in project tomcat will do a reload.
To do this, add <appname>.xml (Fins.xml in this example) to $CATALINA_HOME/conf/Catalina/localhost with following content
<Context path="/Fins" docBase="/home/m/workspace/fins/war" reloadable="true"> </Context>
This is actually context.xml file found in META-INF of tomcat application but named as <appname>.xml. In case project use any JNDI datasources, they have to be added to this file.
Now start tomcat. Check that application runs properly. Make some change in eclipse and app will be reload by tomcat. Cross verify the same in tomcat logs.
Now to second part. We can use GWT code sever feature as detailed in GWT Debug
To do this go to "Run As" option in project context menu and select "Web Application (Running on external server)". Enter external server root as Fins and give html page as Fins.html. This will run the GWT app in development mode without running embedded Jetty server.
But it will still point to http://localhost:8888/Fins/Fins.html
. We have to edit Run configuration to change Jetty port 8888 to tomcat's 8080.
Go to run configurations and select Fin.html (external). Change browser field in GWT tab to http://localhost:8080/Fins/Fins.html
Run and access the app at
http://localhost:8080/Fins/Fins.html?gwt.codesvr=127.0.0.1:9997
Now you will be able to use GWT development mode fully.
I use GWT-SDK webAppCreator command (from terminal) and it generates all the files required to run on an external server like Tomcat.
I will provide the steps i followed in order to help others begin with simple GWT-TOMCAT development
TOMCAT
GWT
Congratulations!
I use GWT with Tomcat in hosted mode. I modify ant file generated by WebAppCreator to do the next(target to run-> hosted):
You must restart manually Tomcat
<?xml version="1.0" encoding="utf-8" ?>
<project name="app" default="build" basedir=".">
<property name="tomcat.home" value="C:/Program Files/Apache Software Foundation/Tomcat 7.0" />
<!-- Arguments to gwtc and devmode targets -->
<property name="gwt.args" value="" />
<!-- Configure path to GWT SDK -->
<property name="gwt.sdk" location="D:/Instaladores/gwt-2.3.0" />
<path id="project.class.path">
<pathelement location="war/WEB-INF/classes"/>
<pathelement location="${gwt.sdk}/gwt-user.jar"/>
<fileset dir="${gwt.sdk}" includes="gwt-dev*.jar"/>
<!-- Add any additional non-server libs (such as JUnit) -->
<fileset dir="war/WEB-INF/lib" includes="**/*.jar"/>
</path>
<target name="libs" description="Copy libs to WEB-INF/lib">
<mkdir dir="war/WEB-INF/lib" />
<copy todir="war/WEB-INF/lib" file="${gwt.sdk}/gwt-servlet.jar" />
<copy todir="war/WEB-INF/lib" file="${gwt.sdk}/gwt-servlet-deps.jar" />
<!-- Add any additional server libs that need to be copied -->
</target>
<target name="javac" depends="libs" description="Compile java source to bytecode">
<mkdir dir="war/WEB-INF/classes"/>
<javac srcdir="src" includes="**" encoding="utf-8"
destdir="war/WEB-INF/classes"
source="1.5" target="1.5" nowarn="true"
debug="true" debuglevel="lines,vars,source">
<classpath refid="project.class.path"/>
</javac>
<copy todir="war/WEB-INF/classes">
<fileset dir="src" excludes="**/*.java"/>
</copy>
</target>
<target name="mywar" depends="javac,clean" description="Copy war folder">
<!-- deploy war folder without compile java to js -->
<copy todir="${tomcat.home}/webapps/app">
<fileset dir="${basedir}/war"/>
</copy>
<chmod perm="a+w">
<dirset dir="${tomcat.home}/webapps/app/files" />
</chmod>
</target>
<target name="gwtc" depends="javac" description="GWT compile to JavaScript (production mode)">
<java failonerror="true" fork="true" classname="com.google.gwt.dev.Compiler">
<classpath>
<pathelement location="src"/>
<path refid="project.class.path"/>
<pathelement location="D:/Instaladores/gwt-2.3.0/validation-api-1.0.0.GA.jar" />
<pathelement location="D:/Instaladores/gwt-2.3.0/validation-api-1.0.0.GA-sources.jar" />
</classpath>
<!-- add jvmarg -Xss16M or similar if you see a StackOverflowError -->
<jvmarg value="-Xmx512M"/>
<arg line="-war"/>
<arg value="war"/>
<!-- Additional arguments like -style PRETTY or -logLevel DEBUG -->
<arg line="${gwt.args}"/>
<arg value="com.app.App"/>
</java>
</target>
<target name="devmode" depends="mywar" description="Run development mode">
<java failonerror="true" fork="true" classname="com.google.gwt.dev.DevMode">
<classpath>
<pathelement location="src"/>
<path refid="project.class.path"/>
<pathelement location="D:/Instaladores/gwt-2.3.0/validation-api-1.0.0.GA.jar" />
<pathelement location="D:/Instaladores/gwt-2.3.0/validation-api-1.0.0.GA-sources.jar" />
</classpath>
<jvmarg value="-Xmx256M"/>
<arg value="-startupUrl"/>
<arg value="http://localhost:8080/app/App.html"/>
<arg line="-war"/>
<arg value="war"/>
<!-- Additional arguments like -style PRETTY or -logLevel DEBUG -->
<arg line="${gwt.args}"/>
<arg value="com.app.App"/>
<arg value="-noserver"/>
</java>
</target>
<target name="hosted" depends="devmode" description="Run development mode (NOTE: the 'hosted' target is deprecated)" />
<target name="build" depends="gwtc" description="Build this project" />
<target name="war" depends="build" description="Create a war file">
<zip destfile="${tomcat.home}/webapps/app.war" basedir="war"/>
</target>
<target name="clean" description="Cleans this project">
<delete dir="${tomcat.home}/webapps/app" />
</target>
</project>