2012-10-10 18 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

确定
相关问题