javaWeb项目:简易图书系统

本文档详细介绍了使用JavaWeb开发一个简易图书系统的过程,包括Tomcat服务器的配置、数据库的设计与操作、项目的目录结构及各组件创建,以及页面展示功能。适合初学者实践。
摘要由CSDN通过智能技术生成

javaWeb项目介绍:

  • 1、没有使用maven
  • 2、使用注解加文件配置xml(只配置了错误页面)方式
  • 3、只是用一个index.jsp页面配合js来完成整个项目,
  • 4、使用原生js、axios方式请求数据
  • 5、项目不完善,只适合javaWeb初级项目,可以练练手
  • 6、…

项目gif图片

在这里插入图片描述

零、Tomcat服务器

1、下载和注意事项

  • 可以在官网下载,但是速度太慢了👉官网
  • 推荐使用镜像网站下载👉镜像网站
  • 请注意各个版本对应的jdk版本
    在这里插入图片描述
  • 注意:
  • 1 若版本为10.1.x则jdk最低为11,否则tomcat启动不了
  • 2 要解压在没有中文字符的文件夹中

2、文件夹介绍

  • bin文件夹 👉可执行文件
  • conf文件夹👉全局配置文件
  • lib文件夹👉依赖的jar包
  • logs文件夹👉存放tomcat运行日志
  • temp文件夹👉临时文件夹
  • webapps文件夹👉放项目之地
  • work 文件夹👉

一、 数据库

1、新建数据库weblibrary

create database weblibrary charset utf8;
use weblibrary;

2、创建用户表lbuser

# 用户表
create table if not exists lbUser(
    id int primary key auto_increment,#编号
    uid varchar(30) unique not null default '',#账号
    uname varchar(50) default '',#用户名
    upwd varchar(32) not null default '',#密码:md5加密
    uage int default 18,#年龄
    uphone char(11) default '', #电话
    uquestion varchar(50) default '',#密保问题
    uanwser varchar(50) default ''#密保答案
) charset utf8;

3、创建图书表books

create table books(
    id int primary key auto_increment,#编号
    bname varchar(50) not null default '',#书名
    bwriter varchar(30) not null default '',#书作者
    btype varchar(30)not null default '',#书的类型
    bcomny varchar(30) not null default '',#书的出版社
    bnum int default 0,#书的数量
    bstate int default 0, #书的状态:0还有库存,1,已借完
    bbnum int default 0#被借的次数,可用来统计书的排行榜
);
  • 添加books数据
insert into weblibrary.books (id, bname, bwriter, btype, bcomny, bnum, bstate, bbnum)
values  (1, '小王子', '埃克苏佩里', '童话', '光明出版社', 8, 0, 6),
        (2, '天路历程', '约翰班杨', '文学', '光明出版社', 10, 0, 13),
        (3, '活着', '余华', '文学', '光明出版社', 8, 0, 6),
        (4, '岛上书店', '加泽文', '文学', '光明出版社', 10, 0, 0),
        (5, '吞噬星空', '我吃西红柿', '小说', '阅文集团', 10, 0, 21),
        (6, '平凡的世界', '路遥', '文学', '光明出版社', 10, 0, 0),
        (7, '雨有时横着走', '郭怀宽', '诗歌', '光明出版社', 10, 0, 10),
        (8, '百年孤独', '加西亚马尔科', '小说', '光明出版社', 10, 0, 0),
        (9, '三体', '刘慈欣', '小说', '光明出版社', 1, 0, 54),
        (10, '斗罗大陆', '唐家三少', '小说', '阅文集团', 0, 0, 79);

4、创建用户借阅表borrhistory

create table borrhistory(
    id int primary key auto_increment,#编号
    uid varchar(11),#用户编号
    bid int not null ,#书的唯一编号
    bname varchar(30) not null default '',#书名
    bwriter varchar(30) not null default '',#作者
    btype varchar(30) not null default '',#类型
    btime datetime,#借阅时间
    rtime datetime,#归还时间
    bstate int default 0#状态:0在读,1归还
);

