模拟亚马逊、淘宝等浏览记录功能(访问数据库)
2017-05-27 20:17
441 查看
Q题目
现在要求,模拟一个类似的功能,实体为一个网上书店,要求显示最近的三条浏览记录,使用数据库存储数据和查询数据,如下图例如:
1)现有如下网上书店:
本站书籍目录: JAVA C++ C语言 Linux Android 最近三次浏览记录:
3)浏览第一个商品后,若为Java,显示界面
本站书籍目录: JAVA C++ C语言 Linux Android 最近三次浏览记录:JAVA
4)浏览第二个商品,若为C++
5)浏览第三个商品,若为Java,此时涉及一个排序问题了,最前的必须是最近浏览的。
6)浏览第四个商品,为C语言
具体分析见:http://blog.csdn.net/baidu_37107022/article/details/72783206
实现代码
目录注意:数据库驱动jar包,以及配置文件info.properties
数据库数据如下:
book类
package com.tcb.domain; public class Book { private int id; private String name; private int price; private String author; 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 int getPrice() { return price; } public void setPrice(int price) { this.price = price; } pub 14ce6 lic String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public Book(String name, int price, String author) { super(); this.name = name; this.price = price; this.author = author; } @Override public String toString() { return "Book [id=" + id + ", name=" + name + ", price=" + price + ", author=" + author + "]"; } public Book() { super(); // TODO Auto-generated constructor stub } }
bookDao类:查询数据库内容
package com.tcb.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import com.tcb.domain.Book; import com.tcb.utils.DBUtils; public class BookDao { //查询指定书籍的详情 public Book queryBook(int id){ Connection connection=DBUtils.getConnection(); try { String sql="select * from book where id=?"; PreparedStatement ps=connection.prepareStatement(sql); ps.setInt(1, id); ResultSet resultSet=ps.executeQuery(); while(resultSet.next()){ int id2= resultSet.getInt("id"); String name=resultSet.getString("name"); int price=resultSet.getInt("price"); String author=resultSet.getString("author"); Book book=new Book(name, price, author); book.setId(id2); return book; } } catch (SQLException e) { e.printStackTrace(); } return null; } //查询出所有书籍信息用于展示 public ArrayList<Book> queryAllBook(){ Connection connection=DBUtils.getConnection(); ArrayList<Book> list=new ArrayList<>(); try { String sql="select * from book"; PreparedStatement ps=connection.prepareStatement(sql); ResultSet resultSet=ps.executeQuery(); while(resultSet.next()){ int id=resultSet.getInt("id"); String name=resultSet.getString("name"); int price=resultSet.getInt("price"); String author=resultSet.getString("author"); Book book=new Book(name, price, author); book.setId(id); list.add(book); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return list; } }
工具类:获得数据库连接Connection
package com.tcb.utils; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ResourceBundle; public class DBUtils { public static String driverName=""; public static String url=""; public static String username=""; public static String password=""; static{ ResourceBundle resourceBundle=ResourceBundle.getBundle("info"); driverName=resourceBundle.getString("driverName"); url=resourceBundle.getString("url"); username=resourceBundle.getString("username"); password=resourceBundle.getString("password"); } public static Connection getConnection(){ try { //1.注册驱动 Class.forName(driverName); //2.获取连接 Connection connection = DriverManager.getConnection(url,username,password); return connection; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } public static void closeAll(ResultSet resultSet,Statement statement ,Connection connection){ if (resultSet!=null) { try { resultSet.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (statement!=null) { try { statement.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (connection!=null) { try { connection.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
配置文件info.properties
url的最后一个参数:book为数据库名称(自己定)
数据库的用户名username和密码password(根据自己设置的填写)
driverName=com.mysql.jdbc.Driver url=jdbc\:mysql\://localhost\:3306/book username=root password=123
展示所有书籍BookContent
package com.tcb.web.servlet; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.tcb.dao.BookDao; import com.tcb.domain.Book; import com.tcb.utils.DBUtils; public class ShowBookContent extends HttpServlet { private static final long serialVersionUID = 1L; public ShowBookContent() { super(); // TODO Auto-generated constructor stub } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); PrintWriter writer = response.getWriter(); // 展示所有书籍 writer.write("本站书籍目录:<br>"); BookDao bookDao=new BookDao(); ArrayList<Book> list=bookDao.queryAllBook(); for (Book book : list) { writer.write("<a href='" + request.getContextPath() + "/ShowBookDetails?id=" + book.getId()+ "'>" + book.getName() + "</a><br>"); } // 显示最近三次的访问记录 writer.write("最近三次浏览记录:<br>"); Cookie[] cookies = request.getCookies(); if (cookies != null) { for (Cookie cookie : cookies) { String name = cookie.getName(); if ("ids".equals(name)) { String value = cookie.getValue(); String[] values = value.split("-"); for (int i = 0; i < values.length; i++) { String id = values[i]; Book book1 = bookDao.queryBook(Integer.parseInt(id)); writer.write("<a href='ShowBookDetails?id="+book1.getId() + "'>" + book1.getName() + "</a><br>"); } } } } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
展示书籍具体信息
package com.tcb.web.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.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.tcb.dao.BookDao; import com.tcb.domain.Book; import com.tcb.utils.DBUtils; public class ShowBookDetails extends HttpServlet { private static final long serialVersionUID = 1L; public ShowBookDetails() { super(); // TODO Auto-generated constructor stub } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); PrintWriter writer = response.getWriter(); // 显示被查看书籍的具体信息 BookDao bookDao=new BookDao(); String id = request.getParameter("id"); Book book = bookDao.queryBook(Integer.parseInt(id)); writer.write("您查看了" + book.getName() + "这本书。<br><br>"); writer.write("书籍具体信息如下:<br>"); writer.write(book.getName() + "<br>"); writer.write(book.getAuthor() + "<br>"); writer.write(book.getPrice() + "<br>"); // 存储该次访问记录,方便在主页面中显示最近的访问记录 // 存取数据格式为:3-2-1 先要进行数据拆分,根据情况做修改数据操作,再将数据合并放回到cookie中 Cookie[] cookies = request.getCookies(); if (cookies != null) { //创建一个Stringbuffer来存取所有Cookie的名字,用于判断Cookies数组中是否有ids这个Cookie,没有就需要创建 StringBuffer cookieNames=new StringBuffer(); //遍历Cookies数组 for (Cookie cookie : cookies) { //得到Cookie名字 String name = cookie.getName(); //将Cookie名字存起来 cookieNames.append(name+"-"); //加“-”目的是:防止分隔开每个Cookie的名字,防止相连的名字组合匹配到ids //若有ids这个Cookie,就需要做处理 if ("ids".equals(name)) { // 取出Cookie中存的值 String value = cookie.getValue(); // ids这个Cookie取出的值为空那就没必要做拆分了 if (value != null && !"".equals(value)) { String[] values = value.split("-"); // 数组转化成Collection集合 List<String> list = Arrays.asList(values); // 把list集合直接转化成LinkedList,为了方便后续处理 LinkedList<String> linked = new LinkedList<String>(list); // 判断Cookie值中包含id否 if (linked.contains(id)) { linked.remove(id); } else { if (linked.size() > 2) { linked.removeLast(); } } linked.addFirst(id); // 将存进linkedList中的数据取出来组合成1-2或1-2-3等形式,放到Cookie中 String result = ""; for (int i = 0; i < linked.size(); i++) { result += linked.get(i); if (i < linked.size()-1) { result += "-"; } } Cookie cookie2 = new Cookie("ids", result); cookie2.setMaxAge(10 * 60); response.addCookie(cookie2); } } } if(!cookieNames.toString().contains("ids")){ Cookie cookie = new Cookie("ids", id); cookie.setMaxAge(10 * 60); response.addCookie(cookie); } } else { Cookie cookie = new Cookie("ids", id); cookie.setMaxAge(10 * 60); response.addCookie(cookie); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
不使用,而使用集合实现数据存储实现该功能:http://blog.csdn.net/baidu_37107022/article/details/72783206
相关文章推荐
- 模拟亚马逊、淘宝等浏览记录(历史记录)功能(访问集合存储的数据)
- EditText和数据库结合使用,类似淘宝搜索功能及历史记录
- 仿淘宝的最近浏览记录功能
- 清除访问共享时保存的密码和浏览记录
- jsp页面功能是向数据库删除一条记录,如果删除成功,JSP页面上弹出一个提示框告诉用户添删除成功!
- 独家首先推出设置远程访问数据库IP功能
- 用VisualC#中轻松浏览数据库记录
- Perl DBD::Oracle模块访问数据库中文记录
- 使用cookies实现浏览历史记录功能
- 用php实现类似淘宝,拍拍,易趣的最近浏览商品的功能模型代码
- 访问统计(浏览过的页面)[数据库设计]
- SSAS实践问题记录--后端数据库访问模块中存在错误。 为绑定指定的大小太小,导致一个或多个列值被截断。
- Visual C#中轻松浏览数据库记录
- 使用cookies实现浏览历史记录功能
- vc访问数据库 (并弹出数据源浏览窗口与用户交互)
- Visual C#中轻松浏览数据库记录(转)
- SQL Artisan数据库访问组件下一版本完善功能概述
- MySQL 数据库的分页读取记录功能
- SQL Artisan数据库访问组件功能概述(1)
- 浏览历史记录功能