【问题标题】:shared objects between webapps of the same tomcat同一个tomcat的webapps之间的共享对象
【发布时间】:2013-03-02 12:23:31
【问题描述】:

我有 2 个 web 应用程序在两个上下文中运行:c1、c2(都紧跟在根目录之后)。我在 c1 中放了一个 startupListener 来共享一个变量,在 c2 中放另一个来检索它。

我在 c1 中的启动监听器是:

 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);
            }

    }

在c2 app中是这样的:

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

      }

c2 的 startupListener 中的 context 总是为 null,我试过 '/c1', 'c1'。我错过了什么? (如果这很重要,我正在使用tomcat6) 谢谢

【问题讨论】:

  • 它检索到的值为 null 而不是我猜的上下文?
  • 不,上下文为空,下一行触发NPE。

标签: java web-applications servlets tomcat6


【解决方案1】:

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

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

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

【讨论】:

  • 嘿布拉德,我确实在应用程序 c1 中将 crossContext 设置为 true。
  • 如果对 s/o 有帮助:Brad 的回答是正确的,但请注意在您的 tomcat 文件夹的 config/context.xml 中设置了 crossContext=true。
【解决方案2】:

问题:

app初始化不匹配可能是app2在app1之前初始化。

有一个潜在的“解决方法”:如果您实际上有两个(或更多)应用程序相互依赖,您可能会决定在您的server.xml: 中启动多个服务

<Service name="app1">
  <Connector .../>

  <Engine ...>
     <Host appbase="app1" ...>
       ...        
     </Host>
  </Engine>
</Service>
<Service name="app2">
  <Connector .../>

  <Engine ...>
     <Host appbase="app2" ...>
       ...        
     </Host>
  </Engine>
</Service>

【讨论】:

  • 你好,我可以确认c2总是在c1之后启动的,我是按顺序手动启动的。
【解决方案3】:

另一种选择是使用序列化。在一个应用程序中序列化数据并在另一个应用程序中读取相同的数据。

【讨论】:

  • OP 在同一个 JVM 中询问 2 个 webapp,因此不需要序列化
猜你喜欢
  • 1970-01-01
  • 2012-01-06
  • 2018-01-17
  • 1970-01-01
  • 2012-03-14
  • 2011-01-17
  • 1970-01-01
  • 1970-01-01
  • 2012-07-22
相关资源
最近更新 更多