問題

次の環境でGoogle App EngineでStruts2を開発する。

  1. Struts 2.3.1.2

  2. JDK 1.6

  3. Eclipse用Eclipse 3.7 Google Plugin

  4. Google App Engine Java SDK 1.6.3.1

単純なStruts2のhello worldの例を開始しました。アクションクラスにアクセスすると、ローカル開発環境と実際のGAE環境の両方でエラー “エラー:結果 ‘が見つかりませんでした”が表示されます。


struts2の結果 - ヌルエラー、title = "struts2-gae-result-null-error"、width = 564、高さ= 317

解決策

OGNLはセキュリティチェックを行っていますが、これはGAEではサポートされていません。

Struts 2をGAE環境** で動作させるには、 `web.xml`にリスナを作成し、OGNLセキュリティマネージャをnullに設定する必要があります。

OgnlRuntime.setSecurityManager(null);

完全な例。

package com.mkyong.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

import ognl.OgnlRuntime;

public class Struts2ListenerOnGAE implements ServletContextListener,
        HttpSessionListener, HttpSessionAttributeListener {

    public void contextInitialized(ServletContextEvent sce) {
        OgnlRuntime.setSecurityManager(null);
    }

    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
       //TODO Auto-generated method stub

    }

    @Override
    public void sessionCreated(HttpSessionEvent arg0) {
       //TODO Auto-generated method stub

    }

    @Override
    public void sessionDestroyed(HttpSessionEvent arg0) {
       //TODO Auto-generated method stub

    }

    @Override
    public void attributeAdded(HttpSessionBindingEvent arg0) {
       //TODO Auto-generated method stub

    }

    @Override
    public void attributeRemoved(HttpSessionBindingEvent arg0) {
       //TODO Auto-generated method stub

    }

    @Override
    public void attributeReplaced(HttpSessionBindingEvent arg0) {
       //TODO Auto-generated method stub

    }

}


File: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.mkyong.listener.Struts2ListenerOnGAE</listener-class>
    </listener>

</web-app>

リファレンス

GAEにStruts 2をデプロイするとき]


gae


null

リンク://tag/struts2/[struts2]