在Google App Engine中利用Struts2框架
当前位置:以往代写 > JAVA 教程 >在Google App Engine中利用Struts2框架
2019-06-14

在Google App Engine中利用Struts2框架

在Google App Engine中利用Struts2框架

副标题#e#

"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的成果了!


#p#副标题#e#

定制GAE的常用工具的Converter

Struts提供了Converter的机制,让你常用的业务工具可以直接在页面中显示,可能接管范例为业务工具的请求数据。GAE内里常用的一些工具,界说了对应的Converter之后,可以是业务代码越发简捷。下面先容两个常用工具的Converter的代码:

TextConverter, 是针对com.google.appengine.api.datastore.Text工具的转换器,Text是GAE的存储中,大文本内容的生存工具,在业务中很常用。先来看看TextConverter大的代码:

package your.servlet.pkg;

import com.google.appengine.api.datastore.Text;
import ognl.DefaultTypeConverter;

import java.util.Map;

public class TextConverter extends DefaultTypeConverter {
  @Override
  public Object convertValue(Map map, Object o, Class toType) {
    if (toType == Text.class) {
      String value = ((String[]) o)[0];
      return new Text(value);
    } else if (toType == String.class) {
      Text text = (Text) o;
      return text.getValue();
    }

    return null;
  }
}

TextConverter的浸染主要是用于在WEB页面中,直接显示存储工具中的大文本内容。

#p#分页标题#e#

别的一个是KeyConverter,是对com.google.appengine.api.datastore.Key工具的转换器,Key是GAE中三种主键(Long,String,Key)的一种,在吸收请求数据以及页面显示的时候,会常常用到。直接看代码:

package your.servlet.pkg;

import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.KeyFactory;
import ognl.DefaultTypeConverter;

import java.util.Map;

public class KeyConverter extends DefaultTypeConverter {
  @Override
  public Object convertValue(Map map, Object o, Class toType) {
    if (toType == Key.class) {
      String s = ((String[]) o)[0];
      return KeyFactory.stringToKey(s);
    } else if (toType == String.class) {
      Key k = (Key) o;
      return KeyFactory.keyToString(k);
    }

    return null;
  }
}

在源代码的根目次,建设xwork-conversion.properties文件,内容如下:

com.google.appengine.api.datastore.Text=your.servlet.pkg.TextConverter 
com.google.appengine.api.datastore.Key=your.servlet.pkg.KeyConverter

上面的事情都完成今后,就可以在你的Action内里直接利用Key范例的类变量,无需手工去做String和Key之间的转换!

Convention Plugin不能利用

Struts2内里,最常用的Plugin应该是Convertion了,"零设置"即淘汰了写设置文件的贫苦,代码的组织布局看起来也清晰许多。

可是在GAE内里,无法读取文件系统,今朝的Convertion版本还无法正常事情,很是惋惜。不外发起你的GAE应用中,Action和JSP文件,照旧凭据Convertion Plugin的组织方法来存放,一方面有利于后头的进级和迁移事情,另一方面也让你的应用的文件看起来更清晰。

    关键字:

在线提交作业