JavaWeb学习——Jsp入门案例(实现简易的商品信息展示)

引言:最近在慕课网上学习了基础Jsp入门教学视频,在课程的最后有一个案例项目,以Jsp+JavaBean模式实现商品信息展示的Java Web Project。今天我就简单地回顾一下这个项目的流程。

 

一. 项目总体介绍

    - 预期效果

    - 流程概述

     ° 实现DBHelper类(数据库连接)

     ° 创建实体类(Items)

     ° 创建业务逻辑类(ItemsDAO)

     ° 创建页面层

 

二. 项目实现

1. DBHelper类设计

    在工程目录src文件夹下创建util包,包中新建DBHelper类。

    DBHelper类的目的是建立与MySQL数据库的连接。

package util;

import java.sql.Connection;
import java.sql.DriverManager;

public class DBHelper {
    private static final String DRIVER = "com.mysql.jdbc.Driver";
    private static final String URL = "jdbc:mysql://localhost:3306/shopping?useUnicode=true&characterEncoding=utf8";
    private static final String USERNAME = "root";
    private static final String PASSWORD = "******";
    private static Connection con = null;
   
    //加载数据库驱动
    static {
    	try{
    		Class.forName(DRIVER);
    	}catch(Exception ex){
    		ex.printStackTrace();
    	}
    }
    
    //单例模式返回数据库连接对象
    public static Connection getConnection() throws Exception{
    	if(con==null){
    		con = DriverManager.getConnection(URL, USERNAME, PASSWORD);
    		return con;
    	}
    	return con;
    }
}

    同时不要忘记在工程文件中导入MySQL对应驱动程序的jar包。

    在navicat中创建shopping数据库并执行以下语句创建items表和插入数据

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');

 

2. 实体类(Items)设计

    Items类中数据成员对应表items的属性,右键Source选择为每个数据成员进行封装。

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

 

3. 业务逻辑类(ItemsDAO)设计

    ItemsDAOS类主要是实现以后要在Jsp页面中运送数据的方法,包括获取所有商品资料,根据id获取对应商品资料和获取浏览记录中最近5条记录。

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 ItemsDAOS {
    //获取数据库内所有的商品资料
    public ArrayList<Items> getAllItems(){
        Connection conn = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;
        ArrayList<Items> list = new ArrayList<>();  //商品集合
        
        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.setName(rs.getString("name"));
                item.setCity(rs.getString("city"));
                item.setPrice(rs.getInt("price"));
                item.setNumber(rs.getInt("number"));
                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 getItemById(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.setName(rs.getString("name"));
                item.setCity(rs.getString("city"));
                item.setPrice(rs.getInt("price"));
                item.setNumber(rs.getInt("number"));
                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();
                }
            }
        }
    }
    
    //获取最近浏览的5条商品资料
    public ArrayList<Items> getViewList(String list){
        ArrayList<Items> itemList = new ArrayList<>();
        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;i--){
                    itemList.add(getItemById(Integer.valueOf(arr[i])));
                }
            }
            else{
                for(int i=arr.length-1;i>=0;i--){
                    itemList.add(getItemById(Integer.valueOf(arr[i])));
                }
            }
            return itemList;
        }else {
            return null;
        }
    }
}

 

4. 页面层的设计

    最后一步是在jsp页面中实现浏览商品信息。

    主页index.jsp

 1 <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>
 2 <%@ page import="dao.ItemsDAOS" %>
 3 <%@ page import="entity.Items"  %>
 4 <%
 5 String path = request.getContextPath();
 6 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 7 %>
 8 
 9 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
