为什么 HttpServlet 实现 Serializeable?

2022-08-31 12:56:09

在我对Servlet的理解中,Servlet将由容器实例化,其方法将被调用一次,servlet将像单例一样存在,直到JVM关闭。init()

我不希望我的servlet被序列化,因为当应用程序服务器恢复或正常启动时,它将被构造为新的。servlet 不应包含任何特定于会话的成员,因此将其写入磁盘并重新实例化是没有意义的。这有实际用途吗?

我担心的是,我在那里放置了一些不可序列化的字段,然后我的应用程序将在生产环境中神秘地失败,其中将发生不同类型的会话复制。


答案 1

从技术上讲,我相信 servlet 容器允许将 servlet 对象“钝化”到磁盘,就像 EJB 会话 Bean 一样。因此,你提出问题是否正确,你的应用是否会由于不可序列化的字段而失败。

在实践中,我从未听说过容器这样做,所以它实际上只是早期J2EE糟糕的旧时代的遗留包袱。我不会担心的。


答案 2

HttpServlet 应该通过序列化到磁盘并在 servlet 容器重新启动后继续存在。例如,tomcat允许您设置标志,使这种生存成为可能。下一个选项是使用 JNDI 进行传输。这不是垃圾,它只在极端用例中使用。


推荐