从Host Model到 Web Model

在Host Model方式下,GWT并不将Java代码编译为JavaScript,而是在GWT环境中直接运行Java bytecode,

但是项目正式部署之后使用的是Web Model,那么如何从Host Model迁移到Web Model呢?


首先需要将Java代码编译为JavaScript代码。

使用如下命令可以将Java代码编译为JavaScript代码:

java -cp "%~dp0\src;%~dp0\bin;%~dp0\../../gwt-user.jar;%~dp0\../../gwt-dev-windows.jar" com.google.gwt.dev.GWTCompiler -out "%~dp0\www" %* com.google.gwt.sample.hello.Hello


-cp 指定源代码目录,Class目录,和GWT的jar文件的路径

-out 指定JavaScript代码的输出路径

com.google.gwt.sample.hello.Hello 指定编译的Module,一般是gwt.xml文件中entry-point类去掉client之后的内容。


当代码量比较大的时候,需要指定Java使用内存的大小,否则会内存溢出。

java -Xmx512m -Xms128m -cp "%~dp0\src;%~dp0\bin;%~dp0\../../gwt-user.jar;%~dp0\../../gwt-dev-windows.jar" com.google.gwt.dev.GWTCompiler -out "%~dp0\www" %* com.google.gwt.sample.hello.Hello


之后将编译成的JavaScript代码拷贝到Web项目的根目录中,与WEB-INF相同层次的目录。


最后需要将gwt.xml文件中定义的service编程对应的Servlet。

<servlet path='/calendar' class='com.google.gwt.sample.dynatable.server.SchoolCalendarServiceImpl'/> 



=> 



<servlet> 


 <servlet-name>Calendar</servlet-name> 


 <servlet-class>com.google.gwt.sample.dynatable.server.SchoolCalendarServiceImpl</servlet-class> 


</servlet> 



<servlet-mapping> 


 <servlet-name>Calendar</servlet-name> 


 <url-pattern>/calendar</url-pattern> 


</servlet-mapping>