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。
- stackoverflow.com/questions/20700530/&hellip;
EDCOX1(0)意味着当对象被写入字节时,该值不会被序列化(使用默认Java对象序列化)。
会话的序列化可能会发生,也可能不会发生(只需要在进程之间传递会话,或者将会话持久化到磁盘上,但通常不需要在一个可以将会话保存在内存中的JVM servlet容器中),因此您不应以这种方式依赖于"丢失"的值。
如果你不想让事情在会议中存活下来,就不要把它放在那里。考虑改用请求属性。
- 好吧,understood。?可能失去decides to but if the服务器序列化不是if the Lost keeps session存储服务器,对吗?我知道我是真的只为暂态限session存储。is there when to clean属性在默认的方式把一个session的东西吗?回调或一些类似的?恩我need to or manually队列。
- request属性is not as for我的工作,它是一个面向对象的结构和套式有"缓存"which needs to be persisting收讫在在线会议。
- 不,transientis a那么低电平使序列化的工作机制。EN is not to limit intended session存储。the session is to put into商店一切你做它。
- if the existing范围(session,request,主页,不是为你threadlocal)是不够的,那么,恩,You need to manually队列。你可以certainly things have a request filter to remove from before after each request或session你得到处理。
- 好的,谢谢。我在阅读和写作的"库"的对象类的this from the session文件,它会在那里。