二、开始建javaWeb项目

0、导入jar包:在WEB-INF下的lib包中导入相应的jar包

在这里插入图片描述

  • 然后把他们添加到项目中
  • 打开此项目设置,在设置中添加jar包
    在这里插入图片描述

1、包的目录

在这里插入图片描述

2、在utils包中创建

a、创建db.properties

driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/weblibrary?serverTimeZone=Asia/ShangHai
#?????
username=root
#??
password=123456
#?????
initialSize=10
# ??????
maxActive=100
# ??????
maxWait=3000

b、创建JDBCDruid.java

public class JDBCDruid {
   
    private static DataSource ds=null;
    //初始化数据
    static {
   
        try {
   
            Properties p=new Properties();
            p.load(new InputStreamReader(JDBCDruid.class.getClassLoader().getResourceAsStream("com/liu/libraryOS/utils/db.properties")));
            ds= DruidDataSourceFactory.createDataSource(p);
        } catch (Exception e) {
   
            throw new RuntimeException(e);
        }
    }

    /**
     * 获取connection连接
     * @return
     */
    public static Connection getConn(){
   
        try {
   
            return ds.getConnection();
        } catch (SQLException e) {
   
            throw new RuntimeException(e);
        }
    }

    /**
     * 关闭方法
     * @param rs
     * @param st
     * @param conn
     */
    public static void getClose(ResultSet rs, Statement st,Connection conn){
   
        try {
   
            if (rs!=null){
   
                rs.close();
            }
            if(st!=null){
   
                st.close();
            }
            if(conn!=null){
   
                conn.close();
            }
        } catch (SQLException e) {
   
            throw new RuntimeException(e);
        }

    }
}

3、在pojo包中创建

a、创建Books.java类

public class Books implements Serializable {
   
    /**
     * 书的唯一编号
     */
    private Integer id;
    /**
     * 书的名字
     */
    private String bname;
    /**
     * 书的作者
     */
    private String bwriter;
    /**
     * 书的类型
     */
    private String btype;
    /**
     * 出版社
     */
    private String bcomny;
    /**
     * 在库的数量
     */
    private Integer bnum;
    /**
     * 书的状态:0有库存,1已借完
     */
    private Integer bstate;
    /**
     * 被借的次数:可用来统计排行榜
     */
    private Integer bbnum;

    public Books() {
   
    }

    public Integer getId() {
   
        return id;
    }

    public void setId(Integer id) {
   
        this.id = id;
    }

    public String getBname() {
   
        return bname;
    }

    public void setBname(String bname) {
   
        this.bname = bname;
    }

    public String getBwriter() {
   
        return bwriter;
    }

    public void setBwriter(String bwriter) {
   
        this.bwriter = bwriter;
    }

    public String getBtype() {
   
        return btype;
    }

    public void setBtype(String btype) {
   
        this.btype = btype;
    }

    public String getBcomny() {
   
        return bcomny;
    }

    public void setBcomny(String bcomny) {
   
        this.bcomny = bcomny;
    }

    public Integer getBnum() {
   
        return bnum;
    }

    public void setBnum(Integer bnum) {
   
        this.bnum = bnum;
    }

    public Integer getBstate() {
   
        return bstate;
    }

    public void setBstate(Integer bstate) {
   
        this.bstate = bstate;
    }

    public Integer getBbnum() {
   
        return bbnum;
    }

    public void setBbnum(Integer bbnum) {
   
        this.bbnum = bbnum;
    }
}

b、创建借阅历史类BorrHistory.java

public class BorrHistory implements Serializable {
   
    /**
     * 编号
     */
    private Integer id;
    /**
     * 用户账号
     */
    private String uid;
    /**
     * 书的唯一编号
     */
    private Integer bid;
    /**
     * 书名
     */
    private String bname;
    /**
     * 作者
     */
    private String bwriter;
    private String btype;
    /**
     * 借阅时间
     */
    private String btime;
    /**
     * 归还时间
     */
    private String rtime;
    /**
     * 状态:0:在读,1:已还
     */
    private String bstate;

