案例项目 实现浏览商品记录的开发步骤

案例项目

目录

案例项目

实现DBHelper类,来获得数据库连接等

创建实体类,对应了数据库中的表

创建业务逻辑类(DAO)

创建页面层


采用Model1(JSP+JavaBean)来实现浏览商品记录的开发步骤:

用到JavaSE部分的JDBC技术,JavaEE部分的cookie保存浏览记录,JSP+JavaBean的分层架构思想

实现DBHelper类,来获得数据库连接等

MySQL数据库创建

数据库名:mydatabase;数据库密码admin

语句:

SET FOREIGN_KEY_CHECKS=0;

 

-- ----------------------------

-- Table structure for items

-- ----------------------------

DROP TABLE IF EXISTS `items`;

CREATE TABLE `items` (

  `id` int(11) NOT NULL auto_increment,

  `name` varchar(50) default NULL,

  `city` varchar(50) default NULL,

  `price` int(11) default NULL,

  `number` int(11) default NULL,

  `picture` varchar(500) default NULL,

  PRIMARY KEY  (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

 

-- ----------------------------

-- Records of items

-- ----------------------------

INSERT INTO `items` VALUES ('1', '沃特篮球鞋', '佛山', '180', '500', '001.jpg');

INSERT INTO `items` VALUES ('2', '安踏运动鞋', '福州', '120', '800', '002.jpg');

INSERT INTO `items` VALUES ('3', '耐克运动鞋', '广州', '500', '1000', '003.jpg');

INSERT INTO `items` VALUES ('4', '阿迪达斯T血衫', '上海', '388', '600', '004.jpg');

INSERT INTO `items` VALUES ('5', '李宁文化衫', '广州', '180', '900', '005.jpg');

INSERT INTO `items` VALUES ('6', '小米3', '北京', '1999', '3000', '006.jpg');

INSERT INTO `items` VALUES ('7', '小米2S', '北京', '1299', '1000', '007.jpg');

INSERT INTO `items` VALUES ('8', 'thinkpad笔记本', '北京', '6999', '500', '008.jpg');

INSERT INTO `items` VALUES ('9', 'dell笔记本', '北京', '3999', '500', '009.jpg');

INSERT INTO `items` VALUES ('10', 'ipad5', '北京', '5999', '500', '010.jpg');

DBHelper类

package util;



import java.sql.Connection;

import java.sql.DriverManager;



public class DBHelper {

   

    private static final String driver="com.mysql.cj.jdbc.Driver";//数据库驱动

    //连接数据库的URL地址

    private static final String url="jdbc:mysql://localhost:3306/mydatabase?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC";

    private static final String username="root";//数据库的用户名

    private static final String password="admin";//数据库的密码

   

    private static Connection conn=null;

    //静态代码块负责加载驱动

    static {

        try {

            Class.forName(driver);

        }catch (Exception ex) {

            ex.printStackTrace();

        }

    }

    //单例模式返回数据库连接对象

     public static Connection getConnection() throws Exception{

         if(conn==null) {

             conn= DriverManager.getConnection(url, username, password);

             return conn;

         }

         return conn;

         

     }

     public static void main(String[] args) {

        try {

             Connection conn=DBHelper.getConnection();

             if(conn!=null) {

                 System.out.println("数据库连接正常");

             }

             else {

                 System.out.println("数据库连接异常");

             }

        } catch (Exception ex) {

            ex.printStackTrace();

        }

       

    }  

}

 

注:

driver="com.mysql.cj.jdbc.Driver";

url="jdbc:mysql://localhost:3306/mydatabase?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC";

创建实体类,对应了数据库中的表

创建完实体类后-点击source-点击format格式化代码

package entity;



//商品类

public class Items {



    private int id;// 商品编号

    private String name;// 商品名称

    private String city;// 产地

    private int 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 int getPrice() {

        return price;

    }



    public void setPrice(int 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;

    }



}

 

创建业务逻辑类(DAO)

注意在写代码时,尽可能引进一些SQL类的包

package dao;



import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.util.ArrayList;





import entity.Items;

import util.DBHelper;



//商品的业务逻辑类

public class ItemsDAO {



         // 获得所有的商品信息

         public ArrayList<Items> getAllItems() {

                   Connection conn = null;

                   PreparedStatement stmt = null;

                   ResultSet rs = null;

                   ArrayList<Items> list = new ArrayList<Items>();// 商品集合

                   try {

                            conn = DBHelper.getConnection();

                            String sql = "select *from Items";// SQL语句

                            stmt = conn.prepareStatement(sql);

                            rs = stmt.executeQuery();

                            while (rs.next()) {

                                     Items item = new Items();

                                     item.setId(rs.getInt("id"));

                                     item.setCity(rs.getString("city"));

                                     item.setName(rs.getString("name"));

                                     item.setNumber(rs.getInt("number"));

                                     item.setPrice(rs.getInt("price"));

                                     item.setPicture(rs.getString("picture"));

                                     list.add(item);// 把一个商品加入集合

                            }

                            return list;// 返回集合



                   } catch (Exception ex) {

                            ex.printStackTrace();

                            return null;

                   } finally {

                            // 释放数据集对象

                            if (rs != null) {

                                     try {

                                               rs.close();

                                               rs = null;

                                     } catch (Exception ex) {

                                               ex.printStackTrace();

                                     }

                            }

                            // 释放语句对象

                            if (stmt != null) {

                                     try {

                                               stmt.close();

                                               stmt = null;

                                     } catch (Exception ex) {

                                               ex.printStackTrace();

                                     }

                            }



                   }



         }



         // 根据商品编号获取商品资料

         public Items getItemsById(int id) {

                   Connection conn = null;

                   PreparedStatement stmt = null;

                   ResultSet rs = null;

                   try {

                            conn = DBHelper.getConnection();

                            String sql = "select *from items where id=?";// SQL语句

                            stmt = conn.prepareStatement(sql);

                            stmt .setInt(1, id);

                            rs = stmt.executeQuery();

                            if (rs.next()) {

                                     Items item = new Items();

                                     item.setId(rs.getInt("id"));

                                     item.setCity(rs.getString("city"));

                                     item.setName(rs.getString("name"));

                                      item.setNumber(rs.getInt("number"));

                                     item.setPrice(rs.getInt("price"));

                                     item.setPicture(rs.getString("picture"));

                                     return item;

                            } else {

                                     return null;

                            }



                   } catch (Exception ex) {

                            ex.printStackTrace();

                            return null;

                   } finally {

                            // 释放数据集对象

                            if (rs != null) {

                                     try {

                                               rs.close();

                                               rs = null;

                                     } catch (Exception ex) {

                                               ex.printStackTrace();

                                     }

                            }

                            // 释放语句对象

                            if (stmt != null) {

                                     try {

                                               stmt.close();

                                               stmt = null;

                                     } catch (Exception ex) {

                                               ex.printStackTrace();

                                     }

                            }



                   }

         }

         // 获取最近浏览的前五条商品信息

         public ArrayList<Items> getViewList(String list){

                   ArrayList<Items> itemlist=new ArrayList<Items>();

                   int iCount = 5;//每次返回前五条记录

                   if(list!=null&&list.length()>0) {

                            String[] arr=list.split(",");

                            //如果商品记录大于或等于五条

                            if(arr.length>=5) {

                                     for(int i=arr.length-1;i>=arr.length-iCount-1;i--) {

                                                        itemlist.add(getItemsById(Integer.parseInt(arr[i])));

                                     }

                            }

                            else {

                                     for(int i=arr.length-1;i>=0;i--) {

                                               itemlist.add(getItemsById(Integer.parseInt(arr[i])));

                                     }

                            }

                            return itemlist;

                   }

                   else {

                            return null;

                   }

         }



}

注:如何把浏览记录保存在cookie中?

因为商品编号是唯一的,我们可以获取商品的编号,自然而然可以获取商品的信息。那么用户在每一次点击商品的详情的时候,他会把商品的编号传给details.jsp页面,那么我们可以想办法在details.jsp页面当中把传过来的商品编号给它保存在一个字符串当中。

主要思路:

把每次浏览的商品编号保存在字符串中,编号和编号之间用分隔符分隔,每次取出前五条记录。(把字符串保存在cookie当中,每次只要在cookie中读取这个字符串就可以了。把这个字符串通过分隔符转换成字符串数组,数组中的每个元素实际上就是商品编号)

 

创建页面层

Details.jsp

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8" %>

<%@ page import="entity.Items"%>

<%@ page import="dao.ItemsDAO"%>

<%

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 'details.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-left: 30px;

          margin-right:30px;

          margin-top: 5px;

          margin-bottom: 5px;

       }

       div dd{

          margin:0px;

          font-size:10pt;

       }

       div dd.dd_name

       {

          color:blue;

       }

       div dd.dd_city

       {

          color:#000;

       }

    </style>

  </head>

 

  <body>

    <h1>商品详情</h1>

    <hr>

    <center>

      <table width="750" height="60" cellpadding="0" cellspacing="0" border="0">

        <tr>

          <!-- 商品详情 -->

          <%

             ItemsDAO itemDao = new ItemsDAO();

             Items item = itemDao.getItemsById(Integer.parseInt(request.getParameter("id")));

             if(item!=null)

             {

          %>

          <td width="70%" valign="top">

             <table>

               <tr>

                 <td rowspan="4"><img src="images/<%=item.getPicture()%>" width="200" height="160"/></td>

               </tr>

               <tr>

                 <td><B><%=item.getName() %></B></td>

               </tr>

               <tr>

                 <td>产地:<%=item.getCity()%></td>

               </tr>

               <tr>

                 <td>价格:<%=item.getPrice() %>¥</td>

               </tr>

             </table>

          </td>

          <%

            }

          %>

          <%

              String list ="";

              //从客户端获得Cookies集合

              Cookie[] cookies = request.getCookies();

              //遍历这个Cookies集合

              if(cookies!=null&&cookies.length>0)

              {

                  for(Cookie c:cookies)

                  {

                      if(c.getName().equals("ListViewCookie"))

                      {

                         list = c.getValue();

                      }

                  }

              }

             

              list+=request.getParameter("id")+",";

              //如果浏览记录超过1000条,清零.

              String[] arr = list.split(",");

              if(arr!=null&&arr.length>0)

              {

                  if(arr.length>=1000)

                  {

                      list="";

                  }

              }

              Cookie cookie = new Cookie("ListViewCookie",list);

              response.addCookie(cookie);

         

          %>

          <!-- 浏览过的商品 -->

          <td width="30%" bgcolor="#EEE" align="center">

             <br>

             <b>您浏览过的商品</b><br>

             <!-- 循环开始 -->

             <%

                ArrayList<Items> itemlist = itemDao.getViewList(list);

                if(itemlist!=null&&itemlist.size()>0 )

                {

                   System.out.println("itemlist.size="+itemlist.size());

                   for(Items i:itemlist)

                   {

                        

             %>

             <div>

             <dl>

               <dt>

                 <a href="details.jsp?id=<%=i.getId()%>"><img src="images/<%=i.getPicture() %>" width="120" height="90" border="1"/></a>

               </dt>

               <dd class="dd_name"><%=i.getName() %></dd>

               <dd class="dd_city">产地:<%=i.getCity() %>&nbsp;&nbsp;价格:<%=i.getPrice() %> ¥ </dd>

             </dl>

             </div>

             <%

                   }

                }

             %>

             <!-- 循环结束 -->

          </td>

        </tr>

      </table>

    </center>

  </body>

</html>

Index.jsp

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>

<%@ page import="entity.Items"%>

<%@ page import="dao.ItemsDAO"%>

<%

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>

    <h1>商品展示</h1>

    <hr>

 

    <center>

    <table width="750" height="60" cellpadding="0" cellspacing="0" border="0">

      <tr>

        <td>

         

          <!-- 商品循环开始 -->

           <%

               ItemsDAO itemsDao = new ItemsDAO();

               ArrayList<Items> list = itemsDao.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() %>&nbsp;&nbsp;价格:¥ <%=item.getPrice() %></dd>

             </dl>

          </div>

          <!-- 商品循环结束 -->

       

          <%

                   }

              }

          %>

        </td>

      </tr>

    </table>

    </center>

  </body>

</html>

 

测试:

 

 

 

猜你喜欢

转载自blog.csdn.net/RayMa0305/article/details/81604371