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);
        }
        
    }
}
复制代码

 

 

项目文件路径:

 

posted @   expworld  阅读(266)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示