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 + "/";
%> 

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

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

(0)

相关推荐

  • 仿当当网淘宝网等主流电子商务网站商品分类导航菜单

    本文实现了一个分类导航的菜单,和大多数流行的电子商务网站类似. 菜单的实现难点主要在CSS的编写上,并没有用到太多的JS. 下面只介少几处关键点,详细的实现可以直接查看源代码.所有的代码都在一个sidebar.html文件中. (1) 在图片中的标号1的开口如何实现? 开口右边是一个postion被设置成absolute的div, 这个div向左刚好偏移了1px, 使得左边的菜单栏压住其边框,而选中的菜单又边框是白色,就形成了缺口. (2) 在图片中标号2处如何实现每个连接不会中间换行? 可以把

  • 类似天猫商品详情随浏览器移动的示例代码

    使用该函数,必须集成于jquery包 原理:当浏览器移动到某个指定位置时,该图层上浮,然后加入一个样式,让该div层定位于浏览器顶部 复制代码 代码如下: //控制头部购物车的显示 function fixshow(min_height){ min_height ? min_height = min_height : min_height = 830; $(window).scroll(function(){ var s = $(window).scrollTop(); if( s > min_

  • asp.net下使用jQuery.AutoComplete完成仿淘宝商品搜索自动完成功能(改进了键盘上下选择体验)

    首先来看一些效果图: 这个是淘宝首页的搜索效果 京东首页的搜索效果 我修改的jQuery.AutoComplete实现的效果 一.实现效果分析 我要实现的效果就是和GOOGLE类似,需要满足一下3个要求(因为这样我认为是最好的用户体验,毕竟GOOGLE做了那么久了): .首先根据关键字列出关键字相关的信息(包含统计信息) .可以使用键盘上下键选择(默认不选中第一条),文本框内容根据选择信息变换 .当选择第一或者最后一条时再向上或向下则取消选中,文本框中内容还原回原先输入的内容(这点比较重要,京东

  • 基于jquery的商品展示放大镜

    直接上代码吧(一共也才100来行,小东西) 复制代码 代码如下: $(document).ready(function() { _el("biggerPic").style.marginLeft = (0 - (getOffsetNumber(_el("biggerPic").style.width) - getOffsetNumber(_el("container").style.width))) + "px"; _el(&

  • Android仿淘宝商品浏览界面图片滚动效果

    用手机淘宝浏览商品详情时,商品图片是放在后面的,在第一个ScrollView滚动到最底下时会有提示,继续拖动才能浏览图片.仿照这个效果写一个出来并不难,只要定义一个Layout管理两个ScrollView就行了,当第一个ScrollView滑到底部时,再次向上滑动进入第二个ScrollView.效果如下: 需要注意的地方是: 1.如果是手动滑到底部需要再次按下才能继续往下滑,自动滚动到底部则不需要 2.在由上一个ScrollView滑动到下一个ScrollView的过程中多只手指相继拖动也不会导

  • Jquery 最近浏览过的商品的功能实现代码

    <script type="text/javascript" src="JS/jquery.js"></script> //与Prototype 类似的框架 <script type="text/javascript" src="JS/JCookie.js"></script> //插件 复制代码 代码如下: /*JCookie.js * / jQuery.cookie = fu

  • PHP实现采集抓取淘宝网单个商品信息

    调用淘宝的数据可以使用淘宝提供的api,如果只需调用淘宝商品图片名称等公开信息在自己网站上,使用php中的 file_get_contents 函数实现即可. 思路: file_get_contents(url) 该函数根据 url 如 http://www.baidu.com 将该网页内容(源码)以字符串形式输出(一个整字符串),然后配合preg_match,preg_replace等这些正则表达式操作就可以实现获取该url特定div,img等信息了.当然前题是淘宝在单个商品页面的结构是固定的

  • PHP 类商品秒杀计时实现代码

    要求要有小时分钟秒的实时倒计时的显示,用户端修改日期时间不会影响到倒计时的正常显示(也就是以服务器时间为准). 其实这和很多的考试等系统的时间限制功能同样的要求. 总不能用ajax每秒都获取服务器时间吧,所以实时倒计时一定要用javascript实现.这很简单,网上一大把的例子. 现在问题是解决用户端修改日期时间对我们的显示的影响. 解决的办法是计算出用户端的时间和服务器的时间差,这样问题的完成解决了. 这样只需要运行一次php,实时倒计时的时间就和服务器的时间同步了. 理论是同步的,但实际测试

  • JQuery实现的购物车功能(可以减少或者添加商品并自动计算价格)

    购物车点击可以减少或者添加商品并自动计算价格: 购物车中可能有这样的功能,那就是点击按钮可以实现商品数量的减少或者增加,并且能够实时的计算出总的商品价格,下面就通过代码实例介绍一下如何实现此功能,当然下面的这个模拟实现的购物车难登大雅之堂,但是可以从中得到一些启发或者相关的知识点,代码如下: 复制代码 代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title&

  • Android时光轴实现淘宝物流信息浏览效果

    本文实例为大家分享了Android时光轴的制作方法,供大家参考,具体内容如下 1. 效果 2.分析和实现 2.1效果实现: 之前想了一下这种效果,因为只需要用到自己的项目中所以采用图片直接布局的形式去实现效果,虽然效果实现了,但是后来发现了出了很多问题:第一Android的分辨率太多了直接设置xxxdp难免有部分机型出现不适配的情况,第二我们与右边这部分需要对齐的问题这个就比较头大. 所以目前的实现效果方式是这样子的: 1.自定义TimerLineMarker,根据自定义属性获取点和线的背景资源

随机推荐