会话及其会话技术
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;
@WebServlet("/list")
public class LastAcess extends HttpServlet {
private static final long serialVersionUID = 1L;
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 {
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
|