【问题标题】:Control of when do servlets die控制 servlet 何时终止
【发布时间】:2011-05-03 02:38:44
【问题描述】:

我有一些配置存储在 servlet 上下文中,在 servlet 之间共享。当前的方法是在调用任何 servlet 的 init() 方法时将配置加载到 servlet 共享的静态 hashmap 的单个副本中。但问题是 servlet 不会死掉,所以即使我在 servlet 上下文中更改了配置,配置也不会重置。因为 servlet 永远不会再次调用 init(),所以它们不会将配置重新加载到 hashmap 中。

我使用的是 websphere 7,有什么地方可以配置 servlet 什么时候死掉,什么时候新的 servlet 诞生?

我认为当有新请求时从 servlet 上下文中重新加载配置太笨拙了。


编辑: 我有一个调度程序,它将创建一个新线程来检查特定数据文件,如果数据文件是新的,它将创建一个 hashmap(包含数据文件的内容)作为 servlet 上下文中的属性。

现在 servlet 将检查 servlet 上下文中的 hashmap 并将其复制到静态 hashmap 以便在 servlet 刚创建时共享使用并调用 init()。但问题是 servlet 在执行过程中不会死掉,它只会使预定的操作不起作用。

【问题讨论】:

  • 您能否更具体地说明您要在您的上下文中更改的内容?什么操作触发了这种变化?
  • 好的,请稍等,请稍后再查看问题。
  • 为什么要有一个“servlet 之间共享使用”的静态映射 - 为什么不直接使用 ServletContext?它实际上更像是一个“应用程序上下文”,因为它可以在您的应用程序中使用。
  • 我想要一份它的副本,这样就不需要每次使用时都从servlet上下文中获取servlet上下文的属性了。

标签: java servlets websphere


【解决方案1】:

我正在使用 websphere 7,有没有 我可以配置的地方 servlet 死了,一个新的 servlet 是 出生了吗?

没有。

编辑:我有一个调度程序,它将 创建一个新线程来检查 具体的数据文件,如果是数据文件 是新的,它将创建一个哈希图(与 数据文件的内容)作为 servlet 上下文中的属性。

现在 servlet 将检查 hashmap 的 servlet 上下文和 将其复制到静态哈希图以进行共享 在 servlet 中使用它们 创建并调用 init()。但是 问题是servlet不会死 在执行过程中,它只是使 计划的操作不起作用。

将设置重构为一个单独的数据对象(而不是 HashMap 或 servlet 实例字段)以供 servlet 实例共享。更改调度程序/警报以直接更新共享数据对象。

【讨论】:

    【解决方案2】:

    为什么不将这些数据存储在 JNDI 中,让 servlet 可以在需要时获取它?这样,您就可以完全控制数据; servlet 生命周期不再重要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-26
      相关资源
      最近更新 更多