10 <html>
11   <head>
12     <base href="<%=basePath%>">
13     
14     <title>My JSP 'index.jsp' starting page</title>
15     <meta http-equiv="pragma" content="no-cache">
16     <meta http-equiv="cache-control" content="no-cache">
17     <meta http-equiv="expires" content="0">    
18     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
19     <meta http-equiv="description" content="This is my page">
20     <!--
21     <link rel="stylesheet" type="text/css" href="styles.css">
22     -->
23     <style type="text/css">
24         div{
25            float: left;
26            margin: 10px;
27         }
28         div dd{
29            margin: 0px;
30            font-size: 10px;
31         }
32         div dd.dd_name{
33            color: blue;
34         }
35         div dd.dd_city{
36            color: #000;
37         }
38     </style>
39   </head>
40   
41   <body>
42     <h1>商品展示</h1>
43     <hr>
44     
45     <center>
46     <table width="750" height="60" cellpadding="0" cellspacing="0" border="0">
47       <tr>
48         <td>
49         
50           <!-- 商品循环开始  -->
51           <%
52             ItemsDAOS itemsDao = new ItemsDAOS();
53             ArrayList<Items> list = itemsDao.getAllItems();
54             if(list!=null&&list.size()>0){
55                 for(int i=0;i<list.size();i++){
56                     Items item = list.get(i);
57           %>  
58            <div>
59            <dl>
60              <dt>
61                <a href="details.jsp?id=<%=item.getId() %>"><img src="images/<%=item.getPicture() %>" width="120" height="120"></a>
62              </dt>
63              <dd class="dd_name"><%=item.getName() %></dd>
64              <dd class="dd_city">产地:<%=item.getCity() %>&nbsp;&nbsp;价格:<%=item.getPrice() %></dd>
65            </dl>
66            </div>
67           <!-- 商品循环结束  -->
68           <%
69                 }
70             }  
71            %>
72            
73         </td>
74       </tr>
75     </table>
76     </center>
77   </body>
78 </html>

    商品详情页details.jsp

  1 <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>
  2 <%@ page import="dao.ItemsDAOS" %>
  3 <%@ page import="entity.Items"  %>
  4 <%
  5 String path = request.getContextPath();
  6 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  7 %>
  8 
  9 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 10 <html>
 11   <head>
 12     <base href="<%=basePath%>">
 13     
 14     <title>My JSP 'details.jsp' starting page</title>
 15     
 16     <meta http-equiv="pragma" content="no-cache">
 17     <meta http-equiv="cache-control" content="no-cache">
 18     <meta http-equiv="expires" content="0">    
 19     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 20     <meta http-equiv="description" content="This is my page">
 21 
 22     <style type="text/css">
 23         div{
 24            float: left;
 25            margin: 10px;
 26         }
 27         div dd{
 28            margin: 0px;
 29            font-size: 10px;
 30         }
 31         div dd.dd_name{
 32            color: blue;
 33         }
 34         div dd.dd_city{
 35            color: #000;
 36         }
 37     </style>
 38   </head>
 39   
 40   <body>
 41     <h1>商品详情</h1>
 42     <hr>
 43     <center>
 44     <table width="750" height="60" cellpadding="0" cellspacing="0" border="0">
 45       <tr>
 46         <!-- 商品详情  -->
 47         <%
 48             ItemsDAOS itemsDao = new ItemsDAOS();
 49             Items item = itemsDao.getItemById(Integer.valueOf(request.getParameter("id")));
 50             if(item!=null){
 51          %>
 52         <td width="70%" valign="top">
 53           <table>
 54             <tr>
 55               <td rowspan="4"><img src="images/<%=item.getPicture() %>" width="200" height="200"/></td>
 56             </tr>
 57             <tr>
 58               <td><B><%=item.getName() %></B></td>
 59             </tr>
 60             <tr>
 61               <td>产地:<%=item.getCity() %></td>
 62             </tr>
 63             <tr>
 64               <td>价格:<%=item.getPrice() %></td>
 65             </tr>
 66           </table>
 67         </td>
 68         <%
 69             }
 70          %>
 71         <%
 72             String list = "";
 73             Cookie[] cookies = request.getCookies();
 74             if(cookies!=null&&cookies.length>0){
 75                 for(Cookie c: cookies){
 76                     if(c.getName().equals("listViewCookie")){
 77                         list = c.getValue();
 78                     }
 79                 }  
 80             }
 81             list+=request.getParameter("id")+",";  
 82             //如果浏览记录超过1000条,清零
 83             String[] arr = list.split(",");
 84             if(arr!=null&&arr.length>0){
 85                 if(arr.length>=1000)
 86                     list = "";
 87             }
 88             
 89             Cookie cookie = new Cookie("listViewCookie",list);
 90             response.addCookie(cookie);
 91          %>
 92          <!-- 浏览过的商品  -->
 93          <td width="30%" bgcolor="#EEE" align="center">
 94            <br>
 95            <b>您浏览过的商品</b><br>
 96            <!-- 循环开始 -->
 97            <%
 98                ArrayList<Items> itemsList = itemsDao.getViewList(list);
 99                if(itemsList!=null&&itemsList.size()>0){
100                    for(Items i: itemsList)
101                    {
102             %>
103            <div>
104              <dl>
105                <dt>
106                  <a href="details.jsp?id="<%=i.getId() %>"><img src="images/<%=i.getPicture() %>" width="120" height="90" border="1"></a>
107                </dt>
108                <dd class="dd_name"><%=i.getName() %></dd>
109                <dd class="dd_city">产地:<%=i.getCity() %>&nbsp;&nbsp;价格:<%=i.getPrice() %></dd>
110              </dl>
111            </div>
112            <% 
113                    }           
114                } 
115            %>
116            <!-- 循环结束 -->
117          </td>
118       </tr>
119     </table>
120     </center>
121   </body>
122 </html>

 

三. 项目总结

    在Jsp中执行脚本获取Items对象,再通过Items中封装的方法来获取信息在页面上显示。(对象判空不可缺,否则运行服务器加载页面会报错)

     Jsp页面 ——参数——> Java类方法

     Jsp页面 <——数据—— Java类方法

 

Jsp基础学习已经告一段落,明天我将整理一下Jsp相关基础知识,之后会通过专业书籍进一步提高对Jsp的了解。

 

---每天积累一点点,吃水不忘挖井人---

 

posted @ 2018-08-05 22:26  Cardiolith  阅读(10855)  评论(0编辑  收藏  举报