2012年1月21日土曜日

Google App Engine(Struts2 との連携)

Google App Engine で, Struts2を利用する方法についてです。
調べましたところ, 以下の2つの記事が秀逸です。参考にさせていただきました。


http://knowledge.sorich.jp/?Google%20App%20Engine%2FStruts2%E3%81%AE%E9%80%A3%E6%90%BA

http://whyjava.wordpress.com/2009/08/30/creating-struts2-application-on-google-app-engine-gae/

●環境
-  Windows 7
-  Eclipse 3.7
-  Google App Engine
-  Struts2(2.3.1.1)

●手順
1.  Struts2のlib の準備
2.  web.xml の記述
3.  実際のプログラムを書く
4.  struts.xml の設定

今回のフォルダ構成です(一部省略)
Struts2AppEngine (プロジェクト名)
| - war
      | - WEB-INF
                | -  lib  :  ここにstruts2の必要な.jar を入れる
                | - classes   :   ここにclassや, struts.xml を入れる
ソースファイル
HelloAction.java
OgnlListener.java

※重要なのは, struts.xml を classes のところにいれることくらいです

1.  Struts2のlib の準備
以下のlib を /war/WEB-INF/lib 以下に加え,
Build Pathに追加する

commons-fileupload-1.2.2.jar
commons-io-2.0.1.jar
commons-lang-2.5.jar
commons-logging-1.1.1.jar
freemarker-2.3.18.jar
javassist-3.11.0.GA.jar
ognl-3.0.3.jar
struts2-core-2.3.1.1.jar
struts2-dojo-plugin-2.3.1.1.jar
xwork-core-2.3.1.1jar

2. web.xml の記述

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">

   <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
   </filter>
   
   <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
   </filter-mapping>


   <listener>
<listener-class>com.appspot.struts2.listener.OgnlListener</listener-class>
   </listener>
</web-app>


上の方に書いてあるのが, struts2用の設定です。
さて重要なので, 下のやつ, OgnlListner という  リスナを追加しています。リスナの説明は後程

3.  実際のプログラム


ex) Action クラス
package com.appspot.struts2.action;

import com.opensymphony.xwork2.ActionSupport;

public class HelloAction extends ActionSupport
{
private static String HELLO = "hello";

public String execute()
{
return HELLO;
}
}


Struts2のAction です。  ActionSupport を拡張して, ただ単に, hello というresult に返すだけです。

ex)  リスナ

package com.appspot.struts2.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import ognl.OgnlRuntime;

public class OgnlListener implements ServletContextListener
{

@Override
public void contextDestroyed(ServletContextEvent arg0)
{

}

@Override
public void contextInitialized(ServletContextEvent arg0)
{
OgnlRuntime.setSecurityManager(null);
}

}

このリスナは, セキュリティマネジャーをOFFにする設定を書いています。
サーブレットが立ち上がる時に, このセキュリティマネジャーをOFFにする必要が
あります。App Engine ではこれが必要になります。

ex)  結果表示用

<%@ page contentType="text/html; charset=UTF-8" %>
<html>
<head><title>Hello</title></head>
<body>
<h1>Hello!</h1>
</body>
</html>

4.  struts.xml  の


<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<!-- START SNIPPET: xworkSample -->
<struts>

<package name="default" extends="struts-default">
<action name="hello"
           class="com.appspot.struts2.action.HelloAction">
            <result name="hello">/WEB-INF/success.jsp</result>
        </action>
</package>
</struts>

とくに普通のstrurts2の設定と変わりません。


これで設定は終了です。
このアプリケーションを立ち上げて

http://localhost:8888/hello   にアクセスすると, Hello! というタイトルが出ます。

特殊な部分は, リスナを使って, セキュリティマネジャーをOFFにするという操作が必要なだけですね。

1 件のコメント:

  1. 以下まとめつくるのにすごく参考になりました。ありがとうございます
    http://www.cyokodog.net/blog/first-appengine-and-struts2/

    返信削除