JAVAEE model1模型實現(xiàn)商品瀏覽記錄(去除重復的瀏覽記錄)(一)
在javaee中Model1模型是以jsp頁面為中心的,jsp既要對瀏覽器的request做出邏輯處理(使用javabean),訪問數(shù)據(jù)庫也要顯示出相關的頁面。
在model1模型中,沒有servlet。
Model1結(jié)果圖如下:
Model1的可維護性 可擴展性都是較差的 只適合小項目。
首先運行結(jié)果
goods.jsp
<%@page import="entity.Items"%> <%@page import="dao.ItemsDao"%> <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> <style type="text/css"> div { float: left; margin: 10px; } div dd { margin: 0px; font-size: 10pt; } div dd.dd_name { color: blue; } div dd.dd_city { color: #000; } </style> </head> <body> <center> <h1>商品展示</h1> <hr> <table width="800" height="60" cellpadding="0" cellspacing="0" border="0"> <tr> <td> <% ItemsDao dao = new ItemsDao(); ArrayList<Items> list = new ArrayList<Items>(); //從dao中獲取所有的商品 并保存到list集合中 list = dao.getAllItems(); if (list != null && list.size() > 0) { //循環(huán)遍歷集合 并顯示 for (int i = 0; i < list.size(); i++) { Items item = list.get(i); %> <div> <dl> <dt> <a href="details.jsp?id=<%=item.getId()%>"><img src="images/<%=item.getPicture()%>" width="120" height="90" border="1" /> </a> </dt> <dd class="dd_name"><%=item.getName()%></dd> <dd class="dd_city"> 產(chǎn)地:<%=item.getCity()%> 價格:¥ <%=item.getPrice()%></dd> </dl> </div> <% } } %> </td> </tr> </table> </center> </body> </html>
在代碼中 表示商品的圖片
<span style="white-space:pre"> </span> <a href="details.jsp?id=<%=item.getId()%>"> <img src="images/<%=item.getPicture()%>" width="120" height="90" border="1" /> </a>
通過點擊商品的圖片 把當前商品的id傳值給details頁面
details.jsp通過商品的id來顯示詳細商品 ,而瀏覽記錄由cookies維護
<%@page import="org.apache.taglibs.standard.tag.common.xml.ForEachTag"%> <%@page import="entity.Items"%> <%@page import="dao.ItemsDao"%> <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <style type="text/css"> #historyview { border: 1; background: #EAEAEE; } #historyview td { font-size: 10px; } </style> </head> <body> <center> <h1>商品詳情</h1> <hr> <table width="750" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="70%"> <center> <table border="0"> <% ItemsDao dao = new ItemsDao(); //根據(jù)request傳來的商品id 向dao中獲得相對應的商品對象 Items item = dao.getItemById(Integer.parseInt(request .getParameter("id"))); if (item != null) { %> <tr> <td rowspan="5"><img src="images/<%=item.getPicture()%>" width="200" height="150"></td> </tr> <tr> <td><b><%=item.getName()%></b> </td> </tr> <tr> <td id="cityname">產(chǎn)地:<%=item.getCity()%></td> </tr> <tr> <td id="pricename">價格:<%=item.getPrice()%> ¥</td> </tr> <tr> <td id="pricename">價格:<%=item.getPrice()%> ¥</td> </tr> <% } //將該商品加入cookies Cookie[] cookies = request.getCookies(); String historyStr = ""; for (Cookie c : cookies) { if (c.getName().equals("history")) { historyStr = c.getValue(); } } historyStr += item.getId() + ","; Cookie c = new Cookie("history", historyStr); //重新設置cookies response.addCookie(c); %> </table> </center></td> <td width="30%" valign="top" id="historyview"> <center> <table> <tr> <td><b>你瀏覽過的商品</b></td> </tr> <% //根據(jù)cookie 從dao獲取最后瀏覽的三次記錄 并保存到list集合 ArrayList<Items> historyItems = dao.getHistoryView(historyStr); if (historyItems != null && historyItems.size() > 0) { //遍歷集合 for (Items historyItem : historyItems) { %> <tr> <td><a href="details.jsp?id=<%=historyItem.getId()%>"><img src="images/<%=historyItem.getPicture()%>" width="100" height="80" border="1"> </a></td> </tr> <tr> <td><b><%=historyItem.getName()%></b> </td> </tr> <tr> <td>產(chǎn)地:<%=historyItem.getCity()%></td> </tr> <% } } %> </table> </center> </td> </tr> </table> </center> </body> </html>
dao層 負責商品在數(shù)據(jù)庫中的查詢操作
package dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import util.DBHelper; import entity.Items; //商品的業(yè)務邏輯類 public class ItemsDao { // 獲得所有商品信息 public ArrayList<Items> getAllItems() { // 商品集合 ArrayList<Items> list = new ArrayList<Items>(); Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = DBHelper.getConnection(); String sql = "select * from items";// sql 語句 ps = conn.prepareStatement(sql); rs = ps.executeQuery(); // 將查詢的結(jié)果依次加入集合 while (rs.next()) { Items item = new Items(); item.setId(rs.getInt("id")); item.setName(rs.getString("name")); item.setCity(rs.getString("city")); item.setPrice(rs.getDouble("price")); item.setPicture(rs.getString("picture")); item.setNumber(rs.getInt("number")); list.add(item); } } catch (SQLException e) { e.printStackTrace(); } finally { // 關閉資源 if (rs != null) { try { rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (ps != null) { try { ps.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } return list; } // 根據(jù)商品編號獲取商品資料 public Items getItemById(int id) { Items item = new Items(); Connection con = null; PreparedStatement ps = null; ResultSet rs = null; String sql = "select * from items where id = ?"; try { con = DBHelper.getConnection(); ps = con.prepareStatement(sql); ps.setInt(1, id); rs = ps.executeQuery(); // 如果找到該id 為item對象初始化 if (rs.next()) { item.setId(rs.getInt("id")); item.setName(rs.getString("name")); item.setCity(rs.getString("city")); item.setPrice(rs.getDouble("price")); item.setPicture(rs.getString("picture")); item.setNumber(rs.getInt("number")); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { // 關閉資源 if (rs != null) { try { rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (ps != null) { try { ps.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } return item; } // 根據(jù)cookie 獲得瀏覽的最后三個商品 public ArrayList<Items> getHistoryView(String cookie) { ArrayList<Items> list = new ArrayList<Items>(); String ids[] = cookie.split(","); int counts = 3;// 瀏覽的最后三條記錄 if (ids != null && ids.length > 0) { for (int i = ids.length - 1; i >= 0 && i > ids.length - counts - 1; i--) { Items item = getItemById(Integer.parseInt(ids[i])); /* * 首先判斷集合中是否存在當前物品 如果存在 counts+1 多讀取一次(保證list集合中有3個對象) 不添加此物品 */ if (list.contains(item)) { counts++; continue; } list.add(item); } } return list; } }
商品的實體類 Items
package entity; public class Items { private int id; private String name; private String city; private double price; private int number; private String picture; 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 getCity() { return city; } public void setCity(String city) { this.city = city; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } public String getPicture() { return picture; } public void setPicture(String picture) { this.picture = picture; } @Override public int hashCode() { // TODO Auto-generated method stub return this.getId()+this.getName().hashCode(); } @Override public boolean equals(Object obj) { if(this==obj) { return true; } else { if(obj instanceof Items) { Items item=(Items) obj; if(this.getId()==item.getId()&&this.getName().equals(item.getName())) { return true; } } } return false; } }
在這里 重寫了hasCode和equals方法 來修改比較方式(所有的item都是一個新的對象 即使兩個商品的內(nèi)容全部一樣也不會相等 。所以要修改比較方式)
因為對于瀏覽記錄而言 我們不能通過刷新當前商品 瀏覽記錄全部都是該商品 我們只要保證該商品在瀏覽記錄中 只有一個即可
所以在dao層中的getHistoryView方法有這句代碼
<span style="white-space:pre"> </span>if (list.contains(item)) { counts++; continue; }
然后是工具類
DBHelpher 單例模式獲得connection對象
package util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DBHelper { private static final String driver = "com.mysql.jdbc.Driver"; private static final String url = "jdbc:mysql://localhost:3306/shopping?useUnicode=true&charcterEncoding=UTF-8"; private static final String username = "root"; private static final String password = "123"; private static Connection con = null; // 靜態(tài)塊代碼負責加載驅(qū)動 static { try { Class.forName(driver); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static Connection getConnection() { if (con == null) { try { con = DriverManager.getConnection(url, username, password); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return con; } }
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Mybatis?Plus插入數(shù)據(jù)后獲取新數(shù)據(jù)id值的踩坑記錄
在某些情況下,需要在執(zhí)行新增后,需要獲取到新增行的id,這篇文章主要給大家介紹了關于Mybatis?Plus插入數(shù)據(jù)后獲取新數(shù)據(jù)id值的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-08-08