在我对Servlet的理解中,Servlet将由Container实例化,其init()
方法将被调用一次,并且servlet将像单例一样生存直到JVM关闭.
我不希望我的servlet被序列化,因为它将在app服务器恢复或正常启动时构建为新的.servlet应该不包含特定于会话的成员,因此将其写入磁盘并重新实例化是没有意义的.这有实际用途吗?
我担心的是,我在其中放置了一些不可序列化的字段,然后我的应用程序将在生产环境中神秘地失败,在该环境中将发生不同类型的会话复制.
从技术上讲,我相信servlet容器允许将servlet对象"钝化"到磁盘,就像EJB会话bean一样.因此,如果您的应用因非序列化字段而失败,那么您提出的问题是正确的.
在实践中,我从来没有听说过这样做的容器,所以它只是早期J2EE早期糟糕的传统包袱.我不担心.
HttpServlet应该通过序列化到磁盘并在servlet容器重启后继续运行.例如,tomcat允许你设置标志,使这种生存.下一个选项是使用JNDI进行传输.这不是垃圾,它仅用于极端用例.