JSP内置对象——Session对象(2)

 HTTP协议是无状态的,即信息无法通过HTTP协议本身进传递。为了跟踪用户的操作状态,JSP使用一个叫HttpSession的对象实现用户状态的保存。session在第一个JSP页面被装载的时候自动创建,完成会话期管理。从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间反复连接,反复刷新一个页面,服务器通过session对象来区分是哪个客户。
表6-16 Session对象常用方法
方法名 描 述

  • public String getId() 取得session id;
  • public long getCreationTime() 取得session的创建时间 ;
  • public long getLastAccessedTime() 取得session的最后一次操作时间;
  • public boolean isNew() 判断是否是新的session(新用户);
  • public void invalidate() 让session失效 ;
  • Void removeAttribute(String name) 删除指定属性的属性值和属性名;
  • int getMaxInactiveInterval() 获取Session对象的生存时间
  • Void setAttribute(String name,Object obj) 设定指定名字的属性
  • object getAttribute(String name) 返回session对象中存储的每一个属性对象
  • public Enumeration getAttributeNames() 得到全部属性的名称
    说明:
  1. Session的信息保存在服务器端,Session的id保存在客户机的cookie中。

  2. Session一般在服务器上设置了一个30分钟的过期时间,当客户停止活动后自动失效。

  3. Session 中保存和检索的信息不能是基本数据类型如 int, double等,而必须是java的相应的对象,如Integer, Double。
    session.setAttribute(“price”, 10);
    int x=((Integer)session.getAttribute(“price”)).intValue();
    【案例】继续修改登录功能。利用session实现登陆成功在每个页面都显示当前在线的用户名,实现网站页面的访问限制,现用户注销和用户长时间不操作页面自动失效的功能。
    具体实现步骤:
    第一步:修改check.jsp,登陆成功时把用户名保存到session。
    if(“admin”.equals(name.trim())&&“123456”.equals(pwd)){
    //第一步创建cookie对象
    Cookie cookie1=new Cookie(“username”,name);
    Cookie cookie2=new Cookie(“password”,pwd);
    //第二部设置Cookie有效期
    cookie1.setMaxAge(72460*60);
    //弟三歩写cookie
    response.addCookie(cookie1);
    response.addCookie(cookie2);
    session.setAttribute(“username”, name);
    %>
    <jsp:forward page=“success.jsp”>
    <jsp:param value=“naike” name=“good”/>

    </jsp:forward>
    <%}
    第二步:在成功页面读取session中保存的用户信息
    String name=(String)session.getAttribute(“username”);
    第三步:实现页面的访问限制
    新建validate.jsp页面,实现登录验证,在,每个页面中把它包含进来,注意需要用静态包含

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<%String name=(String)session.getAttribute("username");
  if(name==null||name.isEmpty() ){
	  response.sendRedirect("fail.jsp");
  }
%>
</body>
</html>
Success.jsp:
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%@include  file="validate.jsp"%>
<% 
//int Integer  double   Double
//session.setAttribute("price", 10);
//int x=((Integer)session.getAttribute("price")).intValue();
//System.out.print(x);
request.setCharacterEncoding("utf-8");
//String name=request.getParameter("username");
 String good=request.getParameter("good");
    
%>
<%=name %>购买了<%=good %>登陆成功
<a href="cloth.jsp">衣服</a>
<a href="loginout.jsp">注销</a>
</body>
</html>

第四步:设置session的有效期,在check.jsp中添加如下代码:
session.setMaxInactiveInterval(60*10);
第五步实现用户注销,success.jsp中添加如下代码

<a href="loginout.jsp">注销</a>
Loginout.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
session.invalidate();
response.sendRedirect("fail.jsp");
%>
</body>
</html>

【案例】利用session实现购物车的功能

思路解析: session : 多个商品:集合类 List Set HashMap
ArrayList 篮子
第一次购物:
ArrayList car=new ArrayList();
Car.add(good);
Session.setAttibute(“car”,car);
第>=1次购物:
car=session.getAttribute(“car”);
car.add(good);
Session.setAttibute(“car”,car);
具体实现步骤:
第一步:购物页面buy.jsp

<%@ 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>
    
    
    <title>My JSP 'buy.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="styles.css">
	-->
  </head>
    <body>
   	<table>
  	<tr><td>商品名称</td><td>商品单价</td><td>购买</td></tr>
    <form action="addCar.jsp" method="post">
  	<tr><td>手机</td><td>2000</td><td><input type="submit" name="buy" value="购买"/></td></tr>
  	<!-- 表单中通过隐藏域把参数偷偷传给服务器的目标页面 -->
  	<input type="hidden" name="goodname" value="手机"/>
  	<input type="hidden" name="price" value="2000"/>

  </form>
   <form action="addCar.jsp" method="post">
     <tr><td>ipad</td><td>2000</td><td><input type="submit" name="buy" value="购买"/></td></tr> 
     <input type="hidden" name="goodname" value="ipad"/>
  	<input type="hidden" name="price" value="2000"/>
 </form>
  <form action="addCar.jsp" method="post">
  	 <tr><td>笔记本</td><td>2000</td><td><input type="submit" name="buy" value="购买"/></td></tr> 
  	 <input type="hidden" name="goodname" value="笔记本"/>
  	<input type="hidden" name="price" value="2000"/>
  	</form>
  <form action="addCar.jsp" method="post">
  	<tr><td>硬盘</td><td>2000</td><td><input type="submit" name="buy" value="购买"/></td></tr>
  	<input type="hidden" name="goodname" value="硬盘"/>
  	<input type="hidden" name="price" value="2000"/>
  </form>
  	</table>
  	
<a href="chap4/pay.jsp">查看购物车</a>
   
  </body>
</html>

第二步实现添加购物车和购物车显示 addCar.jsp

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值