Struts2 .action extension che causa il fallimento di CSS, JavaScript e Struts Dojo

Siamo stati in esecuzione su Struts 2.1.8 per un po ‘di tempo e tutte le azioni di Struts hanno funzionato come previsto, cioè le azioni di href su Struts sono rese con il nome dell’azione senza estensione.

Ecco il codice JSP che imposta i collegamenti:

  • Home
  • Search
  • My Bookmarks
  • Support

I link sono stati resi correttamente a http://localhost/viewHome , http://localhost/viewSearch , ecc. Sotto 2.1.8

Abbiamo appena aggiornato a Struts 2.2.1 (uno ha verificato tutte le versioni da questo fino alla v2.3.4.1) e ora stiamo vedendo i link delle azioni di Struts che vengono visualizzati come http://localhost/viewHome.action , http://localhost/viewSearch.action , ecc.

La mia ricerca ha dimostrato che la soluzione generale suggerita è quella di utilizzare

  

in struts.xml per rimuovere il suffisso .action. Mentre questo rende il rendering degli URL correttamente sta causando un effetto collaterale inaspettato. Struts ora pensa che ogni URL sia un’azione che include richieste di .css, .png, ecc.

La mia mapping dei filtri in web.xml non è cambiata. E anche se invia / * a Struts non abbiamo visto questo comportamento sotto 2.1.8

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

Per contrastare questo ho dovuto usare excludePattern per fermare Struts cercando di trattare queste richieste come azioni.

  

Mentre questo funziona, l’ultimo ostacolo è che i miei registri sono pieni di errori dalle richieste di tag Struts che vengono gestite come azioni Struts. Quando aggiungo questi URI al modello di esclusione, i tag Dojo di Struts non sembrano funzionare in alcune pagine.

Le parti di struts.xml interessate sono:

     

E un esempio degli errori Struts nel registro è:

 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) 

Non sono sicuro che le punture Dojo richieste siano URI reali o virtuali o qualcos’altro.

A questo punto mi sembra di aver superato un bel po ‘di tentativi per risolvere quello che è essenzialmente un semplice problema di rimuovere l’estensione .action dall’URL dato che tornare al JAR 2.1.8 risolve tutto ma sono determinato a trovare una via da seguire se ansible.

Qualsiasi aiuto è molto apprezzato.