Struts 2 auf GAE - Fehler: Ergebnis "null" nicht gefunden
Problem
Entwickeln von Struts2 in Google App Engine in der folgenden Umgebung.
-
Streben 2.3.1.2
-
JDK 1.6
-
Eclipse 3.7 + Google Plugin für Eclipse
-
Java SDK für Google App Engine 1.6.3.1
Gerade ein einfaches Beispiel für eine Struts2-Hallo-Welt gestartet. Wenn Sie auf die Aktionsklasse zugreifen, wird der Fehler "Fehler: Ergebnis 'Null' nicht gefunden" sowohl in der lokalen Entwicklungs- als auch in der realen Produktions-GAE-Umgebung angezeigt.
Lösung
OGNL führt einige Sicherheitsüberprüfungen durch, die in GAE nicht unterstützt werden. UmStruts 2 works on GAE environment zu erstellen, müssen Sie einen Listener inweb.xml
erstellen und den OGNL-Sicherheitsmanager auf null setzen.
OgnlRuntime.setSecurityManager(null);
Vollständiges Beispiel.
package com.example.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 } }
Datei: web.xml
struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts2 /* com.example.listener.Struts2ListenerOnGAE