java-使用Servlet+JSP+Mysql+JDBC制作简易的商品管理系统

目录
一、前言
二、环境搭建
三、前端页面
1. index.jsp 登陆首页
2. shopping.jsp 商品管理页面
3. addGoods.jsp 添加商品页面
4. updateGoods.jsp 修改商品信息页面
四、后端
1. 登录用户检验
2. 商品管理处理
    2.1 GoodsServlet 代码
    2.2 BasicDao 代码
    2.3 GoodsDao 代码
    2.4 GoodsService 代码
    2.5 JdbcUtil 工具类
    2.6 数据库配置信息文件
    2.7 web.xml文件
五、goods表sql文件
六、完整代码下载
七、总结


一、前言

 在开始本教程前,首先得有一些知识储备:ServlerJSPMysqlJDBC。如果没有相关的知识,可以参考我有关这方面的文章:👇

相关文章

Servlet的入门Servlet的入门
JSP的使用JSP的使用
MysqlMysql
JDBCJDBC

二、环境搭建

 工欲善其事,必先利其器。我们在项目开始前,需要导入一些相关的依赖jar 包。

  1. 👉commons-dbutils-1.7.jar👈:apache提供的一个工具类,可以将数据库查询的数据封装成对象。
  2. 👉druid-1.2.9.jar👈:德鲁伊数据库连接池。
  3. 👉jsp-api.jar👈:JSP页面需要的jar包。
  4. 👉mysql-connector-j-8.0.3.jar👈:Mysql8.0的驱动包。你的Mysql是5.7需要换成5.7的驱动包
  5. 👉servlet-api.jar👈:使用Servlet需要的jar包。
  6. 👉taglibs-standard-impl-1.2.5.jar👈
    👉taglibs-standard-spec-1.2.5.jar👈:这两个是JSTL需要的jar包。

📌项目的结构截图👇

在这里插入图片描述

三、前端页面

 这里我们前端使用的是Etui۹(・༥・´)و ̑̑
博客里边的页面。需要的小伙伴,可以去复制粘贴✅即可。我们下面给出相关的html代码(因为我们更改了里边的有些参数)。👇

1. index.jsp 登录首页

在这里插入图片描述

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>首页</title>
  <link rel="stylesheet" href="./css/style.css">
</head>
<body>
<div class="outer_box">
  <form action="/system/checkUserServlet" class="inner_box" method="post">
    <div class="left_label"></div>
    <div class="center_form">
      <p class="title"><span>S&nbsp;i&nbsp;g&nbsp;n&nbsp;I&nbsp;n&nbsp;&nbsp;&nbsp;&nbsp;F&nbsp;o&nbsp;r&nbsp;m</span></p>
      <p><input type="text" placeholder="用户名" name="username" required="required"></p>
      <p><input type="password" placeholder="密码" name="password" required="required"></p>
    </div>
    <div class="right_label"></div>
    <div class="signIn_btn">
            <span  style="color:black;">
                <button style="color:black; width: 100px;" type="submit" >登录</button>
            </span>
    </div>
  </form>
</div>
</body>
</html>

🚀 我们表单的提交会直接跳转到/system/checkUserServlet

2. shopping.jsp 商品管理页面

 该页面是登录成功之后跳转的页面。在该页面显示所有的商品。如下图:👇

在这里插入图片描述

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>商品展示</title>
    <style>
        .container {
            margin-top: 200px;
        }
        table,th,td {
            border: 1px solid black;
            text-align: center;
            padding: 5px;
        }
        th,td{
            width: 100px;
        }
    </style>
