Struts 2 sur GAE - Erreur: résultat «nul» introuvable
Problème
Développement de Struts2 sur Google App Engine, dans l'environnement suivant.
-
Struts 2.3.1.2
-
JDK 1.6
-
Eclipse 3.7 + Plugin Google pour Eclipse
-
SDK Java de Google App Engine 1.6.3.1
Je viens de commencer un exemple simple de Struts2 hello world, lorsque vous accédez à la classe d'action, cliquez sur l'erreur «Erreur: résultat« nul »introuvable», à la fois dans le développement local et dans l'environnement GAE de production réelle.
Solution
OGNL effectue une vérification de sécurité, qui n'est pas prise en charge dans GAE. Pour créerStruts 2 works on GAE environment, vous devez créer un écouteur dansweb.xml
et définir le gestionnaire de sécurité OGNL sur null.
OgnlRuntime.setSecurityManager(null);
Exemple complet.
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 } }
Fichier: web.xml
struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts2 /* com.example.listener.Struts2ListenerOnGAE