栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JAVAEE model1模型实现商品浏览记录(去除重复的浏览记录)(一)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAVAEE model1模型实现商品浏览记录(去除重复的浏览记录)(一)

在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 + "/"; 
%> 
 
 
 
 
 
 
My JSP 'index.jsp' starting page 
 
 
 
 
 
 
 
div { 
  float: left; 
  margin: 10px; 
} 
 
div dd { 
  margin: 0px; 
  font-size: 10pt; 
} 
 
div dd.dd_name { 
  color: blue; 
} 
 
div dd.dd_city { 
  color: #000; 
} 
 
 
 
 
  
商品展示
<% ItemsDao dao = new ItemsDao(); ArrayList list = new ArrayList(); //从dao中获取所有的商品 并保存到list集合中 list = dao.getAllItems(); if (list != null && list.size() > 0) { //循环遍历集合 并显示 for (int i = 0; i < list.size(); i++) { Items item = list.get(i); %>
">" width="120" height="90" border="1" />
<%=item.getName()%>
产地:<%=item.getCity()%> 价格:¥ <%=item.getPrice()%>
<% } } %>

  在代码中 表示商品的图片

 

">

" width="120" height="90"  border="1" /> 
 
 

通过点击商品的图片  把当前商品的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 + "/"; 
%> 
 
 
 
 
 
 
My JSP 'index.jsp' starting page 
 
 
 
 
 
 
#historyview { 
  border: 1; 
  background: #EAEAEE; 
} 
 
#historyview td { 
  font-size: 10px; 
} 
 
 
 
 
  
商品详情
<% ItemsDao dao = new ItemsDao(); //根据request传来的商品id 向dao中获得相对应的商品对象 Items item = dao.getItemById(Integer.parseInt(request .getParameter("id"))); if (item != null) { %> <% } //将该商品加入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); %>
" width="200" height="150">
<%=item.getName()%>
产地:<%=item.getCity()%>
价格:<%=item.getPrice()%> ¥
价格:<%=item.getPrice()%> ¥
<% //根据cookie 从dao获取最后浏览的三次记录 并保存到list集合 ArrayList historyItems = dao.getHistoryView(historyStr); if (historyItems != null && historyItems.size() > 0) { //遍历集合 for (Items historyItem : historyItems) { %> <% } } %>
你浏览过的商品
">" width="100" height="80" border="1">
<%=historyItem.getName()%>
产地:<%=historyItem.getCity()%>

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 getAllItems() { 
    // 商品集合 
    ArrayList list = new ArrayList(); 
    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 getHistoryView(String cookie) { 
    ArrayList list = new ArrayList(); 
    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])); 
  
 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方法有这句代码

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; 
  } 
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/148635.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号