    public BorrHistory() {
   
    }

    public String getUid() {
   
        return uid;
    }

    public void setUid(String uid) {
   
        this.uid = uid;
    }

    public Integer getId() {
   
        return id;
    }

    public void setId(Integer id) {
   
        this.id = id;
    }

    public Integer getBid() {
   
        return bid;
    }

    public void setBid(Integer bid) {
   
        this.bid = bid;
    }

    public String getBname() {
   
        return bname;
    }

    public void setBname(String bname) {
   
        this.bname = bname;
    }

    public String getBwriter() {
   
        return bwriter;
    }

    public void setBwriter(String bwriter) {
   
        this.bwriter = bwriter;
    }

    public String getBtype() {
   
        return btype;
    }

    public void setBtype(String btype) {
   
        this.btype = btype;
    }

    public String getBtime() {
   
        return btime;
    }

    public void setBtime(String btime) {
   
        this.btime = btime;
    }

    public String getRtime() {
   
        return rtime;
    }

    public void setRtime(String rtime) {
   
        this.rtime = rtime;
    }

    public String getBstate() {
   
        return bstate;
    }

    public void setBstate(String bstate) {
   
        this.bstate = bstate;
    }
}

c、创建用户类LbUser

public class LbUser implements Serializable {
   
    /**
     * 用户编号:自增长
     */
    private Integer id;
    /**
     * 账号:手机号注册
     */
    private String uid;
    /**
     * 昵称
     */
    private String uname;
    /**
     * 年龄
     */
    private int uage;
    /**
     * 密保问题
     */
    private String uquestion;
    /**
     * 密保答案
     */
    private String uanwser;
    /**
     * 注册时间
     */
    private String udate;


    public LbUser() {
   
    }

    public Integer getId() {
   
        return id;
    }

    public void setId(Integer id) {
   
        this.id = id;
    }

    public String getUid() {
   
        return uid;
    }

    public void setUid(String uid) {
   
        this.uid = uid;
    }

    public String getUname() {
   
        return uname;
    }

    public void setUname(String uname) {
   
        this.uname = uname;
    }

    public int getUage() {
   
        return uage;
    }

    public void setUage(int uage) {
   
        this.uage = uage;
    }

    public String getUquestion() {
   
        return uquestion;
    }

    public void setUquestion(String uquestion) {
   
        this.uquestion = uquestion;
    }

    public String getUanwser() {
   
        return uanwser;
    }

    public void setUanwser(String uanwser) {
   
        this.uanwser = uanwser;
    }

    public String getUdate() {
   
        return udate;
    }

    public void setUdate(String udate) {
   
        this.udate = udate;
    }
}

4、在dao包中创建

a、创建父类BasicDao.java

public class BasicDao<T> {
   
    private QueryRunner qr = new QueryRunner();
    private Connection conn = null;

    /**
     * 根据sql获取所有符合的数据
     *
     * @param sql
     * @param clazz
     * @param obj
     * @return
     */
    public List<T> getAllData(String sql, Class<T> clazz, Object... obj) {
   
        try {
   
            conn = JDBCDruid.getConn();
            return qr.query(conn, sql, new BeanListHandler<>(clazz), obj);
        } catch (SQLException e) {
   
            throw new RuntimeException(e);
        } finally {
   
            JDBCDruid.getClose(null, null, conn);
        }
    }

    /**
     * 获取单个数据
     *
     * @param sql
     * @param clazz
     * @param obj
     * @return
     */
    public T getOneData(String sql, Class<T> clazz, Object... obj) {
   
        try {
   
            conn = JDBCDruid.getConn();
            return qr.query(conn, sql, new BeanHandler<>(clazz), obj);
        } catch (SQLException e) {
   
            throw new RuntimeException(e);
        } finally {
   
            JDBCDruid.getClose(null, null, conn);
        }
    }

