transient使用小结
- 一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。
- transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。
- 被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。
- 然而在实际开发过程中,我们常常会遇到这样的问题,这个类的有些属性需要序列化,而其他属性不需要被序列化,打个比方,如果一个用户有一些敏感信息(如密码,银行卡号等),为了安全起见,不希望在网络操作(主要涉及到序列化操作,本地序列化缓存也适用)中被传输,这些信息对应的变量就可以加上transient关键字。换句话说,这个字段的生命周期仅存于调用者的内存中而不会写到磁盘里持久化。
session的使
// 获取服务器端session对象
HttpSession session = request.getSession();
// 将key和value写入session
session.setAttribute("key1", "value1");
// 获取session值
String key1 = (String) session.getAttribute("key1");
Cookie的使用
// 获取浏览器端cookie数组
Cookie[] cookies = request.getCookies();
// 循环遍历cookie
for (Cookie cookie : cookies) {
System.out.printf("key:%s value:%s\n", cookie.getName(), cookie.getValue());
}
// 创建一个新cookie
Cookie cookie = new Cookie("key", "value");
// 过期时间60秒
cookie.setMaxAge(60);
// 返回cookie到客户端
response.addCookie(cookie);
session与cookie的生命周期
(1)cookie的生命周期是累计的,从创建时,就开始计时,20分钟后,cookie生命周期结束,
(2)session的生命周期是间隔的,从创建时,开始计时如在20分钟,没有访问session,那么session生命周期被销毁
bean对象存入session的状态
实体对象的三种状态
- 临时状态 ( transient )----对象刚new创建时,还没被持久化,不处于session缓存中。
- 持久化状态 ( persistent )---已被持久化,加入到session缓存中(调用session的相关方法时)
- 游离状态 ( detached )----已被持久化,但不在处于session的缓存中。
当实体对象被加入到 session 缓存中,就在 session 和实体对象之间建立了一种联系,以后可以从session 缓存中读取实体对象出来。