通过配置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/.*是正则表达式的写法,不是路径的写法!
注意那个“.*” ,而不是“*”

你可能感兴趣的:(通过配置struts.xml解决 struts2和 dwr兼容的问题)