    /**
     * 单个dml操作
     *
     * @param sql
     * @param obj
     * @return
     */
    public boolean update(String sql, Object... obj) {
   
        int num = 0;
        try {
   
            conn = JDBCDruid.getConn();
            //开启事务
            conn.setAutoCommit(false);
            num = qr.update(conn, sql, obj);
            //没发生异常则提交
            conn.commit();
        } catch (SQLException e) {
   
            //发生异常回滚
            try {
   
                conn.rollback();
            } catch (SQLException ex) {
   
                ex.printStackTrace();
            }
            throw new RuntimeException(e);
        } finally {
   
            JDBCDruid.getClose(null, null, conn);
        }
        return num>0;
    }

    //---------以下是同时进行多条dml操作时使用-----------
    /**
     * 1、开启事务,适用于多级操作(同时修改借阅记录,书的状态等)
     *
     * @return connection
     */
    public Connection startTransaction() {
   
        try {
   
            conn = JDBCDruid.getConn();
            conn.setAutoCommit(false);
            return conn;
        } catch (SQLException e) {
   
            throw new RuntimeException(e);
        }
    }

    /**
     * 3、数据回滚
     *
     * @param conn
     */
    public void rollBack(Connection conn) {
   
        try {
   
            conn.rollback();
        } catch (SQLException e) {
   
            e.printStackTrace();
        }
    }
}

b、创建BooksDao.java

public class BooksDao extends BasicDao<Books>{
   
}

c、创建BorrHistory.java

public class BorrHistoryDao extends BasicDao<BorrHistory>{
   
}

d、创建LbUser.java

public class LbUserDao extends BasicDao<LbUser>{
   
}

5、在service包下创建

a、创建BookService.java

public class BooksService {
   
    private BooksDao bd = new BooksDao();
    private String sql = "";

    /**
     * 获取所有图书信息
     *
     * @return
     */
    public List<Books> getAllBook() {
   
        sql = "select*from books where bnum>0";
        return bd.getAllData(sql, Books.class);
    }

    /**
     * 获取排行前五的书籍,根据被借的次数
     *
     * @return
     */
    public List<Books> paiHangBook() {
   
        sql = "select*from books where bbnum>0 order by bbnum desc limit 0,5";
        return bd.getAllData(sql, Books.class);
    }

    /**
     * 获取已被借完的书籍
     *
     * @return
     */
    public List<Books> alreadyOverBook() {
   
        sql = "select*from books where bnum<1 ";
        return bd.getAllData(sql, Books.class);
    }

    /**
     * 根据id得到数据
     *
     * @param bid
     * @return
     */
    public Books queryById(String bid) {
   
        sql = "select*from books where id=?";
        return bd.getOneData(sql, Books.class, bid);
    }


}

b、创建BorrHistoryService

public class BorrHistoryService {
   
    private BorrHistoryDao bd = new BorrHistoryDao();
    private BooksService bs = new BooksService();
    private String sql = "";

    /**
     * 获取所有符合条件的记录
     *
     * @return
     */
    public List<BorrHistory> getAllData(String uid) {
   
        sql = "select * from borrhistory where uid=?";
        return bd.getAllData(sql, BorrHistory.class, uid);
    }

    /**
     * 根据账号查询编号为id的书籍且没归还记录
     *
     * @return
     */
    public BorrHistory queryByBidCo(String count, String bid) {
   
        sql = "select*from borrhistory where uid=? and bid=? and bstate=0";
        return bd.getOneData(sql, BorrHistory.class, count, bid);
    }

    /**
     * 添加借阅记录
     *
     * @param count
     * @param bid
     * @return
     */
    public boolean borrowBook(String count, String bid) {
   
        Connection conn = bd.startTransaction();
        QueryRunner qr = new QueryRunner();
        int num = 0;
        try {
   
            //修改书籍数量语句
            sql = "update books set bnum=(bnum-1) where id=?";
            num = qr
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值