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...