JAVAEE model1模型实现商品浏览记录(去除重复的浏览记录)(一)_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;
  }
} 

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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索javaee
java商品浏览记录
ios jsonmodel去重复、迅雷9去除右侧浏览器、迅雷9去除浏览器、迅雷去除浏览器、微信 浏览器 重复请求,以便于您获取更多的相关知识。

时间: 2024-09-19 12:54:10

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

dw-如何在DW/asp中让重复记录横向重复3条记录,然后换行继续直到写入完所有

问题描述 如何在DW/asp中让重复记录横向重复3条记录,然后换行继续直到写入完所有 在做一个产品展示页,数据表名称为furniture_pro里面有若干产品(至少9个以上)现在希望用DW中重复区域这个功能展示这些产品,希望每行只有三个产品,不知道在Dw中怎么实现 解决方案 写一个两重循环,排完一行插入一个分割符 解决方案二: Repeat1__index=Repeat1__index+1 Repeat1__numRows=Repeat1__numRows-1 if (Repeat1__inde

sql去除重复记录问题,要求只用一条select语句

问题描述 sql去除重复记录问题,要求只用一条select语句 我有个表,有些记录属于部分重复,像根据时间去掉重复记录比如这个表: t1 t2 小明 2015-06-25小明 2015-09-21小红 2015-03-01小花 2015-03-01小白 2015-03-01 里面的小明那条记录,我只想保留2015-09-21这条最新的记录. 麻烦的是,我只能用一条select语句,不能把另一条记录删掉.求解 解决方案 SELECT a.* FROM table1 a WHERE NOT EXIS

SQL查询重复数据与去除重复记录语句

例如:查询重复2次的数据并列出  代码如下 复制代码 select * from park_room where parkNum in ( select parkNum from park_room group by parkNum having count(parkNum) > 1 ) order by parkNum字段信息说明: park_room--停车位表 parkNum--车位号 例子 去除重复记录  代码如下 复制代码 SELECT COUNT(distinct parkNum)

多表查询去除重复记录

多表查询去除重复记录 首先关于sql  多表查询去除重复记录我们就可以想到用group by 或distinct 再着想到inner left 等, 下面来看看个实例 看一个distinct 实例 现在将完整语句放出: select *, count(distinct name) from table group by name 结果:    id name count(distinct name)    1 a 1    2 b 1    3 c 1 最后一项是多余的,不用管就行了,目的达到.

sql 去除重复记录的语句

sql 去除重复记录的语句 表A: ID,Name 表B: ID,AID,Value   select case when a.name='ccc' then null else a.name end name,b.value from 表A a,表B b where a.ID=b.AID select nullif(a.name,'ccc') name ,b.value from 表A a,表B b where a.ID=b.AID 生成测试数据表: [tb] IF OBJECT_ID('[t

excel中去除重复记录公式

品 编码(把编码为1的统计  出来)       A01 1             A02 1             A03 0             A01 0             A05 1             A01 1             A05 0             A03 0                 要求:          把B列中值为1的,A列中不重复的值 的总数统计出来                             满足这个要求的值是:

Excel去除重复项的三种常用技巧

Excel去除重复项的三种常用技巧   在另外一些场景下,用户也许会希望找出并剔除某几个字段相同的但并不完全重复的"重复项",例如下面图中的第7行记录和第12行记录中的[姓名]字段内容相同,但其他字段的内容则不完全相同. 以上这两种重复项的类型有所不同,在剔除操作的实现上也略有区别,但本质上并无太大差别,可以互相借鉴参考.下面将以这两种场景为例,介绍三种常用的删除Excel中重复项操作技巧. 一.使用删除重复项功能去除Excel中的重复项 [删除重复项]功能是Excel 2007版本以

excel表格怎么去除重复

1.EXCEL表格中如何去除重复数据? 选中你需要的区域--筛选--高级筛选--选择不重复记录(勾上) 2.如何将两个EXCEL表格合并后去除重复的姓名剩下数据是不重复的数据 现在我把问题简化为去重名的情况 如下图在A1到A9有一个名单表 然后我在C这一列在中用公式除去重复的名单 C1中直接写 =A1 C2中写 =IF(NOT(COUNTIF($A$1:A2,A2)-1),A2,"") 再拖下来 重复的地方都是空白的 剩下的就好办了 你再排序 空白的都在一起了 3.EXCEL表格中如何

MYSQL中GROUP分组去除重复数据

GROUP分组去除重复数据 /**  * 清除同一专题中重复导入的数据  * @author tanteng  * @date 2014.07.27  */ public function fuck_repeat(){  set_time_limit(0);  $sql = "SELECT `id` FROM `v95_special_content` GROUP BY `specialid`,`curl` HAVING COUNT(`curl`)>1 ";  $result =