Struts2與DWR在專案中的共存解決方案

2021-08-30 14:50:09 字數 1326 閱讀 5780

1.struts2和dwr為什麼會衝突?

最近很多同學都在問同樣乙個問題,struts2和dwr該如何共存?我們先分析一下為什麼會出現衝突.

struts2通過strutsprepareandexecutefilter過濾器來處理請求,常見的配置如下:

struts2

org.apache.struts2.dispatcher.ng.filter.strutsprepareandexecutefilter

問題就在這裡,/*配置過濾了所有的請求,當使用者提交的請求是/dwr/*時,也同樣被strutsprepareandexecutefilter處理了,根本達不到dwr框架,這就是為什麼二者不能共存的原因.

2.通過struts2原始碼發現問題

網上我沒找到問題的解決方案,所以,只能通過閱讀源**來查詢問題的根源了.在strutsprepareandexecutefilter類中,重寫了dofilter方法:

注意看粗體部分,如果excludedpatterns不為null且prepare.isurlexcluded方法的返回值為true,則該請求不交給struts框架處理,那麼,surlexcluded是如何定義的呢?我們跟蹤找到下面的**:

}我們看到, isurlexcluded 方法中 excludedpatterns引數是乙個list集合, string uri = geturi(request);**獲取請求路徑,然後通過乙個for迴圈將請求路徑與 excludedpatterns進行匹(,注意,這裡是通過正規表示式進行匹配的),如果匹配成功,則返回true,否則返回false.

那麼, excludedpatterns的值從**來呢?下面的**是也:

public listbuildexcludedpatternslist( dispatcher dispatcher )

private listbuildexcludedpatternslist( string patterns )

return collections.unmodifiablelist(list);

} else

}看了上面的**,是不是豁然開朗?原來, strutsconstants.struts_action_exclude_pattern常量儲存了不由struts2處理的路徑,我們在struts2.properties中配置即可.

struts.action.excludepattern=/dwr/.*,/dwr/test/.*

Struts2與DWR在專案中的共存解決方案

1.struts2和dwr為什麼會衝突?最近很多同學都在問同樣乙個問題,struts2和dwr該如何共存?我們先分析一下為什麼會出現衝突.struts2通過strutsprepareandexecutefilter過濾器來處理請求,常見的配置如下 struts2 org.apache.struts2...

Struts2與DWR在專案中的共存解決方案

1.struts2和dwr為什麼會衝突?最近很多同學都在問同樣乙個問題,struts2和dwr該如何共存?我們先分析一下為什麼會出現衝突.struts2通過strutsprepareandexecutefilter過濾器來處理請求,常見的配置如下 struts2 org.apache.struts2...

Struts2與DWR在專案中的共存解決方案

1.struts2和dwr為什麼會衝突?最近很多同學都在問同樣乙個問題,struts2和dwr該如何共存?我們先分析一下為什麼會出現衝突.struts2通過strutsprepareandexecutefilter過濾器來處理請求,常見的配置如下 struts2 org.apache.struts2...