018_Session

一. Session简介

1. Session是基于Cookie的一种会话机制。 Cookie是服务器返回一小份数据给客户端, 并且存放在客户端上。Session数据存放在服务器端。

2. Session常用API

2.1. 得到会话ID: String id = session.getId();

2.2. 存值: session.setAttribute(name, value);

2.3. 取值: session.getAttribute(name);

2.4. 移除值: session.removeAttribute(name);

2.5. 强制干掉会话, 里面存放的任何数据就都没有了: session.invalidate();

3. Session何时创建: 如果有在servlet里面调用了request.getSession()就创建了一个Session。

4. Session何时销毁

4.1. session 是存放在服务器的内存中的一份数据, 即使关了浏览器, session也不会销毁。

4.2. 关闭服务器session销毁。

4.3. session会话时间过期。session默认有效期是30分钟。

4.4. 主动调用session.invalidate()或者session.removeAttribute(name)清除session。

二. Session购物车实例

1. 新建一个UseSession的Web工程

2. 在WebContent下新建一个index.html

3. 编辑index.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>商品列表</title>
	</head>
	<body>
		<a href="CartServlet.action?name=华为">华为</a><br/>
		<a href="CartServlet.action?name=小米">小米</a><br/>
		<a href="CartServlet.action?name=vivo">vivo</a><br/>
		<a href="CartServlet.action?name=金立">金立</a><br/>
		<a href="CartServlet.action?name=魅族">魅族</a><br/>
		<a href="CartServlet.action?name=oppo">oppo</a><br/>
	</body>
</html>

4. 新建CartServlet.java和ClearCartList.java

5. 编辑CartServlet.java

package com.lywgames.myservlet;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CartServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 获取商品id
		String name = new String(req.getParameter("name").getBytes("ISO8859-1"), "UTF-8");
		// 获取session中的cartlist
		@SuppressWarnings("unchecked")
		Map<String, Integer> cartlist = (Map<String, Integer>)req.getSession().getAttribute("cartlist");
		// 如果cartlist为空, session中还没有购物车
		if(cartlist == null){
			cartlist = new HashMap<String, Integer>();
			cartlist.put(name, 1);
		}else{
			cartlist.put(name, cartlist.get(name) == null ? 1 : cartlist.get(name) + 1);
		}
		req.getSession().setAttribute("cartlist", cartlist);
		
		resp.setContentType("text/html;charset=utf-8");
		
		StringBuffer sb = new StringBuffer();
		sb.append("<!DOCTYPE html>").append("\r\n");
		sb.append("<html>").append("\r\n");
		sb.append("<head>").append("\r\n");
		sb.append("<meta charset='UTF-8'>").append("\r\n");
		sb.append("<title>购物车</title>").append("\r\n");
		sb.append("</head>").append("\r\n");
		sb.append("<body>").append("\r\n");
		for (Entry<String, Integer> kv : cartlist.entrySet()) {
			sb.append("<h3>").append(kv.getKey()).append(": ").append(kv.getValue()).append("</h3>").append("\r\n");
		}
		sb.append("<h1><a href='index.html'>继续购物</a></h1>").append("\r\n");
		sb.append("<h1><a href='ClearCartList.action'>清空购物车</a></h1>").append("\r\n");
		sb.append("</body>").append("\r\n");
		sb.append("</html>").append("\r\n");
		resp.getWriter().println(sb.toString());
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}
}

6. 编辑ClearCartList.java

package com.lywgames.myservlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ClearCartList extends HttpServlet {
	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 清楚cartlist的session缓存
		req.getSession().removeAttribute("cartlist");
		resp.sendRedirect("index.html");
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}
}

7. 编辑web.xml

8. 部署运行

9. 点击几个手机, 有的手机多点击几次, 到购物车页面查看

10. 点击清空购物车, 清空cartlist的session缓存, 继续购物

11. 点击华为, 新的购物车信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值