用cookie技术实现向页面输出访问商品记录列表,再利用session技术实现购物车。
首先jsp页面代码
<span style="font-size:14px;"><%@page import="java.util.*"%>
<%@ 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>
<h1>商品列表</h1>
<ul>
<li><a href="/CookieProject/addCookie?id=1">电视机</a> <a href="/CookieProject/session?id=1">购买商品</a></li>
<li><a href="/CookieProject/addCookie?id=2">电冰箱</a> <a href="/CookieProject/session?id=2">购买商品</a></li>
<li><a href="/CookieProject/addCookie?id=3">二手电脑</a> <a href="/CookieProject/session?id=3">购买商品</a></li>
<li><a href="/CookieProject/addCookie?id=4">摩托车</a> <a href="/CookieProject/session?id=4">购买商品</a></li>
<li><a href="/CookieProject/addCookie?id=5">手机</a> <a href="/CookieProject/session?id=5">购买商品</a></li>
<li><a href="/CookieProject/addCookie?id=6">微波炉</a> <a href="/CookieProject/session?id=6">购买商品</a></li>
</ul>
<hr/>
<h1>最近访问记录:</h1><h4><a href="/CookieProject/clean">清空</a></h4><br/>
<%
String[] str={"电视机","电冰箱","二手电脑","摩托车","手机","微波炉"};
Cookie[] cookies=request.getCookies();
String visitList=null;
if(cookies!=null){
for(Cookie cookie:cookies){
if(cookie.getName().equals("visitList")){
visitList=cookie.getValue();
break;
}
}
if(visitList==null){//商品列表不存在
out.println("无");
}else{
String[] existId=visitList.split(",");
for(String s:existId){
int i=Integer.parseInt(s);
out.println(str[i-1]);
}
}
}
%>
<HR style="FILTER: alpha(opacity=100,finishopacity=0,style=3)" width="80%" color=#987cb9 SIZE=3>
<HR style="FILTER: progid:DXImageTransform.Microsoft.Shadow(color:#987cb9,direction:145,strength:15)" width="80%" color=#987cb9 SIZE=1>
<h1>您的购物车</h1>
<%
Map<String,Integer>cart=(Map<String,Integer>)session.getAttribute("cart");
if(cart!=null){//遍历map输出
Set<String>keys=cart.keySet();
for(String id:keys){
int num=cart.get(id);
int idInt=Integer.parseInt(id);
String productName=str[idInt-1];
out.println("您要购买的商品:"+productName+",数量为:"+num+"<br/>");
}
}
%>
<a href="/CookieProject/cleanCart">清空购物车</a>
</body>
</html></span>
利用cookie技术实现访问历史记录
<span style="font-size:14px;">package myTest;
import java.io.IOException;
import java.io.PrintWriter;
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 addCookie extends HttpServlet {
// 得到用户当前访问商品和商品浏览记录列表
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 自动刷新
response.setHeader("refresh", "2;url=/CookieProject/product.jsp");
// 获得用户当前浏览的商品id
String id = request.getParameter("id");
// 获得用户浏览记录列表
Cookie[] cookies = request.getCookies();
// 查找访问记录表 visitList 1,4,5,6
String visitList = null;
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals("visitList")) {
visitList = cookie.getValue();
break;
}
}
if (visitList == null) {// 列表不存在
Cookie c = new Cookie("visitList", id);
c.setMaxAge(60 * 60);
response.addCookie(c);
response.getWriter().println("add success!");
} else {// 列表存在
String[] product = visitList.split(",");
for (String string : product) {
if (string.equals(id)) {// 若已经存在商品
response.getWriter().println("add success!");
return;
}
}
Cookie cook = new Cookie("visitList", visitList + "," + id); // 若不存在该商品,则添加该商品进访问列表
cook.setMaxAge(60 * 60);
response.addCookie(cook);
response.getWriter().println("add success!");
}
} else {// 该站点无任何cookie
Cookie cookie = new Cookie("visitlist", id);
cookie.setMaxAge(60 * 60);
response.addCookie(cookie);
response.getWriter().println("add success");
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}</span>
利用Cookie技术实现清空上述历史记录列表功能
<span style="font-size:14px;">package myTest;
import java.io.IOException;
import java.io.PrintWriter;
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 CleanCookie extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Cookie cookie=new Cookie("visitList","");
cookie.setMaxAge(0);
response.addCookie(cookie);
response.sendRedirect("/CookieProject/product.jsp");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
}</span>
接下来用Session技术实现购物车功能
<span style="font-size:14px;">package myTest;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class BuySession extends HttpServlet {
// 添加商品到购物车
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 1.要获得商品的id
String id = request.getParameter("id");
// 2.获得购物车cart 从session处获得
HttpSession session = request.getSession();
Map<String, Integer> cart = (Map<String, Integer>) session
.getAttribute("cart");
if (cart == null) {// 若session中并无cart,则创建cart
cart = new HashMap<String, Integer>();
}
if (cart.containsKey(id)) {// 如果购物车中存在商品,则数量+1
int num = cart.get(id);
cart.put(id, num + 1);
} else {// 若不存在商品,则把商品加入购物车
cart.put(id, 1);
}
session.setAttribute("cart", cart);
response.sendRedirect("/CookieProject/product.jsp");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}</span>
再用session技术实现清空购物车功能
<span style="font-size:14px;">package myTest;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class CleanCartSession extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Map<String,Integer>cart=new HashMap<String,Integer>();
HttpSession session=request.getSession();
session.setAttribute("cart", cart);
response.sendRedirect("/CookieProject/product.jsp");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
}
</span>
总之 利用jsp生成动态页面,然后用cookie来实现浏览记录功能(通过页面链接传入商品id,并把id记录入cookie中,再重定向回动态页面中,在动态页面输出cookie中的信息),最后用session实现购物车功能(通过传入商品id,把Map类型(因为商品有数量的属性,所以利用map)的cart传入session中,再重定向回原动态页面)。清空浏览记录与清空购物车则是分别利用重新生成空的同名cookie与session来覆盖原cookie与session,再重定向(response.sendRedirect(url)方法)回原动态网页,来达到清除数据的目的。