</head>
<body>
    <div class="container">
        <table style="margin: 0 auto;">
            <c:if test="${empty sessionScope.goodsList}">
                <tr>
                    <th>没有商品了!!!</th>
                </tr>
            </c:if>
            <c:if test="${!empty sessionScope.goodsList}">
                <tr >
                    <th>编号</th>
                    <th>名称</th>
                    <th>价格</th>
                    <th>库存</th>
                    <th>删除</th>
                    <th>修改</th>
                </tr>
                <%
                    int i = 1;
                %>
                <c:forEach items="${sessionScope.goodsList}" var="goods">
                    <tr>
                        <td><%=i++%></td>
                        <td>${goods.good_name}</td>
                        <td>${goods.price}</td>
                        <td>${goods.stock}</td>
                        <td><a href="/system/goodsServlet?delete_id=${goods.good_id}">删除</a></td>
                        <td><a href="/system/updateGoods.jsp?update_id=${goods.good_id}">修改</a></td>
                    </tr>
                </c:forEach>
            </c:if>
            <tr>
                <td colspan="6"><a href="/system/addGoods.jsp">添加商品</a></td>
            </tr>
        </table>
    </div>
</body>
</html>

3. addGoods.jsp 添加商品页面

 当点击shopping.jsp页面中的添加商品之后会跳转到这个页面。该页面可以添加商品,将商品信息添加到数据库。👇

在这里插入图片描述

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>添加商品页面</title>
    <style>
        .container {
            width: 500px;
            height: 450px;
            margin: 200px auto;
            text-align: center;
            border: 1px solid black;

        }
        input {
            padding-top: 10px;
            margin: 5px;
        }
    </style>
</head>
<body>
<div class="container">
    <form action="/system/goodsServlet?add=yes" method="post" >
        <div style="margin-top: 150px">
            商品名称:<input required="required" name="good_name"><br>
            商品价格:<input required="required" name="good_price"><br>
            商品库存:<input required="required" name="good_stock"><br>
            <input type="submit">
        </div>
    </form>
</div>

</body>
</html>

4. updateGoods.jsp 修改商品信息页面

 在shopping.jsp页面点击修改之后会跳转到这个页面。该页面会读取该商品的信息到输入框中,用户可以修改这些信息,点击修改之后会将修改后的商品信息更新到数据库。👇

在这里插入图片描述

<%@ page import="com.jl.service.GoodsService" %>
<%@ page import="com.jl.entity.Goods" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>商品修改页面</title>
    <style>
        .container {
            width: 500px;
            height: 450px;
            margin: 200px auto;
            text-align: center;
            border: 1px solid black;

        }
        input {
            padding-top: 10px;
            margin: 5px;
        }
    </style>
</head>
<body>
<%
    String update_id = request.getParameter("update_id");
    GoodsService goodsService = new GoodsService();
    Goods goods = goodsService.queryGoodsById(update_id);
%>
<div class="container">
    <form action="/system/goodsServlet?update=yes&good_id=<%=update_id%>"  method="post" >
        <div style="margin-top: 150px">
            商品名称:<input required="required" name="good_name" value="<%=goods.getGood_name()%>"><br>
            商品价格:<input required="required" name="good_price" value="<%=goods.getPrice()%>"><br>
            商品库存:<input required="required" name="good_stock" value="<%=goods.getStock()%>"><br>
            <input type="submit" value="修改">
        </div>
    </form>
</div>

</body>
</html>

四、后端

1. 登录用户检验

 这里的用户检验,没有单独建一张user用户表来存储注册的用户。我们这里用户名和密码是直接写死的(用户名:admin,密码:123)。有兴趣的小伙伴可以自行添加功能。
 登录成功跳转商品管理页面(shopping.jsp)
 登录失败则返回登录失败字段,如下图:👇

在这里插入图片描述
📌CheckUserServlet代码

package com.jl.controller;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class CheckUserServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        if ("admin".equals(username) && "123".equals(password)){
            request.getRequestDispatcher("/goodsServlet").forward(request,response);
        }else {
            response.setContentType("text/html;charset=utf-8");
            PrintWriter writer = response.getWriter();
            writer.println("<h1>登陆失败<h1>");
            writer.println("<a href='/system/index.jsp'>点击返回</a>");
        }
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

2. 商品管理处理

2.1 GoodsServlet 代码

package com.jl.controller;

import com.jl.entity.Goods;
import com.jl.service.GoodsService;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.List;

