zoukankan      html  css  js  c++  java
  • 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的了解。

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

  • 相关阅读:
    线程间的通信 与 线程池
    线程同步
    静态代理模式
    多线程状态
    线程、进程、多线程
    Java面向对象之泛型
    ConstraintLayout 用法
    搞NDK开发
    Linux基础命令【记录】
    c# 的一些基本操作或属性
  • 原文地址:https://www.cnblogs.com/cardiolith/p/9427623.html
Copyright © 2011-2022 走看看