2008-10-07 20 views
20

我在我的Java Web應用程序中獲得了一堆servlet上下文監聽器,每個監聽器都收集有關環境的一些信息。如何確定web.xml中監聽器的順序

其中一些取決於另一位聽衆收集的信息。但我無法確定聽衆註冊和呼叫的順序,所以我必須複製代碼。

我知道聽衆是按順序在web.xml中註冊的,但這聽起來有點模糊,太模糊了,不能依賴它。

你有什麼提示我可以解決我的問題嗎?

回答

25

所有的servlet容器和Java EE容器都嚴格執行這部分規範。您可以依靠這樣一個事實,即按照您在web.xml中指定的順序調用偵聽器。

您可以擁有一個應用程序級別數據結構(HashMap),它將在每個篩選器/偵聽器遇到來自請求的數據時進行更新。這將讓每個Listener只更新重要的內容。您可以將通用代碼放在基本監聽器中,以避免代碼重複。

2

您似乎可以創建一個ListenerManager,將其作爲您唯一的偵聽器,並讓它包含其他偵聽器。當事件進入時,只需按照您需要的順序(可能是您在ListenerManager的構造函數中創建它們的順序)調用其他每個Listener。

不幸的是,這意味着添加監聽器時會發生代碼更改,但您可以通過巧妙使用屬性文件和創建類名代碼來避免此情況。

8

爲什麼模糊? web.xml中的排序非常明確地是它們被調用的順序,這在Java EE規範中已經清楚地說明了。依靠它是完全可以的。