13.查看书的浏览记录和cookir存历史浏览记录书本id
javaBean==> Book.java
package com.ivan.model; public class Book { private int id; private String name; private String author; private String price; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getPrice() { return price; } public void setPrice(String price) { this.price = price; } public Book(int id, String name, String author, String price) { super(); this.id = id; this.name = name; this.author = author; this.price = price; } public Book() { super(); // TODO Auto-generated constructor stub } @Override public String toString() { return "Books [id=" + id + ", name=" + name + ", author=" + author + ", price=" + price + "]"; } }
假装数据库====> Dbutils.java
package com.ivan.web; import java.util.HashMap; import java.util.Map; import com.ivan.model.Book; public class Dbutils { private static Map<Integer,Book> books = new HashMap<>(); static{ books.put(1,new Book(1,"java从入门到超神","Luca","188.8")); books.put(2,new Book(2,"php从入门到超神","hansen","98.8")); books.put(3,new Book(3,"python从入门到超神","hupen","686")); books.put(4,new Book(4,"h5从入门到超神","ivan","188")); } public static Map<Integer,Book> getAllbooks(){ return books; } public static Book findBookId(Integer id){ return books.get(id); } }
查看百科全书servlet:
package com.ivan.web; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import java.util.Map.Entry; 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 com.ivan.model.Book; @WebServlet("/showAllBooksServlet") public class showAllBooksServlet extends HttpServlet{ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.setHeader("content-type", "text/html;charset=utf-8"); PrintWriter writer = response.getWriter(); writer.write("图书列表:"); // Map<Integer,Book> map = Dbutils.showAllbooks(); for(Entry<Integer, Book> entry : Dbutils.getAllbooks().entrySet() ){ String aStr = "<br><a href='http://localhost:8080"+ request.getContextPath()+"/ViewBookServlet?id="+ entry.getKey() +"'>"+ entry.getValue().getName()+"</a>"; writer.write(aStr); } //展示书本历史浏览记录 writer.write("<br><br>历史浏览记录:"); Cookie[] cks = request.getCookies(); if(cks != null){ for(Cookie ck : cks){ if(ck.getName().equals("historyBookIds")){ String[] idArr = ck.getValue().split("-"); for(String s : idArr){ String lastStr = "<br><a href='http://localhost:8080"+ request.getContextPath()+"/ViewBookServlet?id="+ s +"'>"+ Dbutils.findBookId(Integer.parseInt(s)).getName() +"</a>"; writer.write(lastStr); } } } } } }
查看某本书详细内容 Servlet:
package com.ivan.web; 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; @WebServlet("/ViewBookServlet") public class ViewBookServlet extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub resp.setHeader("content-type","text/html;charset=utf-8"); String boodId = req.getParameter("id"); //书本id Integer id = Integer.parseInt(boodId); //响应书本详细信息 resp.getWriter().write(Dbutils.findBookId(id).toString()); //历史书本浏览记录 Cookie[] cks = req.getCookies(); if(cks != null){ System.out.println("有传过cookie"); for(Cookie ck : cks){ if(ck.getName().equals("historyBookIds")){ String ckValue = ck.getValue(); System.out.println("ckValue :"+ckValue); System.out.println("以前访问过的书的ID:" + ckValue); //情况1: 5 if(ckValue.equals(boodId)){ ck.setMaxAge(60 * 60); resp.addCookie(ck); return; }; if(ckValue.startsWith("-"+ boodId)){ //情况2 : 1-5-4-5 ckValue = ckValue.replaceAll("-"+ boodId, ""); }else if(ckValue.startsWith(boodId+ "-")){ //情况3 : 5-4-5 ckValue = ckValue.replaceAll(boodId + "-", ""); } String newMemory = ckValue + "-" + boodId; //响应客户端 ck.setValue(newMemory); ck.setMaxAge(60 * 60); resp.addCookie(ck); } } }else{ System.out.println("未传过cookie"); Cookie ck = new Cookie("historyBookIds", boodId); ck.setMaxAge(60*60);//1小时存活时间 resp.addCookie(ck); } } }
项目文件路径:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?