从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>