JAVAEE model1商品浏览记录 JAVAEE model1模型实现商品浏览记录(去除重复的浏览记录)(一)
scx_white 人气:0想了解JAVAEE model1模型实现商品浏览记录(去除重复的浏览记录)(一)的相关内容吗,scx_white在本文为您仔细讲解JAVAEE model1商品浏览记录的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:JAVAEE,model1商品浏览记录,JAVAEE商品浏览记录去重,java商品浏览记录,下面大家一起来学习吧。
在javaee中Model1模型是以jsp页面为中心的,jsp既要对浏览器的request做出逻辑处理(使用javabean),访问数据库也要显示出相关的页面。
在model1模型中,没有servlet。
Model1结果图如下:
Model1的可维护性 可扩展性都是较差的 只适合小项目。
首先运行结果
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) { //循环遍历集合 并显示 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"> 产地:<%=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(); //根据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">产地:<%=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> <% //根据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>产地:<%=historyItem.getCity()%></td> </tr> <% } } %> </table> </center> </td> </tr> </table> </center> </body> </html>
dao层 负责商品在数据库中的查询操作
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; //商品的业务逻辑类 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(); // 将查询的结果依次加入集合 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; } // 根据商品编号获取商品资料 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; } // 根据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都是一个新的对象 即使两个商品的内容全部一样也不会相等 。所以要修改比较方式)
因为对于浏览记录而言 我们不能通过刷新当前商品 浏览记录全部都是该商品 我们只要保证该商品在浏览记录中 只有一个即可
所以在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; // 静态块代码负责加载驱动 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; } }
加载全部内容