准备用GAE搭建一个网站,而Java做网站最熟悉的就是Struts2,于是乎挽起袖子干起来。
然后没想到遇到了很多问题,现将过程记录如下,注意事项用红字标出。
环境与版本:WindowsXP + JDK1.6.0_30 + Eclipse 4.2 + Google 开发插件 + AppEngine SDK 1.7.4 + Struts2.3.8
1、首先把以上全部下载下来,依次装上JDK,Eclipse,Google插件
如果eclipse在线不能装Google的插件(原因你懂的),可以下载离线版的升级包,官方的下载页面如下:
JDK:http://www.oracle.com/technetwork/indexes/downloads/index.html#menu-downloads
Eclipse:http://www.eclipse.org/downloads/
Google插件:https://developers.google.com/eclipse/docs/install-from-zip
AppEngine SDK:https://developers.google.com/appengine/downloads#Google_App_Engine_SDK_for_Java
Struts2:http://struts.apache.org/
2、 用Google插件创建一个工程,点击“New Web Application Project”,去掉Use Google Web Toolkit(GWT,一个用Java写Javascript的工具,要用就勾上)。
如果没有注册过AppEngine的SDK,就点击Configure SDKs,将AppEngine的SDK解压后,add SDK选择解压的路径,如下图:
3、创建GAE项目完毕,开始加入Struts2。首先创建一个用户库,方便以后编译项目的时候不用一个jar包一个jar包加。
在Window->Preferences->Java->Build Path->User Libraries,点击New,取个名然后选择项目会用到的Struts2的Jar包,我加了这些:
commons-fileupload-1.2.2.jar,
commons-io-2.0.1.jar
commons-lang3-3.1.jar
commons-logging-1.1.1.jar
freemarker-2.3.19.jar
javassist-3.11.0.GA.jar
ognl-3.0.6.jar
struts2-core-2.3.8.jar
xwork-core-2.3.8.jar。
然后对你的项目点击右键->Build Path-> Configure Build Path->Libraries页签,加入刚才建的用户库
但这还不够,Eclipse对于用户库里的Jar包是不会自动拷贝到部署位置的,所以还要以上的Jar包手动拷贝到项目的WEB-INF\lib下。
要不启动了之后会报错。
4、为了关闭权限的检查,在web.xml里加入一个Listener,内容如下(包名自己起):
package com.zr.app;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import ognl.OgnlRuntime;
public class StrutsAppEngineAdapter implements ServletContextListener {
public void contextInitialized(ServletContextEvent servletContextEvent) {
OgnlRuntime.setSecurityManager(null);
}
public void contextDestroyed(ServletContextEvent servletContextEvent) {
}
}
web.xml里:
<listener>
<listener-class>com.zr.app.StrutsAppEngineAdapter</listener-class>
</listener>
注意事项:如果在struts.xml里,选的是<constant name="struts.devMode" value="true" />,那么这么做还是不够的,
还需要调用System.setSecurityManager(null);
5、还需要创建一个包freemarker.core,并加一个TextBlock类,貌似freemarker的jar包也有这个类,但是由于权限的TreeNode是个受限制的类无法访问,所以要在自己的项目中把源码复制过来建同名的类,源码在这里下载:TextBlock
6、到了这里,应该可以运行Struts应用了,至于Struts框架的使用,这里不再赘述。
7、其他的一些坑:xml的第一行不能是空行,struts.xml文件名不能写错,且必须放在src根目录下
8、对于编码问题,我个人是全都设置为UTF-8,毕竟这个最通用。
方法是:
1) Window->Preferences->General->Workspace, Text file encoding选择Other,改成UTF-8
2) Window->Preferences->Web-,把CSS、HTML、JSP、JavaScript、 XML等都设置为UTF-8
至此,总算应该能跑起来最简单的应用了