【问题标题】:Why HttpServlet in java implements serializable? [duplicate]java中的HttpServlet为什么实现可序列化? [复制]
【发布时间】:2011-11-15 05:35:49
【问题描述】:

可能重复:
Why does HttpServlet implement Serializable?

几天前在一次内部讨论中突然提出了这个问题,我们似乎没有找到任何合适的答案。谁能指出我正确的方向?

问题:

1) 为什么 HttpServlet 在 java implements serializable 中?我似乎没有找到任何合乎逻辑的理由。

2) 在试图弄清楚这一点时,我查看了 api 文档并发现了一些有趣的东西

public abstract class HttpServlet extends GenericServlet
implements Serializable

现在,有趣的是GenericServlet 也扩展了Serializable。所以父类和子类都实现了 serializable 。这不是反模式吗?

【问题讨论】:

  • 对第二个问题有什么建议吗?

标签: java servlets


【解决方案1】:

1) 为什么java中的httpservlet实现了可序列化?我似乎没有 找出任何合乎逻辑的理由。

支持虚拟机之间的集群和序列化、钝化等

【讨论】:

  • 什么是钝化?从来没有听说过这个词,谷歌告诉过一些关于氧化物的事情:(
  • @ganguly.sarthak 也许你需要提高你的谷歌搜索技能:google.ie/… :-)
  • 但是如果父类GenericServlet是Serializable,为什么还要标记HttpServletSerializable呢?
【解决方案2】:

另一个原因是 Tomcat 等 Web 容器在关闭时会调用一些钩子。这些钩子保留了硬盘上的应用程序/servlet 的状态,因此当 web 容器重新启动时,应用程序不会丢失它的状态。

【讨论】:

  • 那么一个 Servlet 应该是线程安全的,或者至少没有会话状态。那么有什么需求呢?
  • @AmirPashazadeh 一个 Servlet 可以为每个用户拥有 很多 个会话状态。这就是“会话”对象的全部意义,跟踪请求/响应周期之间的状态。该状态在 Servlet 容器运行时存在于内存中。当容器退出时,噗!,内存被清除,会话状态消失。这个答案中的想法是关于 some Servlet 容器如何提供一个可选功能来通过序列化将该会话状态保存到存储中以“脱水”状态数据。重新启动容器后,会话会重新水化,以让用户从上次中断的地方继续工作。
猜你喜欢
  • 1970-01-01
  • 2011-07-12
  • 2010-09-15
  • 2012-07-20
  • 2010-10-11
  • 2015-12-05
  • 2012-01-17
  • 2014-09-12
  • 1970-01-01
相关资源
最近更新 更多