Welcome

首页 / 软件开发 / JAVA / 在Google App Engine中使用Struts2框架

在Google App Engine中使用Struts2框架2009-11-09 javaeye yongpei"GAE"(Google App Engine)在早些时候发布了Java语言的支持,对广大的Java开发者来说,可以使用自己熟悉的语法来进行开发,是很舒服的一件事情。Java世界中有大量已有的工具和框架,有一些是我们日常工作中就已经熟练使用的、而且广为流行的成熟的,如果能够直接在GAE中使用,将大大提高我们的开发效率。

这几天利用Struts2,在GAE的Java版本支持环境中,写了个简单博客,现在将GAE+Struts2的组合经验,记录下来。

背景介绍

Python是一门有趣的语言,是作者第二个接触的动态脚本语言。第一个是大学时期做学生网站时期接触到Perl,后来工作后利用Perl改写了公司的应用程序启动框架;几年后,由于Perl的语法实在是太过于羞涩难懂,便使用Python对启动框架进行了一次升级。Python是面向对象的,同时也兼备了函数式编程的支持,另外,Python的语法强制缩进,非常容易读懂,因此Python版本的启动框架对公司的Java开发者来说,也不难维护。

当然,这些都是题外话,GAE最先提供的是Python语言的支持,但是对我们Java开发者来说,要使用Python来进行大的应用开发,还比较痛苦的一件事情。这时候GAE推出Java语言的支持,既是所有Java开发人员的福音,也是理所当然的一件事情,Google不可能放弃目前企业应用开发领域里面最大的一股力量。

Struts2是目前应用最广泛的WEB开发框架,也是大部分的Java开发者最熟悉的开发框架,我们的GAE应用程序中,使用成熟的Struts2可以减少很多额外的开发工作。

所需的Struts的库文件

目前Struts2的稳定版本是2.1.6,将下面的来自Struts-2.1.6的发行包的几个包,引入你的GAE项目工程中:

commons-fileupload-1.2.1.jar

commons-io-1.3.2.jar

commons-logging-1.0.4.jar

commons-logging-api-1.1.jar

freemarker-2.3.13.jar

ognl-2.6.11.jar

struts2-core-2.1.6.jar

xwork-2.1.2.jar

如果你使用IDEA来创建项目,只要选择Struts的2.1.6版本的支持,IDEA会自动帮你引入所需要的库文件。

为App Engine定制你的Struts

GAE里面的Servlet环境有一定的限制,不能使用线程(Thread),不能使用文件,还有别的一些要注意的地方。

首先,要加一个ServletContextListener的实现,在context初始化的时候,调用OgnlRuntime.setSecurityManager(null),让Struts可以在GAE环境里面正常跑起来:

package your.servlet.pkg;

import ognl.OgnlRuntime;

import javax.servlet.ServletContextListener;
import javax.servlet.ServletContextEvent;

public class StrutsAppEngineAdapter implements ServletContextListener {
public void contextInitialized(ServletContextEvent servletContextEvent) {
OgnlRuntime.setSecurityManager(null);
}

public void contextDestroyed(ServletContextEvent servletContextEvent) {
}
}

在web.xml中配置这个ServletContextListener的实例:

<web-app>
<listener>
<listener-class>your.servlet.pkg.StrutsAppEngineAdapter</listener-class>
</listener>
</web-app>

做完上面的工作之后,就可以在你的GAE里面使用Struts的功能了!