2012-10-10 26 views
1

我有一個Tomcat 7 webapp,其中我有兩個不同的ServletContextListener在Tomcat應用程序中的不同偵聽器之間從上下文獲取屬性

實施例:

聽者

public class ListenerA implements ServletContextListener { 

    public void contextInitialized(ServletContextEvent sce){ 

     ObjectA objectA = new ObjectA(); 
     context.setAttribute("objectA", objectA); 
    } 

    ... 

} 

監聽乙

public class ListenerB implements ServletContextListener { 

    public void contextInitialized(ServletContextEvent sce){ 

     ObjectB objectB = new ObjectB(); 
     context.setAttribute("objectB", objectB); 
    } 

    ... 

} 

的web.xml

... 

<listener> 
    <description>ListenerA</description> 
    <listener-class>com.example.web</listener-class> 
</listener> 
<listener> 
    <description>ListenerB</description> 
    <listener-class>com.example.web</listener-class> 
</listener> 

... 

¿web.xml中的外觀順序是否影響加載進程,或者它們是否加載到不同的線程中?

我想知道是否有可能在ListenerB中從上下文獲取ObjectA。我總是可以將兩個監聽器合併爲一個獨特的監聽器,這樣我就可以將對象A和B都放在同一個監聽器中,但我想知道這是否可行。

我知道我可以從ServletContextAttributeEvent接口使用attributeAdded,但是,如果ListenerB在ListenerA之前加載,這是否足以完成這項工作,或者它會失敗嗎?

回答

1

好了,我終於找到了答案here

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

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

所以加載順序嚴格受出現的順序在的web.xml

確定
相關問題