【问题标题】:HttpServlet lifecycle and serializationHttpServlet 生命周期和序列化
【发布时间】:2012-01-12 15:31:44
【问题描述】:

不知道反序列化后是否调用了HttpServlet的init方法。

我不知道是否有任何容器曾经序列化 servlet,但它实现了 Serializable 接口,因此有可能这样做。

init 方法的 JavaDoc 指出:“由 servlet 容器调用以向 servlet 指示 servlet 正在投入使用。”

反序列化是否等于“投入使用”?

【问题讨论】:

  • 我很确定 servlet 永远不会被序列化。它是一个单例,通常是完全无状态的。我看不出序列化它的意义。无论如何,不​​管是新实例化还是反序列化,init 方法必须在投入使用时调用,因此如果 servlet 容器在未初始化的情况下将 servlet 投入使用,就会违反规范。

标签: serialization servlets lifecycle init


【解决方案1】:

虽然我从来没有真正处理过通过序列化来交换 servlet 的容器,老实说,我真的无法想象现代容器何时会这样做,但我一直明白 init() 被准确地调用servlet 在其生命周期中一次,因此,在反序列化时将不会再次调用它。与任何Serializable 一样,您需要通过实现readFields() 来编写特殊处理。

【讨论】:

  • 好吧,这里开始变得复杂了。 GenericServlet(在层次结构中引入了 Serializable 接口)只说:“由 servlet 容器调用以向 servlet 指示 servlet 正在投入服务。”另一点:“servlet 容器在实例化 servlet 后只调用一次 init 方法。” Servlet接口的JavaDoc中说是不可序列化的。
  • 还有一点是传递给init方法的ServletConfig是存储在一个transient字段中的...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-28
  • 2021-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-18
相关资源
最近更新 更多