该程序实现显示最近的浏览记录,当点击书名链接时可查看关于该书的详细信息,返回后可在最近的浏览列表中查看浏览记录,最后点击的出现在最前面。
1.创建基本类Book存储基本数据
1: package net.csing;2:3: public class Book {4: public Book(){}5:6: public Book(String id,String name, String auth, String price, String publish,7: String description) {8: super();9: this.id=id;10: this.name = name;11: this.auth = auth;12: this.price = price;13: this.publish = publish;14: this.description = description;15: }16: private String id;17: private String name;18: private String auth;19: private String price;20: private String publish;21: private String description;22:23: public String getId() {24: return id;25: }26:27: public void setId(String id) {28: this.id = id;29: }30: public String getName() {31: return name;32: }33: public void setName(String name) {34: this.name = name;35: }36: public String getAuth() {37: return auth;38: }39: public void setAuth(String auth) {40: this.auth = auth;41: }42: public String getPrice() {43: return price;44: }45: public void setPrice(String price) {46: this.price = price;47: }48: public String getPublish() {49: return publish;50: }51: public void setPublish(String publish) {52: this.publish = publish;53: }54: public String getDescription() {55: return description;56: }57: public void setDescription(String description) {58: this.description = description;59: }60:61: @Override62: public String toString() {63: return "[name=" + name + ", auth=" + auth + ", price=" + price64: + ", publish=" + publish + ", description=" + description + "]";65: }66: }67:
2.创建BookDao类来操作Book数据并初始化要显示的book列表:
1: package net.csing;2:3: import java.util.LinkedHashMap;4: import java.util.Map;5:6: public class BookDao {7: private static Map<String, Book> map=new LinkedHashMap<String, Book>();8: public BookDao(){};9: static{10: map.put("1", new Book("1","三国演义","99.0","朴乾","黑马出版社","一群男人纠结不清的故事...."));11: map.put("2", new Book("2","西游记","10.0","曹睿","传智出版社","一个和尚一个猴子一头猪和一个秃子去西天的故事..."));12: map.put("3", new Book("3","水浒传","2.0","奥巴马","人民教育出版社","105个男人和3个女人闯荡江湖的故事"));13: map.put("4", new Book("4","金瓶梅","200.0","哈利波特","科技出版社","混乱不堪的故事..."));14: map.put("5", new Book("5","逆行","3.0","高深","人民教育出版社","我们逆行"));15: }16: //根据id得到书;17: public static Book getBookById(String id){18: return map.get(id);19: }20: //获得所有的书的集合;21: public static Map<String,Book> getAllBook(){22: return map;23: }24: }25:
3.显示全部书籍的列表以及最近的浏览记录
1: package net.csing;2:3: import java.io.IOException;4: import java.io.Writer;5: import java.util.Iterator;6: import java.util.Map;7: import java.util.Map.Entry;8: import java.util.Set;9:10: import javax.servlet.ServletException;11: import javax.servlet.http.Cookie;12: import javax.servlet.http.HttpServlet;13: import javax.servlet.http.HttpServletRequest;14: import javax.servlet.http.HttpServletResponse;15:16: public class Index extends HttpServlet {17:18: public void doGet(HttpServletRequest request, HttpServletResponse response)19: throws ServletException, IOException {20:21: //解决中文乱码问题;22: response.setContentType("text/html;charset=utf-8");23:24: Writer outer=response.getWriter();25: outer.write("本站的所有书籍如下:<br>");26: //从类的方法中获得所有的书,并遍历;27: Map<String, Book> map=BookDao.getAllBook();28: Set<Entry<String, Book>> set=map.entrySet();29: Iterator<Entry<String,Book>> iterator=set.iterator();30: while(iterator.hasNext()){31: Entry<String, Book> entry=iterator.next();32: //String idString=entry.getKey();33: Book book=entry.getValue();34: //将取得书以链接列表的形式打印到浏览器页面中。35: //在链接页面的地址中返回该链接书的id36: outer.write("<a href='"+request.getContextPath()+"/servlet/Info?id="+book.getId()+"'>"+book.getName()+"</a><br>");37: }38: outer.write("<hr>");39: //获得cookie信息,以便查看之前的浏览记录。40: Cookie[] cookie=request.getCookies();41: //设置对应的浏览记录;42: Cookie findCookie=null;43: //判断cookie是否为空。44: if(cookie==null){45: outer.write("您尚未浏览过本站的图书...");46: }47: //cookie不为空时查看是否有符合条件的浏览记录48: else if(cookie!=null){49: for(Cookie c:cookie){50: if("history".equals(c.getName())){51: findCookie=c;52: break;53: }54: }55: }56: //如果有浏览记录,则分拆该值得到id并获取书名。57: if(findCookie!=null){58: outer.write("您最近浏览过的书籍如下:"+"<br><br>");59: String[] bookid=findCookie.getValue().split("-");60: for(String id:bookid){61: outer.write(BookDao.getBookById(id).getName()+"<br>");62: }63: }64: }65:66: public void doPost(HttpServletRequest request, HttpServletResponse response)67: throws ServletException, IOException {68:69: response.setContentType("text/html");70:71: }72:73: }74:
4.对于每一本书籍,显示该书的详细信息:
1: package net.csing;2:3: import java.io.IOException;4: import java.io.Writer;5:6: import javax.servlet.ServletException;7: import javax.servlet.http.Cookie;8: import javax.servlet.http.HttpServlet;9: import javax.servlet.http.HttpServletRequest;10: import javax.servlet.http.HttpServletResponse;11:12: public class Info extends HttpServlet {13:14: public void doGet(HttpServletRequest request, HttpServletResponse response)15: throws ServletException, IOException {16:17: response.setContentType("text/html;charset=utf-8");18: Writer outer=response.getWriter();19:20: //根据请求信息中的id获得请求的书名id21: String idString=request.getParameter("id");22: //打印书信息;23: outer.write(BookDao.getBookById(idString).toString()+"<a href='"+request.getContextPath()+"/servlet/Index"+"'>返回</a>");24: //获得所有的cookie25: Cookie[] cookies=request.getCookies();26: Cookie findCookie=null;27: //创建stringbuffered存储临时的id字段串;28: StringBuffer idBuffer=new StringBuffer();29: //只有当cookie不为空时的判断才有意义。30: if(cookies!=null){31: //遍历并查找对应的cookie浏览记录。32: for(Cookie c:cookies){33: if("history".equals(c.getName())){34: findCookie=c;35: break;36: }37: }38: }39: //不管cookies是否为空,我们都需要判断是否查找到对应的浏览历史cookie。40: if(findCookie==null){41: idBuffer.append(idString);42: }43: else{44: String[] find=findCookie.getValue().split("-");45: //将最近的书的id放在stringbuffered的最前面,现存的依次添加到后面,这个方法简直太棒了。46: idBuffer.append(idString);47: //依次将现存的id添加到buffered中,并且限制了id的长度。48: for(int x=0;(x<find.length)&&(idBuffer.toString().split("-").length<3);x++){49: //之前浏览的id值和当前浏览的值不相同时才添加。50: if(!idString.equals(find[x])){51: idBuffer.append("-"+find[x]);52: }53: }54: }55: //将获取的id浏览记录字段串添加到对应的cookie中。56: Cookie cookie=new Cookie("history", idBuffer.toString());57: //设置cookie存活时间以及存储路径。58: cookie.setMaxAge(Integer.MAX_VALUE);59: cookie.setPath(request.getContextPath());60: //将获取好的cookie存储到客户端浏览器中。61: response.addCookie(cookie);62: }63:64: public void doPost(HttpServletRequest request, HttpServletResponse response)65: throws ServletException, IOException {66:67: response.setContentType("text/html");68:69: }70:71: }72:
5.最终效果图如下:
刚打开时的界面:
浏览后的界面:
该博客介绍了一个程序,通过使用Cookie来记录用户的浏览历史,实现最近浏览书籍的显示功能。当用户点击书名查看详细信息后,返回时可以在最近浏览列表中找到之前查看过的书籍,最新查看的书籍会显示在列表最前面。文章涵盖了从创建Book类存储数据,到BookDao类的操作,再到界面展示的完整流程,并展示了程序的初始界面和浏览后的界面效果。
532

被折叠的 条评论
为什么被折叠?



