• 模拟一个实体

package qingxia.tang.entity;

public class Book {
    private String id;
    private String bookName;
    private double bookPrice;
    private String author;
    
    public Book(String id, String bookName, double bookPrice, String author) {
        super();
        this.id = id;
        this.bookName = bookName;
        this.bookPrice = bookPrice;
        this.author = author;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getBookName() {
        return bookName;
    }
    public void setBookName(String bookName) {
        this.bookName = bookName;
    }
    public double getBookPrice() {
        return bookPrice;
    }
    public void setBookPrice(double bookPrice) {
        this.bookPrice = bookPrice;
    }
    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
    @Override
    public String toString() {
        return "Book [id=" + id + ", bookName=" + bookName + ", bookPrice=" + bookPrice + ", author=" + author + "]";
    }
    

}
  • 一个工具类

package qingxia.tang.util;


import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import qingxia.tang.entity.Book;

public class DbUtils {
    private static Map<String,Book> books =new HashMap<String,Book>();
    static {
        books.put("1", new Book("1","西游记",20,"吴承恩"));
        books.put("2", new Book("2","红楼梦",30,"曹雪婷"));
        books.put("3", new Book("3","水浒传",25,"施耐庵"));
        books.put("4", new Book("4","三国演义",10,"罗贯中"));
        
    }
    public static Map<String,Book> getAllBook(){
        return books;
    }
    public static Book getBookById(String id){
        return books.get(id);
    } 

}
  • 所有书的显示,及其浏览书的记录

package tang;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

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 qingxia.tang.entity.Book;
import qingxia.tang.util.DbUtils;

/**
 * Servlet implementation class ShowBookDetail
 */
@WebServlet("/ShowBookDetail")
public class ShowBookDetail extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ShowBookDetail() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //显示所有书籍
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter pw=response.getWriter();
        pw.write("图书馆有如下书籍:</br>");
        Map<String, Book> allBook = DbUtils.getAllBook();
        for(Entry<String, Book> book:allBook.entrySet()){
            pw.write("<a href='"+request.getContextPath()+"/BookDetail?id="+book.getKey()+"' target='_blank'>"+book.getValue().getBookName()+"</a></br>");
        }
        pw.write("已浏览如下书籍:</br>");
        Cookie[] cookies = request.getCookies();
        for (int i = 0;cookies!=null && i < cookies.length; i++) {
            if(cookies[i].getName().equals("bookDetailHistory")){
                //获取以-拼接的字符串
                String value = cookies[i].getValue();
                //以-分裂字符串,得到字符串数组
                String[] split = value.split("-");
                for (int j = 0; j < split.length; j++) {
                    pw.write(DbUtils.getBookById(split[j]).getBookName()+"</br>");
                }
            }
        }
    }

    /**
     * @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);
    }

}
  • 书详情的显示

  • package tang;
    
    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 qingxia.tang.entity.Book;
    import qingxia.tang.util.DbUtils;
    
    /**
     * Servlet implementation class BookDetail
     */
    @WebServlet("/BookDetail")
    public class BookDetail extends HttpServlet {
        private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public BookDetail() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter pw=response.getWriter();
            String id=request.getParameter("id");
            Book bookById = DbUtils.getBookById(id);
            pw.write(bookById.toString());
            
            Cookie cookie = new Cookie("bookDetailHistory",oganizeId(id,request));
            //设置cookie的路径
            cookie.setPath("/");
            //设置cookie存活时间
            cookie.setMaxAge(Integer.MAX_VALUE);
            //将cookie提交到浏览器客户端
            response.addCookie(cookie);
        }
        /**
         * 将书的key值用-隔开存入到cookie当中
         * @param id
         * @param request
         * @return
         */
        private String oganizeId(String id, HttpServletRequest request) {
            Cookie[] cookies = request.getCookies();
            if(cookies==null){
                //说明第一次访问,无cookies值
                return id;
            }
            //浏览器中有cookie值
            Cookie historyBook=null;
            for (int i = 0; i < cookies.length; i++) {
                //判断cookie中是否保存了bookDetailHistory
                //如果cookie值中包含bookDetailHistory
                if("bookDetailHistory".equals(cookies[i].getName())){
                    //将key值是bookDetailHistory的value值取到
                    historyBook=cookies[i];
                }
            }
            //如果cookie中无bookDetailHistory值
            if(historyBook==null){
                return id;
            }
            //cookie值中有bookDetailHistory值
            //获取cookie值是bookDetailHistory的value值
            String value = historyBook.getValue();
            System.out.println("value"+value);
            //将bookDetailHistory的value值以-分隔开
            String[] split = value.split("-");
            //将取到的字符串数组转化成list
            LinkedList<String> list=new LinkedList<String>(Arrays.asList(split));
            System.out.println("list.size()"+list.size()+"   id:"+id);
            //如果list中的元素小于3
            if(list.size()<3){
                //list中的元素包含某一本书,将包含的书移除掉
                if(list.contains(id)){
                    list.remove(id);
                }
            //如果list中的元素等于大于3
            }else{
                //list中的元素包含某一本书,将包含的书移除掉
                if(list.contains(id)){
                    list.remove(id);
                //list中的元素中无与id相同的书,则将最后一本书删除,即只能显示三本书
                }else{
                    list.removeLast();
                }
            }
            //将书添加到首栏中
            list.addFirst(id);
            StringBuffer sb=new StringBuffer();
            for (int i = 0;i<list.size();i++) {
                //即第一次循环不需要拼接-
                if(i>0){
                    sb.append("-");
                }
                //先拼接再添加值,保证最后一位不会出现-
                sb.append(list.get(i));
            }
            return sb.toString();
        }
    
        /**
         * @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);
        }
    
    }

    显示效果:

  •  

posted on 2018-10-17 10:36  唐小夏  阅读(167)  评论(0编辑  收藏  举报