cookie的使用,并用cookie实现购物车功能

阅读更多

大型网站一般都用cookie,因为session的会在客户端生成,是服务器压力增大,下面我来介绍一下,cookie的原理和使用

原理如图


cookie的使用,并用cookie实现购物车功能_第1张图片

使用方法:如如下代码demo1生成cookie,demo2获得cookie

demo1:

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

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

public class CookieDemo1 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		Cookie cookie = new Cookie("lastTime", new Date().toLocaleString());
		cookie.setMaxAge(60 * 60);
		cookie.setValue(new Date().toLocaleString());
		cookie.setPath(request.getContextPath());// 设置的是有效路劲,如果没有设置,那就表示当前路径
		System.out.println(request.getContextPath());
		response.addCookie(cookie);

	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}

 demo2:

 

package com.itcast.servlet;

import java.io.IOException;

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

public class CookieDemo2 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		Cookie[] cookie = request.getCookies();
		for (int i = 0; cookie != null && i < cookie.length; i++) {
			if ("lastTime".equals(cookie[i].getName())) {
				response.getWriter().write(cookie[i].getValue());
				System.out.println(cookie[i].getValue());
			} else if (cookie == null) {
				response.getWriter().write("您是首次访问本站");
				Cookie[] cookies = request.getCookies();
			}
		}

	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}
cookie普遍应用于购物车,是一个减缓服务器压力的好技术,下面我来用4个类为大家模拟一下买书购物功能:

 

 1.书类javabean

 

package cn.itcast.cookie.javabean;

public class Book {
	private String id;
	private String name;
	private String author;
	private String price;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public Book() {
		super();
		// TODO Auto-generated constructor stub
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getAuthor() {
		return author;
	}

	public void setAuthor(String author) {
		this.author = author;
	}

	public String getPrice() {
		return price;
	}

	public void setPrice(String price) {
		this.price = price;
	}

	public Book(String id, String name, String author, String price) {
		super();
		this.id = id;
		this.name = name;
		this.author = author;
		this.price = price;
	}

}

 2.书店的模拟类,一般用数据库,但是这里我们模拟一些数据:package cn.itcast.cookie.javabean;

 

import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;

public class DB {
	private static Map books = new LinkedHashMap();

	public static Collection getAll() {
		return books.values();
	}

	static {
		books.put("1", new Book("1", "php实战", "老路", "hello"));
		books.put("2", new Book("2", "android开发", "老徐", "110"));
		books.put("3", new Book("3", "jdbc开发", "老黎", "106"));
		books.put("4", new Book("4", "c++算法", "老方", "107"));
	}

	public static Book Findbook(String bookid) {
		return books.get(bookid);
	}
}

 3.这个类,有两个功能,第一个,显示全部的书,第二个,在你买书后,刷新能显示你曾经浏览过的书

 

package com.itcast.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;

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

import cn.itcast.cookie.javabean.Book;
import cn.itcast.cookie.javabean.DB;

public class ListBookServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		request.getParameter("id");
		// 获得商品
		Collection books = DB.getAll();
		// 显示商品
		for (Book book : books) {
			out.write("" + book.getName() + "
"); } String bookHistory = null; Cookie[] cookies = request.getCookies(); for (int i = 0; cookies != null && i < cookies.length; i++) { if ("BookHistory".equals(cookies[i].getName())) { bookHistory = cookies[i].getValue(); break; } } out.write("您浏览过的商品:
"); String[] strs = bookHistory.split("\\-");// 将获得的字符串拆分,获取里面的id,用来找到每一本书 for (int j = 0; j < strs.length; j++) { System.out.println("strs[i]=" + strs[j]); Book book = DB.Findbook(strs[j]); out.write(book.getName() + "
"); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }

 

 4.显示你购买商品的详细信息,并将你所有的购买的商品的id,拼接成一个1-2-3格式的字符串

 

package com.itcast.servlet;

import java.io.IOException;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;

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

import cn.itcast.cookie.javabean.Book;
import cn.itcast.cookie.javabean.DB;

public class ShowBookInfo extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		String id = request.getParameter("id");
		Book book = DB.Findbook(id);
		String BookHistory = makeBookHistory(request, book.getId());
		response.getWriter().write(
				"" + book.getName() + "
" + book.getAuthor() + "
" + book.getPrice() + "
"); Cookie cookie = new Cookie("BookHistory", BookHistory); response.addCookie(cookie); } private String makeBookHistory(HttpServletRequest request, String id) { Cookie[] cookies = request.getCookies(); String BookHistory = null; for (int i = 0; cookies != null && i < cookies.length; i++) { if ("BookHistory".equals(cookies[i].getName())) { BookHistory = cookies[i].getValue(); break; } } if (BookHistory == null) { return id; } String[] strs = BookHistory.split("-");//如果前面获得的id不是null,将返回来的字符串拆分,获得所有的id,存到String[]中 List list = Arrays.asList(strs); LinkedList ids = new LinkedList();//添加到LinkedList,是为了能按照先后顺序显示 ids.addAll(list); if (ids.contains(id)) {// 如果有,移除,并加到第一个 ids.remove(id);// ids.addFirst(id); } if (ids.size() == 3) {//最多显示3个浏览过的商品,如果超过,就删除最后一个 ids.remove(ids.size() - 1); } else { ids.addFirst(id); } StringBuffer sb = new StringBuffer(); for (String str : ids) {//将所有的id,合并成一个1-2-3的字符串,因为一次只能储存一个数据,在cookie中,所以用这个来储存多个id sb.append(str + "-"); } sb.deleteCharAt(sb.length() - 1); return sb.toString(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
 

 

  • cookie的使用,并用cookie实现购物车功能_第2张图片
  • 大小: 23.2 KB
  • 查看图片附件

你可能感兴趣的:(cookie,购物车,javaee)