cookie技术案例-用户浏览商品的记录

项目名称:/cookieDemo2Record

需求:
模拟用户在网上商城,浏览商品,同时显示商品的浏览记录
1.查询所有商品页面-index.jsp/index.html
 a.查询所有商品的按钮-----FindAllBooksServlet.java-com.ghsy.servlet
2.显示商城的商品
 a.用bean存储商品-com.ghsy.domain
 b.db包中的方法构造商品数据-com.ghsy.db
 c.用jsp页面显示商品的信息-show.jsp
  1.用表格列表的方式显示商品的信息。
  2.表格的最后一个字段,添加查询详情----FindBookByIDServlet.java-com.ghsy.servlet
  3.查询缓存,显示已经查看过的列表在所有商品信息的下方
3.记录查询记录
 a.点击查询详情按钮,显示商品的详细信息--showDetial.jsp
 b.保存已经查询过的商品信息到缓存中
  缓存的选择-cookie
 c.在显示商品的详情页,添加返回按钮,返回所有商品列表页
 d.回到商品列表页(回到上面的2,所以2中需要添加获取缓存信息,并显示)

项目目录结构:

项目源码:

index.jsp

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="/cookieDemo2Record/FindAllBooksServlet">查询所有</a>
</body>
</html>


 

show.jsp

<%@page import="java.util.HashMap"%>
<%@page import="com.ghsy.domain.Book"%>
<%@page import="java.util.Map"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>所有商品信息</h3>
<table  border="1">
	<tr>
		<td>编号</td>
		<td>书名</td>
		<td>作者</td>
		<td>价格</td>
		<td>详情</td>
	</tr>

<%
Map<String,Book> bookMap=(Map<String,Book>)request.getAttribute("bookMap");
for(Map.Entry<String,Book> entry:bookMap.entrySet()){
	Book book=entry.getValue();	
%>
	<tr>
		<td><%=book.getId() %></td>
		<td><%=book.getTitle() %></td>
		<td><%=book.getAnthor() %></td>
		<td><%=book.getPrice() %></td>
		<td><a href="/cookieDemo2Record/FindBookByIDServlet?id=<%=book.getId()%>">点击详情</a></td>
	</tr>
<% 
}
%>
</table>
<h3>浏览的商品记录:</h3>
<%
String bookCacheIds=null;
Cookie[] cookies=request.getCookies();
if(cookies!=null){
	for(Cookie cookie:cookies){
		if("bookCacheIds".equals(cookie.getName())){
			bookCacheIds=cookie.getValue();
			System.out.println("已经查询过的商品的id"+bookCacheIds);
			out.print("<br>"+bookCacheIds+"<br>");
		}
	}
}
%>
</body>
</html>


 

showdetails.jsp

<%@page import="com.ghsy.domain.Book"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>详细信息:</h3>
<%
Book book=(Book)request.getAttribute("book");
%>
<table>
	<tr>
		<td><%=book.getId() %></td>
		<td><%=book.getTitle() %></td>
		<td><%=book.getAnthor() %></td>
		<td><%=book.getPrice()%></td>
		<td>是有那么一堆的描述是不是啊,给力的</td>
	</tr>
	<a href="/cookieDemo2Record/FindAllBooksServlet">返回</a>
</table>
</body>
</html>

 

BookDB.java

package com.ghsy.db;

import java.util.HashMap;
import java.util.Map;

import com.ghsy.domain.Book;
//需要提高一个能力---如何选择数据结构
public class BookDB {
	//选择Map来存储信息  key,value:id,
	public static Map<String, Book> bookMap=new HashMap<String, Book>();
	//static 代码区域模拟商品的数据信息
	static{
		bookMap.put("p001", new Book("p001", "java", "leon", "98"));
		bookMap.put("p002", new Book("p002", "android", "胡玉勉", "98"));
		bookMap.put("p003", new Book("p003", "c#", "刘德华", "76"));
		bookMap.put("p004", new Book("p004", "object c", "藏学有", "87"));
	}
	//获得所有模拟数据的信心
	public static Map<String, Book> getData(){
		return bookMap;
	}
	//根据编号查询book的详细信息
	public static Book findBookByID(String id){
		Book book=null;
		for(Map.Entry<String, Book> entry:bookMap.entrySet()){
			if(id.equals(entry.getValue().getId())){
				book=entry.getValue();
			}
		}
		return book;
	}
}


 

Book.java

package com.ghsy.domain;

public class Book {
	private String id;
	private String title;
	private String anthor;
	private String price;
	
	public Book() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Book(String id, String title, String anthor, String price) {
		super();
		this.id = id;
		this.title = title;
		this.anthor = anthor;
		this.price = price;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getAnthor() {
		return anthor;
	}
	public void setAnthor(String anthor) {
		this.anthor = anthor;
	}
	public String getPrice() {
		return price;
	}
	public void setPrice(String price) {
		this.price = price;
	}
	
}


 

FindAllBookServlet.java

package com.ghsy.servlet;

import java.io.IOException;
import java.util.Map;

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

import com.ghsy.db.BookDB;
import com.ghsy.domain.Book;

public class FindAllBooksServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//test
		System.out.println("doGet() FindAllBooksServlet ");
		//获取所有商品信息
		Map<String,Book> bookMap=BookDB.getData();
		//request 对象存储book信息,跳转到另一个servlet(show.jsp页面)---共享数据操作
		//直接将bookMap存储。
		request.setAttribute("bookMap", bookMap);
		//跳转
		request.getRequestDispatcher("show.jsp").forward(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

}

 

FindBookByIdServlet.java

package com.ghsy.servlet;

import java.io.IOException;
import java.util.ArrayList;
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 com.ghsy.db.BookDB;
import com.ghsy.domain.Book;

/**
 * Servlet implementation class FindBookByIDServlet
 */
public class FindBookByIDServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doGet FindBookByIDServlet");
		String id=request.getParameter("id");
		System.out.println("所查询商品的详情id:"+id);
		Book book=BookDB.findBookByID(id);
		//request 属性存储信息
		request.setAttribute("book", book);
		//对已经查询过的商品详情保存到cookie中
		//#1.获取本次请求的对应cookie;有可能是第一次访问,没有cookie哦
		Cookie[] cookies=request.getCookies();
		String bookCacheIds=null;
		if(cookies!=null){
			for(Cookie cookie:cookies){
				if("bookCacheIds".equals(cookie.getName())){
					bookCacheIds=cookie.getValue();
					break;
				}
			}
		}
		//#2指定顺序 拼写所有id
		List<String> idsList = new ArrayList<String>();
		idsList.add(id);//首先添加当前的id
		// #2.1 将cookie缓存数据使用逗号分隔
		if(bookCacheIds != null){
			String[] cookieIds = bookCacheIds.split(", ");
			for(String tempid : cookieIds){
				if(!tempid.equals(id)){	//当前商品id已经在第一位
					idsList.add(tempid);
				}
			}
		}
		//将cookie缓存,并发送了浏览器端
		String idsStr=idsList.toString();
		System.out.println(idsStr);
		Cookie cookie=new Cookie("bookCacheIds",idsStr.substring(1, idsStr.length()-1));
		cookie.setPath("/");
		response.addCookie(cookie);
		//跳转到详细信息页面
		request.getRequestDispatcher("/showDetails.jsp").forward(request, response);
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

}


 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hymKing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值