<!--struts2配置時,在web.xml中的配置如下:-->
<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>
<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>
struts2 使用 /* 作爲 url-pattern,而且在struts機制中,只要請求路徑中無後綴名或者後綴名爲 .action ,它就當 action 來處理。所以當配置了dwr之後,在測試頁中,本來點擊類之後應該顯示當前系統中對外暴露的JS方法的列表,卻顯示了There is no Action mapped for action... 類似的信息,就是因爲點擊了類名鏈接後,路徑中沒有了後綴名。解決方法有兩個:
(1)在Struts.properties中定義:
struts.action.extension = action
因爲Struts2缺省配置是:
struts.action.extension = action,(注意後面有個逗號)
(2)在Struts.properties中設置:
struts.action.excludePattern = /dwr.*,/webEditor.*(注意,這兒是正則表達式,不是URL匹配模式,所以要寫/dwr.*而不是/dwr/*)
這種寫法應配置StrutsPrepareAndExecuteFilter,配置FilterDispatcher是無效的。
(3)直接在Struts.xml中加入
<constant name="struts.action.extension" value="action" />