public class GoodsServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        String delete_id = request.getParameter("delete_id");
        String add = request.getParameter("add");
        String update = request.getParameter("update");
        if (delete_id!=null){
            deleteGoods(delete_id);
        }

        if (add!=null){
            String good_name = request.getParameter("good_name");
            Double good_price = Double.valueOf(request.getParameter("good_price"));
            String good_stock = request.getParameter("good_stock");
            Goods goods = new Goods(null,good_name,new BigDecimal(good_price),Integer.valueOf(good_stock));
            addGoods(goods);
        }

        if (update!=null){
            String goodId = request.getParameter("good_id");
            String good_name = request.getParameter("good_name");
            Double good_price = Double.valueOf(request.getParameter("good_price"));
            String good_stock = request.getParameter("good_stock");
            Goods goods = new Goods(Integer.valueOf(goodId), good_name, new BigDecimal(good_price), Integer.valueOf(good_stock));
            updateGoods(goods);
        }
        GoodsService goodsService = new GoodsService();
        List<Goods> goodsList = goodsService.getGoodsList();
        HttpSession session = request.getSession();
        session.setAttribute("goodsList",goodsList);
        request.getRequestDispatcher("/shopping.jsp").forward(request,response);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    // 删除
    private void deleteGoods(String good_id){
        GoodsService goodsService = new GoodsService();
        goodsService.deleteGoods(good_id);
    }

    // 添加商品
    private void addGoods(Goods goods){
        GoodsService goodsService = new GoodsService();
        goodsService.addGoods(goods);
    }

    // 修改商品
    private void updateGoods(Goods goods){
        GoodsService goodsService = new GoodsService();
        goodsService.updateGoods(goods);
    }
}

2.2 BasicDao 代码

package com.jl.dao;
import com.jl.myUtil.JdbcUtil;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

public class BasicDao<T> {
    private QueryRunner qr = new QueryRunner();
        public Boolean dmlData(String sql,Object... parameters){
            Connection connection = null;
            try {
                connection = JdbcUtil.getConnection();
                int update = qr.update(connection, sql, parameters);
                if (update>0){
                    return true;
                }else {
                    return false;
                }
            } catch (SQLException e) {
                throw new RuntimeException(e);
            } finally {
                JdbcUtil.close(connection,null,null);
            }
        }
        public List<T> queryMulti(String sql, Class<T> clazz, Object... parameters){
            Connection connection = null;
            try {
                connection = JdbcUtil.getConnection();
                List<T> query = qr.query(connection, sql, new BeanListHandler<>(clazz), parameters);
                return  query;
            } catch (SQLException e) {
                throw new RuntimeException(e);
            } finally {
                JdbcUtil.close(connection,null,null);
            }
        }

        /**
         *
         * @param sql
         * @param clazz
         * @param parameters
         * @return 一行数据
         */
        public T querySingle(String sql, Class<T> clazz,Object... parameters){
            Connection connection = null;
            try {
                connection = JdbcUtil.getConnection();
                return qr.query(connection, sql, new BeanHandler<>(clazz), parameters);
            } catch (SQLException e) {
                throw new RuntimeException(e);
            } finally {
                JdbcUtil.close(connection,null,null);
            }
        }

        /**
         *
         * @param sql
         * @param parameters
         * @return 单行单列
         **/
        public T rowColumn(String sql,Object... parameters){
            Connection connection = null;
            try {
                connection = JdbcUtil.getConnection();
                T query = (T) qr.query(connection, sql, new ScalarHandler(), parameters);
                return  query;
            } catch (SQLException e) {
                throw new RuntimeException(e);
            } finally {
                JdbcUtil.close(connection,null,null);
            }
        }

}

2.3 GoodsDao 代码

package com.jl.dao;

import com.jl.entity.Goods;

import java.util.List;

public class GoodsDao extends BasicDao<Goods>{
    // 显示所有商品
    public List<Goods> showAllData(){
        return queryMulti("SELECT * FROM `goods`",Goods.class);
    }

