通过配置struts.xml解决 struts2和 dwr兼容的问题
众所周知,strust2 通过在 web.xml中配置 filter,对所有路径的请求进行过滤。
代码如下:
<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>
而dwr也是在web.xml配置servlet,对请求dwr的路径进行过滤,
代码如下:
<servlet> <servlet-name>dwr-invoker</servlet-name> <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class> <init-param><param-name>debug</param-name><param-value>true</param-value></init-param> </servlet> <servlet-mapping><servlet-name>dwr-invoker</servlet-name><url-pattern>/dwr/*</url-pattern></servlet-mapping>
这样就会产生冲突:给dwr的请求让struts2过滤了。
幸好struts2有一个参数:struts.action.excludePattern ,意思是该参数的值指定的请求,struts2不对其进行过滤。
这样dwr就能进行过滤了。
解决办法:
在struts.xml中,添加:
<struts> <constant name="struts.action.excludePattern" value="/dwr/test/.*,/dwr/.*"/></struts>
问题解决。
注意:value="/dwr/test/.*,/dwr/.*" 中的/dwr/test/.*,/dwr/.*是正则表达式的写法,不是路径的写法!
注意那个“.*” ,而不是“*”