JAVAEE model1模型實(shí)現(xiàn)商品瀏覽記錄(去除重復(fù)的瀏覽記錄)(一)
在javaee中Model1模型是以jsp頁(yè)面為中心的,jsp既要對(duì)瀏覽器的request做出邏輯處理(使用javabean),訪問(wèn)數(shù)據(jù)庫(kù)也要顯示出相關(guān)的頁(yè)面。
在model1模型中,沒(méi)有servlet。
Model1結(jié)果圖如下:
Model1的可維護(hù)性 可擴(kuò)展性都是較差的 只適合小項(xiàng)目。
首先運(yùn)行結(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()%> 價(jià)格:¥ <%=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>
通過(guò)點(diǎn)擊商品的圖片 把當(dāng)前商品的id傳值給details頁(yè)面
details.jsp通過(guò)商品的id來(lái)顯示詳細(xì)商品 ,而瀏覽記錄由cookies維護(hù)
<%@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傳來(lái)的商品id 向dao中獲得相對(duì)應(yīng)的商品對(duì)象 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">價(jià)格:<%=item.getPrice()%> ¥</td> </tr> <tr> <td id="pricename">價(jià)格:<%=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); //重新設(shè)置cookies response.addCookie(c); %> </table> </center></td> <td width="30%" valign="top" id="historyview"> <center> <table> <tr> <td><b>你瀏覽過(guò)的商品</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層 負(fù)責(zé)商品在數(shù)據(jù)庫(kù)中的查詢操作
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è)務(wù)邏輯類 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 語(yǔ)句 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 { // 關(guān)閉資源 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ù)商品編號(hào)獲取商品資料 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對(duì)象初始化 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 { // 關(guān)閉資源 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 獲得瀏覽的最后三個(gè)商品 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])); /* * 首先判斷集合中是否存在當(dāng)前物品 如果存在 counts+1 多讀取一次(保證list集合中有3個(gè)對(duì)象) 不添加此物品 */ if (list.contains(item)) { counts++; continue; } list.add(item); } } return list; } }
商品的實(shí)體類 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方法 來(lái)修改比較方式(所有的item都是一個(gè)新的對(duì)象 即使兩個(gè)商品的內(nèi)容全部一樣也不會(huì)相等 。所以要修改比較方式)
因?yàn)閷?duì)于瀏覽記錄而言 我們不能通過(guò)刷新當(dāng)前商品 瀏覽記錄全部都是該商品 我們只要保證該商品在瀏覽記錄中 只有一個(gè)即可
所以在dao層中的getHistoryView方法有這句代碼
<span style="white-space:pre"> </span>if (list.contains(item)) { counts++; continue; }
然后是工具類
DBHelpher 單例模式獲得connection對(duì)象
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)塊代碼負(fù)責(zé)加載驅(qū)動(dòng) 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; } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- JavaWeb實(shí)現(xiàn)簡(jiǎn)單查詢商品功能
- java+mysql實(shí)現(xiàn)商品搶購(gòu)功能
- Java使用策略模式解決商場(chǎng)促銷商品問(wèn)題示例
- java使用hadoop實(shí)現(xiàn)關(guān)聯(lián)商品統(tǒng)計(jì)
- java實(shí)現(xiàn)商品管理系統(tǒng)
- java實(shí)現(xiàn)超市商品庫(kù)存管理平臺(tái)
- java實(shí)現(xiàn)商品信息管理系統(tǒng)
- Java基于JDBC實(shí)現(xiàn)事務(wù),銀行轉(zhuǎn)賬及貨物進(jìn)出庫(kù)功能示例
- Java實(shí)現(xiàn)商品的查找、添加、出庫(kù)、入庫(kù)操作完整案例
相關(guān)文章
IDEA maven項(xiàng)目中刷新依賴的兩種方法小結(jié)
這篇文章主要介紹了IDEA maven項(xiàng)目中刷新依賴的兩種方法小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03java使用JMF實(shí)現(xiàn)音樂(lè)播放功能
這篇文章主要為大家詳細(xì)介紹了java使用JMF實(shí)現(xiàn)音樂(lè)播放的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06教你使用Java獲取當(dāng)前時(shí)間戳的詳細(xì)代碼
這篇文章主要介紹了如何使用Java獲取當(dāng)前時(shí)間戳,通過(guò)兩個(gè)java示例,向大家展示如何獲取java中的當(dāng)前時(shí)間戳,文本通過(guò)示例代碼給大家展示了java獲取當(dāng)前時(shí)間戳的方法,需要的朋友可以參考下2022-01-01Mybatis?Plus插入數(shù)據(jù)后獲取新數(shù)據(jù)id值的踩坑記錄
在某些情況下,需要在執(zhí)行新增后,需要獲取到新增行的id,這篇文章主要給大家介紹了關(guān)于Mybatis?Plus插入數(shù)據(jù)后獲取新數(shù)據(jù)id值的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08