    // 删除数据(根据ID)
    public Boolean deleteData(String good_id){
        return dmlData("DELETE FROM `goods` WHERE `good_id`=" + good_id);
    }
    // 添加数据
    public Boolean addData(Goods goods){
        return dmlData("INSERT INTO `goods`(`good_name`,`price`,`stock`) VALUES('"+ goods.getGood_name() +"',"+ goods.getPrice() +","+ goods.getStock() +")");
    }

    // 修改数据
    public Boolean updateData(Goods goods){
        return dmlData("UPDATE `goods` SET `good_name`='"+ goods.getGood_name() +"',`price`="+ goods.getPrice() +",`stock`="+ goods.getStock() +" WHERE `good_id`="+ goods.getGood_id() +"");
    }

    // 显示单条数据
    public Goods singleData(String good_id){
        return querySingle("SELECT * FROM `goods` WHERE `good_id`=" + good_id,Goods.class);
    }
}

2.4 GoodsService 代码

package com.jl.service;

import com.jl.dao.GoodsDao;
import com.jl.entity.Goods;

import java.util.List;

public class GoodsService {
    private GoodsDao goodsDao = new GoodsDao();
    // 显示所有商品
    public List<Goods> getGoodsList(){
        return goodsDao.showAllData();
    }

    // 删除商品
    public Boolean deleteGoods(String good_id){
        return goodsDao.deleteData(good_id);
    }

    // 添加商品
    public Boolean addGoods(Goods goods){
        return goodsDao.addData(goods);
    }

    // 修改商品
    public Boolean updateGoods(Goods goods){
        return goodsDao.updateData(goods);
    }
    // 根据ID查询单个数据
    public Goods queryGoodsById(String good_id){
        return goodsDao.singleData(good_id);
    }
}

2.5 JdbcUtil 工具类

package com.jl.myUtil;
import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class JdbcUtil {
    private static DataSource ds;
    static {
        Properties properties = new Properties();
        try {
            properties.load(JdbcUtil.class.getClassLoader().getResourceAsStream("jdbc.properties"));
            ds = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
    public static Connection getConnection() {
        Connection connection = null;
        try {
            // 得到连接
            connection = ds.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }
    public static void close(Connection connection, Statement statement, ResultSet resultSet){
        if (resultSet != null){
            try {
                resultSet.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if (connection!=null){
            try {
                connection.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if (statement != null){
            try {
                statement.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
}

2.6 数据库配置信息文件

📌jdbc.properties

#Mysql
driverClassNam=com.mysql.cj.jdbc.Driver 
url=jdbc:mysql://localhost:3306/goodsSystem?serverTimezone=UTC
username=数据库用户名
password=数据库密码

如果Mysql为5.7版本,请将driverClassNam值改为com.mysql.jdbc.Driver

2.7 web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>CheckUserServlet</servlet-name>
        <servlet-class>com.jl.controller.CheckUserServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>CheckUserServlet</servlet-name>
        <url-pattern>/checkUserServlet</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>GoodsServlet</servlet-name>
        <servlet-class>com.jl.controller.GoodsServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>GoodsServlet</servlet-name>
        <url-pattern>/goodsServlet</url-pattern>
    </servlet-mapping>
</web-app>

五、goods表sql文件

CREATE DATABASE `goodsSystem`;

CREATE TABLE goods(
	`good_id` INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
	`good_name` VARCHAR(32) NOT NULL,
	`price` DECIMAL NOT NULL,
	`stock` INT NOT NULL
)CHARSET=utf8;

INSERT INTO `goods`(`good_name`,`price`,`stock`) VALUES('电视',2000,100);

六、完整代码下载

 为了防止有些同学粘贴的代码运行出错,下面给出完整代码下载地址:👇

📥完整代码下载地址

七、总结

 到这里,关于这个简易商品管理系统就完成了。这个系统意在为了让大家加深对ServletJDBC等这些有关JavaWeb技术的理解😜。大佬勿喷~~🙏

最后希望大家多多 关注+点赞+收藏^_^,你们的鼓励是我不断前进的动力!!!
感谢感谢~~~🙏🙏🙏

  • 7
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艺术留白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值