为什么关键字“瞬态”对Java中的Servlet HTTPSession没有影响?

Why does keyword “transient” has no effect for Servlet HTTPSession in Java?

瞬变关键字的确切含义是什么?我有一个类属性标记为瞬态:

1
2
3
4
5
6
public class NodeClassifier {

   private transient HashMap<String, Node> nodeCache = new HashMap<>();

...
}

在将nodeclassifier对象存储和恢复到httpsession之后,该属性仍然具有上一个会话的值。

它不应该是空的吗?

环境是运行在GlassFish4上的普通servlet。


EDCOX1(0)意味着当对象被写入字节时,该值不会被序列化(使用默认Java对象序列化)。

会话的序列化可能会发生,也可能不会发生(只需要在进程之间传递会话,或者将会话持久化到磁盘上,但通常不需要在一个可以将会话保存在内存中的JVM servlet容器中),因此您不应以这种方式依赖于"丢失"的值。

如果你不想让事情在会议中存活下来,就不要把它放在那里。考虑改用请求属性。