乐码库:一个极速、放心、纯净的下载站! 更新: 资源发布
  • 您的位置:首页 > 技术文档 > Java > JAVAEE model1模型实现商品浏览记录(去除重复的浏览记录)(一)
  • 收藏本页
      JAVAEE model1模型实现商品浏览记录(去除重复的浏览记录)(一)
      发布时间:2016-12-21 08:07:16 关键词: JAVAEE,model1商品浏览记录,JAVAEE商品浏览记录去重,java商品浏览记录
      内容简介:这篇文章主要为大家详细介绍了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; 
      } 
    } 

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

      最新更新
      热门排行榜