模拟亚马逊、淘宝等浏览记录功能(访问数据库)
生活随笔
收集整理的這篇文章主要介紹了
模拟亚马逊、淘宝等浏览记录功能(访问数据库)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Q題目
現在要求,模擬一個類似的功能,實體為一個網上書店,要求顯示最近的三條瀏覽記錄,使用數據庫存儲數據和查詢數據,如下圖
例如:
1)現有如下網上書店:
3)瀏覽第一個商品后,若為Java,顯示界面
本站書籍目錄:JAVAC++C語言LinuxAndroid 最近三次瀏覽記錄:JAVA4)瀏覽第二個商品,若為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;}public 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;}@Overridepublic 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 blocke.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 blocke.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 blocke.printStackTrace();}}if (statement!=null) {try {statement.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if (connection!=null) {try {connection.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}配置文件info.properties
url的最后一個參數:book為數據庫名稱(自己定)
數據庫的用戶名username和密碼password(根據自己設置的填寫)
展示所有書籍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 stubdoGet(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 stubdoGet(request, response);}}不使用,而使用集合實現數據存儲實現該功能:http://blog.csdn.net/baidu_37107022/article/details/72783206
總結
以上是生活随笔為你收集整理的模拟亚马逊、淘宝等浏览记录功能(访问数据库)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 算法--腾讯面试:单词游戏,谁会赢?
- 下一篇: 06--JDBC各种连接方式的对比