ProductDao:list数组模拟数据库,获取数据
Product:model 把数据对象化
Logic:service层
DetailServlet:显示单个商品数据
ListServlet:商品集合显示和显示浏览过的商品。
ProductDao:
package dao;
import java.util.ArrayList;
import java.util.List;
import entity.*;
public class ProductDao {
static List<Product> list=new ArrayList<Product>();
static {
for(int i=0;i<10;i++) {
Product product=new Product();
product.setNumber(i);
product.setName("我是"+i);
list.add(product);
}
}
public Product findOne(int id) {
for (Product product:list) {
if(product.getNumber()==id) {
return product;
}
}
return null;
}
public List<Product> findList(){
return list;
}
}
Product:
package entity;
public class Product {
private int number;
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private String name;
}
Logic:
package service;
import java.util.List;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import dao.ProductDao;
import entity.Product;
public class Logic {
public Product findOne(int id) {
ProductDao productDao=new ProductDao();
return productDao.findOne(id);
}
public List<Product> findList(){
ProductDao productDao=new ProductDao();
return productDao.findList();
}
}
DetailServlet:
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
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 entity.Product;
import javafx.print.Collation;
import service.*;
@WebServlet("/DetailServlet")
public class DetailServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
int id=Integer.parseInt(request.getParameter("id"));
Logic logic=new Logic();
Product product=logic.findOne(id);
String name=product.getName();
PrintWriter printWriter=response.getWriter();
String html="";
html+="<html>";
html+="<body>";
html+="<table border='1' align='center' width='600px'>";
html+="<tr>";
html+="<th>编号</th><th>名字</th>";
html+="</tr>";
if(product!=null) {
html+="<tr>";
html+="<td>"+id+"</td>"+"<td>"+name+"</td>";
html+="</tr>";
}
html+="</table>";
html+="<center><a href='"+request.getContextPath()+"/ListServlet'>"+"返回列表</a></center>";
html+="</body>";
html+="</html>";
printWriter.write(html);
Cookie cookie=new Cookie("lastone", createValue(request, id));
cookie.setMaxAge(100);
response.addCookie(cookie);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
//修改接收到的Cookie值
public String createValue(HttpServletRequest request,int id) {
String idString=String.valueOf(id);
String prodHist=null;
Cookie[] cookies=request.getCookies();
if(cookies!=null) {
for(Cookie cookie:cookies) {
if(cookie.getName().equals("lastone")) {
prodHist=cookie.getValue();
break;
}
}
}
if(prodHist==null||cookies==null) {
return idString;
}
String[] strings=prodHist.split("#");
List<String> collation=Arrays.asList(strings);
LinkedList<String> linkedList=new LinkedList<String>(collation);
if(linkedList.size()<3) {
if(linkedList.contains(idString)) {
linkedList.remove(idString);
linkedList.addFirst(idString);
}else {
linkedList.addFirst(idString);
}
}else {
if(linkedList.contains(idString)) {
linkedList.remove(idString);
linkedList.addFirst(idString);
}else {
linkedList.removeLast();
linkedList.addFirst(idString);
}
}
StringBuffer stringBuffer=new StringBuffer();
for(String string:linkedList) {
stringBuffer.append(string+"#");
}
String result=stringBuffer.toString();
result=result.substring(0, result.length()-1);
return result;
}
}
ListServlet:
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
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 entity.Product;
import service.Logic;
@WebServlet("/ListServlet")
public class ListServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
//service层
Logic logic=new Logic();
List<Product> list=logic.findList();
PrintWriter printWriter=response.getWriter();
String html="";
html+="<html>";
html+="<body>";
html+="<table border='1' align='center' width='600px'>";
html+="<tr>";
html+="<th>编号</th><th>名字</th>";
html+="</tr>";
for(Product One:list) {
String name=One.getName();
int id=One.getNumber();
html+="<tr>";
html+="<td>"+id+"</td>"+"<td><a href='"+request.getContextPath()+"/DetailServlet?id="+id+"'>"+name+"</a></td>";
html+="</tr>";
}
html+="</table>";
String value=null;
Cookie[] cookies= request.getCookies();
if(cookies!=null) {
for(Cookie cookie:cookies) {
if(cookie.getName().equals("lastone")) {
value=cookie.getValue();
break;
}
}
String[] strings=value.split("#");
for(String number:strings) {
Product product=logic.findOne(Integer.parseInt(number));
html+=product.getNumber()+" "+product.getName()+"<br/>";
}
}
html+="</body>";
html+="</html>";
printWriter.write(html);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
难点:如何保留浏览过的商品?
生成cookie的值
分析:
当前cookie值 传入商品id 最终cookie值
null或没有prodHist 1 1 (算法: 直接返回传入的id )
1 2 2,1 (没有重复且小于3个。算法:直接把传入的id放最前面 )
2,1 1 1,2(有重复且小于3个。算法:去除重复id,把传入的id放最前面 )
3,2,1 2 2,3,1(有重复且3个。算法:去除重复id,把传入的id放最前面)
3,2,1 4 4,3,2(没有重复且3个。算法:去最后的id,把传入的id放最前面)