Java Webday6

会话及其会话技术

1.1会话概叙
就是我跟你聊天时的你问我答的过程就是对话。
同样,在客户端与服务器端交互的过程中,也会产生一些数据。例如,用户甲和乙分别登录了购物网站,甲购买了一个Nokia手机,乙购买了一个iPad,当这两个用户结账时,Web服务器需要对用户甲和乙的信息分别进行保存。在前面章这两个对象都不可行,具体原因如下。

HttpServletRequest对象,该对象只能保存本次请求所传递的数据。由于购买和结账是两个不同的请求,因此,在发送结账请求时,之前购买请求中的数据将会丢失。

使用ServletContext 对象保存数据时,由于同一个Web应用共享的是同一个ServletContext对象,因此,当用户在发送结账请求时,由于无法区分哪些商品是哪个用户所购买的,而会将该购物网站中所有用户购买的商品进行结算,这显然也是不可行的。

为了保存会话过程中产生的数据,在Servlet技术中,提供了两个用于保存会话数据的对象,分别是Cookie和Session。关于Cookie和Session的相关知识
如下:

2Cookie对象
Cookie是一种对话技术,它用于将会话过程中的数据保存到用户的浏览器中,从而使浏览器和服务器可以更好地进行数据交互。

2.1 什么是Cookie
在现实中,就如同再超市购物时,超市经常会赠送顾客一-张会员卡, 卡上记录用户的个人信息(姓名、手机号等)、消费额度和积分额度等。顾客一旦接受了会员卡,以后每次光临该商场时,都可以使用这张会员卡,商场也将根据会员卡上的消费记录计算会员的优惠额度和累加积分。在Web应用中,Cookie的功能类似于这张会员卡,当用户通过浏览器访问Web服务器时,服务器会给客户端发送一些信息, 这些信息都保存在Cookie 中这样,当该浏览器再次访问服务器时,都会在请求头中将Cookie 发送给服务器,方便服务器对浏览器做出正确的响应。
会在HTTP响应头字段中增加Set-coolie响应头
Set-cookie : user=itcast; Path=/;

2.2 Cookie常用的API
1.构造方法:
1.得到cookie对象:Cookie cookie = new Cookie(String key,String value);
在Cookie的构造方法中,参数name用于指定Cookie的名称,value用于指定Gookie的值。需要注意的是,Cookie-旦创建,它的名称就不能更改,Cookie 的值可以为任何值,创建后允许被修改。
2.Cookie类常用的方法:
1.回写(响应)cookie到浏览器端: response.addCookie(cookie);
2.得到cookie的名称 :String key= cookie.getName(),
得到cookie的值: String value =cookie.getValue();
3.给cookie设置生命时长: setMaxAge(int sr);
比如:cookie.setMaxAge(606024*7),说明cookie能存活7天;
在这里插入图片描述

cookie分类:
第一类:会话级别cookie,浏览器关闭,cookie对象就销毁了。
第二类:持久化cookie,通过setMaxAge这个方法来设置。
4.给cookie设置路径,设置域名:
setPath(路径的url),setDomain(域名);
比如:域名就是服务器名称,比如说:www.baidu.com
5.得到cookie: Cookie[] cookies = request.getCookies();

2.3 显示用户的上次访问时间:

package cn.itcast.chapte05.cookie;

import java.io.IOException;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class LastAcess
 */
@WebServlet("/list")
public class LastAcess extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		response.setContentType("text/html;charset=utf-8");
		Cookie[] cookies = request.getCookies();
		String lasttime=null;
		for (int i=0;cookies!=null&&i<cookies.length;i++) {
			String name=cookies[i].getName();
			if("lastAccess".equals(name)) {
				lasttime=cookies[i].getValue();
			}
		}
		if(lasttime==null) {
			response.getWriter().print("您是首次访问本站!!!");
		}else {
			response.getWriter().print("你上次访问的时间是:"+lasttime);
		}
		
		String time=String.format("%tF%<tT", new Date());
		Cookie cookie= new Cookie("lastAccess",time);
		response.addCookie(cookie);
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

在这里插入图片描述
在这里插入图片描述
3 Session对象
3.1 什么是session

session是一种会话管理技术,session用来保存会话过程中的数据,保存的数据存储到服务器端。
session原理:基于cookie实现的,更确切的说是基于会话级别的cookie实现的。
3.2 HttpSession API
session常用方法:
1.得到session的id(JESSIONID对应的值): getId();
2.设置session的生命时长:setMaxInactiveInterval(int interval)
3.销毁session: invalidate();
得到session: HttpSession session = getSession();
session域对象:作用范围一次完整的会话(包含多个请求)
1.存值: setAttribute(String key,Object obj);
2.取值: Object obj =getAttribute(String key);
3.移除: removeAttribute(String key);
总结域对象:request域对象 session域对象 servletContext域对象,作用范围以次变大。
request域对象:作用范围一次请求,通常和转发操作配合使用
session域对象:作用范围一次会话,通常和重定向操作配合使用
servletContext域对象:作用范围整个项目,和重定向、转发操作都可以配合使用。

实现购物车
1.创建Book封装图书信息:Book
2.创建BookDB,模拟数据库,里面保存图书
3.提供图书的购买页面:ListBookServlet
4.添加购物车:PurcharseServlet
5.回显购物车图书信息:CartServlet
在这里插入图片描述
在这里插入图片描述
2020080605044

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bai3322732541

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值