同一个tomcat的webapps之间的共享对象

Tax*_*Noi 5 java servlets web-applications tomcat6

我有2个webapps在两个上下文中运行:c1,c2(都紧跟在root之后).我把一个startupListener放在c1中共享一个变量,另一个放在c2中来检索它.

我在c1中的startuplistener是:

 public void contextInitialized(ServletContextEvent sce) {  
            HashMap <String,Object> database ;
            //some code to init database 
            ServletContext context = sce.getServletContext().getContext("/c1");
            if (context!=null)
            {
                context.setAttribute("crossContext", true);
                context.setAttribute("cache", database);
            }

    }
Run Code Online (Sandbox Code Playgroud)

在c2应用程序中,它是这样的:

      public void contextInitialized(ServletContextEvent sce) {
            ServletContext context = sce.getServletContext().getContext("/c1");
            HashMap<String,Object> database = (HashMap) context.getAttribute("cache");

      }
Run Code Online (Sandbox Code Playgroud)

c2的startupListener中的上下文总是为null,我试过'/ c1','c1'.我错过了什么?(我正在使用tomcat6,如果重要的话)谢谢

小智 3

您需要设置 crossContext=true。来自 tomcat 文档:

如果您希望在此应用程序中调用 ServletContext.getContext() 来成功返回在此虚拟主机上运行的其他 Web 应用程序的请求调度程序,请设置为 true。在安全意识环境中设置为 false(默认值),以使 getContext() 始终返回 null。

http://tomcat.apache.org/tomcat-7.0-doc/config/context.html