学习目标:
什么是cookie,掌握cookie对象的使用
什么是Session,掌握Session对象的使用
文章目录
- Javaweb(会话以及会话管理技术)
- 前言
- 一、会话概述
- cookie对象
- 1.1什么是cookie
- 1.2为什么要cookie
- 1.3 cookie API
- 二、Session对象
- 2.1创建封装图书信息类
- Book的java类
- 数据库模拟BookDB的java类
- ListBookServlet的Servlet类
- PurchaseServlet的Servlet类
- CartServlet的Servlet类
前言 一、会话概述
Web应用中的会话类似于生活的打电话过程,它指的是一个客户端(浏览器)与Web服务器之间的连续发生的一系列请求响应过程,例如一个用户在网站上的一整个购物过程就是一个会话。
cookie对象 1.1什么是cookie类似于商场中办理的会员卡,每次去商场都能通过这张卡来识别你的用户信息,并对你的消费记录。这样,当该浏览器再次访问服务器的时候,都会在请求头中将cookie发送给服务器,方便服务器对浏览器做出正确的响应。
服务向客户端发送cookie时,会在HTTP响应字段中增加Set-cookie响应字段。
Set-cookie头字段中设置的cookie遵循一定语法格式,具体示例如下:
Set-cookie: user=itcast; path=/ ;
user表示cookie的名称,itcast表示cookie的值,Path表示cookie的属性。
因为HTTP协议是无状态的,对于一个浏览器发出的请求,服务器无法区分是不是同一个来源,无法知道上一次用户做了什么。所以,需要额外的数据用于维护会话。 cookie 正是这样的一段随HTTP请求一起被传递的额外数据,用于维护浏览器和服务器的会话。
1.3 cookie API为了封装cookie信息,在Serlet API中提供了一个javax. serttp.Cooke类,该类包含了生成cookie信息和提取cookie信息各个属性的方法。cookie的构造方法和常用方法具体
1.构造方法
cookie类有且仅有-一个构造方法,具体语法格式如下。
public cookie (java.lang.String name, java.lang .String value)
在cookie的构造方法中,参数name用于指定cookie的名称,value 用于指定cookie的值。需要注意的是,cookie 一旦创建,它的名称就不能更改,cookie 的值可以为任何值,创建后允许被修改。
[任务5-1 ]显示用户上次访问时间
[任务目标]
当用户访问某些Web应用时,经常会显示出该用户上-次的访问时间。例如,QQ登录成功后,会显示用户上次的登录时间。通过本任务,读者将学会如何使用cookie技术实现显示用户上次的访问时间的功能。
[实现步骤]
1.创建Servlet
在Eclipse中新建Web项目chapter05 ,并在该项目下新建-一个 名称为cn.itcast.chapter05.cookie.example的包,在该包中编写一个名称为LastAccessServlet的Servlet类,该类主要用于实现获取cookie信息并将当前时间作为cookie值发送给客户端。LastAccessServlet 类的具体实现代码如下所示。
** LastAccessServletjava**
package cn.itcast.chapter05.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("/last")
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 books=BookDB.getAll();
PrintWriter out = response.getWriter();
out.print("本网站售卖的书如下:");
for(Book b:books) {
String name= b.getName();
String id=b.getId();
String url="+id+"'>点击购买";
out.print("图书名称:"+name+" "+url+"
");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
(2)创建一个 名称为PurchaseServlet的Servlet类,其实现代码。
PurchaseServlet的Servlet类package cn.itcast.chapter05.session;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
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;
import javax.servlet.http.HttpSession;
@WebServlet("/purcharse")
public class PucharseServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public PucharseServlet() {
super();
// TODO Auto-generated constructor stub
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//response.getWriter().append("Served at: ").append(request.getContextPath());
response.setContentType("text/html;charset=utf-8");
String id=request.getParameter("id");
if(id==null){
response.sendRedirect("/chapter05/list");
return;
}
Book book =BookDB.getBook(id);
HttpSession session=request.getSession();
List list=(List) session.getAttribute("cart");
if(list==null) {
list=new ArrayList();
session.setAttribute("cart", list);
}
list.add(book);
cookie cookie = new cookie("JESSIONID", session.getId());
response.addcookie(cookie);
response.sendRedirect("/chapter05/cart");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
以上实现了两个功能,一一个是将用户购买的图书信息保存到Session对象中:一个是在用户购买图书结束后,将页面重定向到用户已经购买的图书列表。该类在实现时,通过ArrayList集合模拟了一个购物车,然后将购买的所有图书添加到购物车中,最后通过Session对象传递给CartServlet,由CartServlet 展示用户已经购买的图书。
(3)创建一一个名称为CartServlet的Servlet类,该类主要用于展示用户已经购买的图书列表,其实现代码。
CartServlet的Servlet类package cn.itcast.chapter05.session;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/cart")
public class CartServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//response.getWriter().append("Served at: ").append(request.getContextPath());
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
List cart=null;
HttpSession session = request.getSession(false);
boolean cartflag=false;
if(session==null) {
cartflag=false;
}else {
cart=(List)session.getAttribute("cart");
if(cart==null) {
cartflag=false;
}
}
if(!cartflag) {
out.print("对不起,请前往购买图书");
}else {
out.print("购买图书如下:"+"
");
for(Book b:cart) {
out.print("购买图书:"+b.getName()+"
");
}
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
4.运行项目,查看结果
在web.xml中对相应的Servlet进行配置,然后启动Tomcat服务器,在浏览器中输入地址http://ocalhost:9999/chapter05/ListBookServlet”访问ListBookServlet,浏览器显示的结果如



