servlet session持久化

12 篇文章 0 订阅
10 篇文章 1 订阅

1、 session持久化是什么?  web服务器把 session中存储的属性存储到本地磁盘或数据库中; 

2、为什么需要持久化? 因为 session是服务器维护会话状态的对象,即便客户端关闭连接或客户端长时间没有访问,服务器还依然存储了客户端的访问数据,浪费了服务器资源;

为了提高服务器内存利用率,其会将暂时不活动但未超时的 session对象 存储到本地或数据库(持久化或序列化); 一旦服务器想要恢复 之前某客户的访问状态时,就可以从本地或数据库恢复他们到内存(反序列化);

3、session持久化怎么做 ? 

看个荔枝(代码转自张孝祥):

// servlet 持久化 
public class PersistentServlet extends HttpServlet
{
	public void service(HttpServletRequest request,
		HttpServletResponse response) throws ServletException, IOException
	{
		response.setContentType("text/html;charset=gb2312");
		PrintWriter out = response.getWriter();
		HttpSession session = request.getSession();
		
		Student1 student1 = (Student1)session.getAttribute("student1");
		if(student1 == null)
		{
			student1 = new Student1();
			student1.setValue(35);
			session.setAttribute("student1",student1);
			out.println("将student1保存到了Session中!<br>");
		}
		else
		{
			out.println("读取student1:" + student1.getValue() + "<br>");
		}
		
		Student2 student2 = (Student2)session.getAttribute("student2");
		if(student2 == null)
		{
			student2 = new Student2();
			student2.setValue(33);
			session.setAttribute("student2",student2);
			out.println("将student2保存到了Session中!<br>");
		}
		else
		{
			out.println("读取student2:" + student2.getValue() + "<br>");
		}
	}
} 
// 没有实现序列化接口 Serializable 
public class Student1
{
	private int value = 0;
	public void setValue(int value)
	{
		this.value = value;
	}
	
	public int getValue()
	{
		return value;
	}
}

// 实现序列化接口 Serializable
public class Student2 implements Serializable
{
	private int value = 0;
	public void setValue(int value)
	{
		this.value = value;
	}
	
	public int getValue()
	{
		return value;
	}
}

访问步骤;

1、第一次访问 , 因为session 没有会话信息,所以先保存; 

2、点击刷新; 读取第1次访问时,存储的会话信息;  

3、这时关闭 tomcat 服务器; tomcat 会把session中的属性从内容持久化到本地文件, 路径   tomcat\work\Catalina\localhost\myweb2 

4、再次启动 tomcat 服务器, 再次访问; 这时由于 student1 没有实现Serializable 序列化接口,所以该对象没有被持久化到本地;而 student2 实现了Serializable接口,其信息被持久化到本地,即可以恢复上一次会话;

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值