GAEのStruts 2 – エラー:結果 ‘null’が見つかりません
問題
次の環境でGoogle App EngineでStruts2を開発する。
-
Struts 2.3.1.2
-
JDK 1.6
-
Eclipse用Eclipse 3.7 Google Plugin
-
Google App Engine Java SDK 1.6.3.1
単純なStruts2のhello worldの例を開始しました。アクションクラスにアクセスすると、ローカル開発環境と実際のGAE環境の両方でエラー “エラー:結果 ‘が見つかりませんでした”が表示されます。
解決策
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をデプロイするとき]