首页 > 代码库 > Session
Session
一、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+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="http://www.mamicode.com/"> <title>购物车</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="http://www.mamicode.com/styles.css"> --> </head> <body> <h3>手电筒<a href="http://www.mamicode.com/day11/cart?id=1">加入购物车</a></h3> <h3>冰箱<a href="http://www.mamicode.com/day11/cart?id=2">加入购物车</a></h3> <h3>电视<a href="http://www.mamicode.com/day11/cart?id=3">加入购物车</a></h3> <h3>洗衣机<a href="http://www.mamicode.com/day11/cart?id=4">加入购物车</a></h3> <h3>电脑<a href="http://www.mamicode.com/day11/cart?id=5">加入购物车</a></h3> </body> </html>
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<String,Integer> 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<String, Integer> cart = (Map<String, Integer>) session.getAttribute("cart"); //如果第一次访问 if(cart == null){ cart = new HashMap<String, Integer>(); 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("<h3><a href=http://www.mamicode.com/‘/day11/session/cartList.jsp‘>继续购物|去结算");; } 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+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="http://www.mamicode.com/"> <title>My JSP ‘pay.jsp‘ starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="http://www.mamicode.com/styles.css"> --> </head> <body> <h3>结算页面</h3> <% Map<String,Integer> cart = (Map<String,Integer>)session.getAttribute("cart"); if(cart != null){ for(Iterator<Map.Entry<String,Integer>> iterator = cart.entrySet().iterator();iterator.hasNext();){ Map.Entry<String,Integer> c = iterator.next(); String name = c.getKey(); Integer value = c.getValue(); %> 你购买的商品是<%=name%>,数量是<%=value%>个<br/> <% } }else{ %> <h3>你还没有购物,请<a href="http://www.mamicode.com/day11/session/cartList.jsp">购物</a>吧</h3> <% } %> </body> </html>
本文出自 “11831428” 博客,请务必保留此出处http://11841428.blog.51cto.com/11831428/1907561
Session
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。