您的位置:首页 > 编程语言 > Java开发

JavaWeb的Cookie技术显示历史商品( 信息 )浏览记录(学习方立勋老师的教程)

2016-01-12 22:11 686 查看
先上图:


package com.cookie;

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

/**
* 保存商品信息
* @author TS
*
*/
public class Db {

public static Map<String,Book> map = new LinkedHashMap<String,Book>();

static{
map.put("1", new Book("1","JavaWeb开发", "张三", "这是一本好书"));
map.put("2", new Book("2","Spring开发", "李四", "这是一本好书"));
map.put("3", new Book("3","Mybatis开发", "王五", "这是一本好书"));
map.put("4", new Book("4","Android开发", "赵六", "这是一本好书"));
map.put("5", new Book("5","JavaScript权威指南", "淘宝前端团队", "这是一本好书"));
}

/**
* 获取所有的书
* @return map
*/
public static Map<String,Book> getBooks(){
return map;
}
}

一、访问商品首页列表:

package com.cookie;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;
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;
/**
*
* @author TS
*
*/
@WebServlet("/productServlet")
public class ProductServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//显示所有商品列表
PrintWriter out = response.getWriter();
out.write("本网站有如下商品:<br/>");
Map<String,Book> books = Db.getBooks();
for (Map.Entry<String, Book> entry : books.entrySet()) {
Book book = entry.getValue();
out.write("<a href='/JavaWeb/productIDServlet?id="+book.getId()+"'target='_blank'>"+book.getName() +"'</a></br/>");
}
out.println("您曾经浏览过:");
//显示曾经浏览过的商品
Cookie[] cookies = request.getCookies();
for (int i = 0; cookies!=null && i < cookies.length; i++) {
if(cookies[i].getName().equals("bookHistory")){
String[] ids = cookies[i].getValue().split("\\,");
for (String id : ids) {
Book book = Db.getBooks().get(id);
out.print(book.getName()+"<br/>");
}
}
}
}

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

二、访问商品首页列表:

package com.cookie;

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

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;
/**
*
* @author TS
*
*/
@WebServlet("/productIDServlet")
public class ProductIDServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//显示单个商品详细信息
String id = request.getParameter("id");
Book book = Db.getBooks().get(id);
PrintWriter out = response.getWriter();
out.write(book.getId() + "<br/>");
out.write(book.getName()+ "<br/>");
out.write(book.getAuthor() + "<br/>");
out.write(book.getDescription() + "<br/>");
//构建Cookie发送给客户端浏览器
String cookieValue = buildCookie(id,request);
Cookie cookie = new Cookie("bookHistory",cookieValue);
cookie.setMaxAge(30*1*24*3600);
cookie.setPath("/JavaWeb"); //web站点
response.addCookie(cookie);
}

/**
* 构建Cookie发送给客户端浏览器(自多)显示3个信息
* @param id
* @param request
* @return
*/
private String buildCookie(String id,HttpServletRequest request) {

//1.没有带Cookie.bookHistory=null 1 //没有带Cookie
//2.带了Cookie.bookHistory=2,5,1 1,2,5 //带过来了Cookie,包含当前的值, 返回
//3.Cookie.bookHistory=2,5,4 1,2,5 //带来了Cookie,没有包含当前看到的值,清除最后Cookie,加入新的ID
//4.Cookie.bookHistory=2,5 1,2,5 //没有带满Cookie,把新Cookie加入到最前
String bookHistory = null;
Cookie[] cookies = request.getCookies();
for (int i = 0; cookies!=null && i < cookies.length; i++) {
if(cookies[i].getName().equals("bookHistory")){
bookHistory = cookies[i].getValue();
}
}
if(bookHistory == null){ //1.没有带Cookie.bookHistory=null
return id;
}
LinkedList<String> list = new LinkedList<String>( Arrays.asList( bookHistory.split("\\,") ) );
if(list.contains(id)){ //带过来了Cookie,包含当前的值
list.remove(id);
list.addFirst(id);
}else{ //带来了Cookie,没有包含当前看到的值,清除最后Cookie,加入新的ID
if(list.size()>=3){
list.removeLast();
list.addFirst(id);
}else{

list.addFirst(id); //没有带满Cookie,把新Cookie加入到最前
}
}
StringBuffer sb = new StringBuffer();
for (String myid : list) {
sb.append(myid+",");
}
sb.deleteCharAt(sb.length()-1);
return sb.toString();
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: