java web 6

会话及其会话技术

1.1会话概叙

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

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

( 2)使用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类常用的方法:
2.回写(响应)cookie到浏览器端: response.addCookie(cookie);
3.得到cookie的名称 :String key= cookie.getName(),
得到cookie的值: String value =cookie.getValue();
4.给cookie设置生命时长: setMaxAge(int sr);
比如:cookie.setMaxAge(606024*7),说明cookie能存活7天;
cookie分类:
第一类:会话级别cookie,浏览器关闭,cookie对象就销毁了。
第二类:持久化cookie,通过setMaxAge这个方法来设置。
5.给cookie设置路径,设置域名:
setPath(路径的url),setDomain(域名);
比如:域名就是服务器名称,比如说:www.baidu.com
6.得到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
在这里插入图片描述
在这里插入图片描述

2020080605013

おすすめ

転載: blog.csdn.net/qq_55689246/article/details/121276297