首先看一下效果图,这里没有设置特定的HTML页面,你可以自己设置一下
一共需要三步,第一步创建一个JSP页面,第二步写一个加入购物车的逻辑,或者点击浏览的逻辑,第三步,创建清除记录的逻辑。(当然这里的代码是可以直接用的,但是呢,里面有一些路径的问题,需要读者自己去修改一下,并不是很难,比如说JSP中的Market等,在这里就不一一列举了,但是这里面的逻辑是正确的)
首先是JSP页面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="tools.Cookiechoose"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
.pg-img{
height:200px;
width:200px;
}
</style>
</head>
<body>
<img class="pg-img" src="/Demo3/image/1.jpg"><a href="/Demo3/Market?id=1">加入购物车</a>
<img class="pg-img" src="/Demo3/image/2.jpg"><a href="/Demo3/Market?id=2">加入购物车</a>
<img class="pg-img" src="/Demo3/image/3.jpg"><a href="/Demo3/Market?id=3">加入购物车</a><br>
<img class="pg-img" src="/Demo3/image/4.jpg"><a href="/Demo3/Market?id=4">加入购物车</a>
<img class="pg-img" src="/Demo3/image/5.jpg"><a href="/Demo3/Market?id=5">加入购物车</a>
<img class="pg-img" src="/Demo3/image/6.jpg"><a href="/Demo3/Market?id=6">加入购物车</a>
<h3>浏览记录</h3>
<%
Cookie[] cookies=request.getCookies();
Cookie cookie=Cookiechoose.CookiegetCookieByName(cookies,"product");
if(cookie!=null)
{
String longid=cookie.getValue();
String[] ids=longid.split(",");
for(String id:ids){
%>
<img class="pg-img" src="/Demo3/image/<%=id%>.jpg">
<%
}
}
%>
<h3><a href="/Demo3/Removemarket">清空浏览记录</a></h3>
</body>
</html>
然后是加入购物车的逻辑:
package cn.itcast.servlet;
import java.io.IOException;
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 tools.Cookiechoose;
/**
* Servlet implementation class Market
*/
@WebServlet("/Market")
public class Market extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Market() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//其实就是根据是否存在这个id再cookie中,有的话则显示,没有就不显示
//首先获取已经存在的id值
String id=request.getParameter("id");
Cookie[] cookies=request.getCookies();
//获取特定名字的cookie
Cookie cookie=Cookiechoose.CookiegetCookieByName(cookies, "product");
//如果cookie为空说明没有东西,所以创建一个,值为点击的那个id,再返回到浏览器上
if(cookie==null) {
Cookie c=new Cookie("product",id);
response.addCookie(c);
}else {
//不为空说明已经有了,获取cookie中的值,id=1,2,3
String longid=cookie.getValue();
//以逗号进行切割把它转换成数组
String[] ids=longid.split(",");
//判断ids这个数组中是否有现在点击的这个id
if(!checkId(ids,id)) {
//如果没有的话就加一个
cookie.setValue(id+","+longid);
response.addCookie(cookie);
}
}
//重定向到原始的JSP页面
response.sendRedirect(request.getContextPath()+"/JSP/market.jsp");
}
private boolean checkId(String[] ids,String id) {
for(String s:ids) {
if(s.equals(id)) {
return true;
}
}
return false;
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
这里面有一个工具类tools,自己可以创建一个包tools,然后创建一个类,然后其他的servlet就可以使用这个方法了,这个方法是用来在cookies中找到特定名字的cookie。
package tools;
import javax.servlet.http.Cookie;
public class Cookiechoose {
public static Cookie CookiegetCookieByName(Cookie[] cookies,String cookieName) {
if(cookies==null) {
return null;
}else {
for(Cookie cookie:cookies) {
if(cookie.getName().equals(cookieName)) {
return cookie;
}
}
return null;
}
}
}
最后是清除的逻辑:
package cn.itcast.servlet;
import java.io.IOException;
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 tools.Cookiechoose;
/**
* Servlet implementation class Removemarket
*/
@WebServlet("/Removemarket")
public class Removemarket extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Removemarket() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
Cookie[] cookies=request.getCookies();
Cookie cookie=Cookiechoose.CookiegetCookieByName(cookies, "product");
if(cookie!=null) {
//如果不为空的话,就通过设置setmaxage来清空
cookie.setMaxAge(0);
response.addCookie(cookie);
}
response.sendRedirect(request.getContextPath()+"/JSP/market.jsp");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}