Struts2 .action extension provocando que CSS, JavaScript y Struts Dojo se rompan

Hemos estado ejecutando en Struts 2.1.8 durante un tiempo y todas las acciones de Struts han funcionado como se esperaba, es decir, las acciones de href a Struts se representan con el nombre de la acción sin extensión.

Aquí está el código JSP que establece los enlaces:

  • Home
  • Search
  • My Bookmarks
  • Support

Los enlaces se procesaron correctamente en http://localhost/viewHome , http://localhost/viewSearch , etc. en 2.1.8

Acabamos de actualizar a Struts 2.2.1 (y hemos comprobado todas las versiones desde este hasta v2.3.4.1) y ahora estamos viendo las acciones de Struts. Los enlaces se están procesando como http://localhost/viewHome.action , http://localhost/viewSearch.action , etc.

Mi investigación ha demostrado que la solución sugerida general es usar

  

en struts.xml para eliminar el sufijo .action. Si bien esto hace que las URL se procesen correctamente, está causando un efecto secundario inesperado. Struts ahora piensa que cada URL es una acción que incluye solicitudes para .css, .png, etc.

Mi mapeo de filtro en web.xml no ha cambiado. Y aunque envía / * a Struts, no vemos este comportamiento en 2.1.8

  struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter   struts2 /*  

Para contrarrestar esto, he tenido que usar excludePattern para detener Struts tratando de tratar estas solicitudes como acciones.

  

Mientras esto funciona, el último obstáculo es que mis registros están llenos de errores de las solicitudes de tags de Struts que se manejan como acciones de Struts. Cuando agrego estos URI al patrón de exclusión, las tags de Struts Dojo no parecen funcionar en algunas páginas.

Las partes de struts.xml afectadas son:

     

Y un ejemplo de los errores de Struts en el registro es:

 2012-09-26 17:12:57,984 [http-bio-8080-exec-9] ERROR org.apache.struts2.dispatcher.Dispatcher- Could not find action or result /struts/dojo/struts_dojo.js There is no Action mapped for namespace [/] and action name [struts_dojo.js] associated with context path []. - [unknown location] at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:185) at org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63) at org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39) at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58) at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:501) at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:680) 

No estoy seguro de si los struts de las solicitudes de Dojo son URI reales o virtuales o algo más.

Siento que en este punto he saltado bastantes aros para solucionar lo que es esencialmente un problema simple de eliminar la extensión .action de las URL dado que volver al 2.1.8 JAR resuelve todo, pero estoy decidido a encontrar un camino a seguir si es posible.

Cualquier ayuda es muy apreciada.

Intenta usar la extensión de acción de los puntales con una coma como esta
.
Desde el archivo de propiedades struts2:

Utilizado por DefaultActionMapper Puede proporcionar una lista separada por comas, por ejemplo, struts.action.extension = action, jnlp, do La extensión en blanco le permite hacer coincidir los listados de directorios así como los nombres de las acciones puras sin interferir con los recursos estáticos, que se pueden especificar como una cadena vacía antes de una coma, por ejemplo, struts.action.extension =, o struts.action.extension = x, y, z ,, struts.action.extension = action ,,

    Intereting Posts