Struts2 导致CSS、JavaScript和Struts Dojo中断的操作扩展

Struts2 导致CSS、JavaScript和Struts Dojo中断的操作扩展,struts2,dojo,jsp-tags,struts-config,action-mapping,Struts2,Dojo,Jsp Tags,Struts Config,Action Mapping,我们已经在Struts 2.1.8上运行了一段时间,所有Struts操作都按预期工作,即Struts操作的href以操作名称呈现,没有扩展名 以下是设置链接的JSP代码: <ul id="top_menu"> <li id="itemHome" class="active"><s:a action="viewHome">Home</s:a></li> <li><s:a action="viewSearch"&g

我们已经在Struts 2.1.8上运行了一段时间,所有Struts操作都按预期工作,即Struts操作的href以操作名称呈现,没有扩展名

以下是设置链接的JSP代码:

<ul id="top_menu">
  <li id="itemHome" class="active"><s:a action="viewHome">Home</s:a></li>
  <li><s:a action="viewSearch">Search</s:a></li>
  <li><s:a action="viewBookMarks">My Bookmarks</s:a></li>
  <li><s:a action="viewSupport">Support</s:a></li>
</ul>
在struts.xml中删除.action后缀。虽然这会使URL正确呈现,但会造成意外的副作用。Struts现在认为每个URL都是一个动作,包括对.css、.png等的请求

web.xml中的筛选器映射未更改。虽然它将/*发送到Struts,但在2.1.8中我们没有看到这种行为

<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>
我不确定struts Dojo请求是真实的URI请求还是虚拟的请求或其他请求

在这一点上,我觉得我已经克服了很多困难,解决了从URL中删除.action扩展的简单问题,因为回到2.1.8 JAR解决了所有问题,但我决心找到一条前进的道路,如果可能的话


非常感谢您的帮助。

尝试使用带有逗号的struts action Extension,如下所示

从struts2属性文件:

由DefaultActionMapper使用 您可以提供逗号分隔的列表,例如struts.action.extension=action、jnlp、do 空白扩展允许您匹配目录列表以及纯动作名称。 不干扰可以指定为空字符串的静态资源 在逗号之前,例如struts.action.extension=,或struts.action.extension=x,y,z,, struts.action.extension=action


嗯,似乎有一个页面正在请求lib struts_dojo.js。您是否正在使用用于Struts的dojo插件?它已被弃用。如果没有,您能否提供请求该库的代码?这很有效。谢谢你,亚历山大。一旦我添加了逗号,所以这行代码是:
一切都回到了struts 2.2.1之前的行为。我也不需要用
明确排除静态内容,也可以将其去掉。它还有助于设置
name=“struts.action.extension”value=“,action”
,以便.action和no后缀都能起作用。我不确定这个问题在2.3.16中是否仍然存在;有人能证实吗?@AndreaLigios:Struts2 v。2.3.16扩展常数的空值无效。正常。我已经将它与正则表达式模式匹配器和高级通配符映射一起使用,并且工作得很好。现在改为“,”并且它的工作原理相同。。。但是我的静态res都是外部的,所以可能是这样。
<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>
<constant name="struts.action.excludePattern" value="/index.html,/images/.*,/js/.*,/css/.*"/>
<constant name="struts.devMode" value="true" />
<!-- Set URL's to have no .action extension -->
<constant name="struts.action.extension" value=""/>
<constant name="struts.action.excludePattern" value="/index.html,/images/.*,/js/.*,/css/.*"/>
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)