一、HttpSession简介

  session也是域对象之一,它的范围是在一个会话范围内有效。session既然是域对象,那么当然有getAttribute()和setAttribute()方法了。

  在一个会话内共享一个session对象,所以session中可以保存一个会话内的数据,例如当前用户的信息。

  session的范围大于request,可以在一个会话中多个请求之间共享数据。但session的范围小于application,session不能在多个用户之间共享数据。


二、获取session对象

  使用request.getSession()方法就可以获取session对象了。

  有了session,就不用使用cookie来跟踪会话了!但session不能像Cookie那样长命,一旦用户关闭浏览器窗口,那么session就死掉了。

  

三、简单购物车的实现

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>



  
    ">
    
    购物车
    
	
	
	    
	
	
	

  
  
  
  	

手电筒加入购物车

  

冰箱加入购物车

  

电视加入购物车

  

洗衣机加入购物车

  

电脑加入购物车

  
package cn.session;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
 * 简单购物车的实现
 */
@SuppressWarnings("serial")
public class CartServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		/**
		 * 1.购物车 Map cart
		 * 2.先获取购物车 判断是否是第一次访问
		 * 	第一次访问,创建购物车,把商品的名称和数量加入到购物车,存入Session
		 *  不是第一次访问
		 *  	判断是否包含该商品,通过名称判断
		 *  		如果包含,数量+1 存入Session
		 *  		如果不包含,存入购物车 存入Session
		 *  3.要么继续购物 要么结算
		 */
		//获取参数
		String id = request.getParameter("id");
		//购物车存入的是商品的名称和数量
		String[] names = {"手电筒","冰箱","电视","洗衣机","电脑"};
		String name = names[Integer.parseInt(id)-1];
		//从session中获取购物车
		HttpSession session = request.getSession();
		Map cart = (Map) session.getAttribute("cart");
		//如果第一次访问
		if(cart == null){
			cart = new HashMap();
			cart.put(name, 1);
			session.setAttribute("cart",cart);
		}else{
			if(cart.containsKey(name)){
				cart.put(name, (Integer)(cart.get(name))+1);
				session.setAttribute("cart",cart );
			}else{
				cart.put(name, 1);
				session.setAttribute("cart", cart);
			}
		}
		//要么继续购物,要么结算
		response.setContentType("text/html;charset=utf-8");
		response.getWriter().print("

继续购物|去结算

");; } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>



  
    ">
    
    My JSP 'pay.jsp' starting page
    
	
	
	    
	
	
	

  
  
  
    

结算页面

<% Map cart = (Map)session.getAttribute("cart");   if(cart != null){   for(Iterator> iterator = cart.entrySet().iterator();iterator.hasNext();){   Map.Entry c = iterator.next();   String name = c.getKey();   Integer value = c.getValue(); %> 你购买的商品是<%=name%>,数量是<%=value%>个
<%    }   }else{ %>

你还没有购物,请购物吧

<%    }  %>