Java Web实现简易的图书管理系统

Java Web实现简易的图书管理系统

这是一个使用Java Web相关的知识做出来的网页图书管理系统,使用的数据库为mysql。

程序中实现了登录功能和对图书表、图书类别表的增删查改功能。

因为我对Java Web相关的知识的了解还非常有限,所以这个程序的功能和实现上都还有着很多需要完善的地方。

运行效果:

Java Web实现简易的图书管理系统_第1张图片
Java Web实现简易的图书管理系统_第2张图片


使用到的知识:
java、servlet、jsp、jdbc
html、css、js、jquery、bootstrap

运行环境:
Windows JDK9 IDEA2020 MySQL5.7.29

问题:
编写程序期间我遇到了很多问题,其中有两个大问题困扰了我很久,在此我将其记录下来:
第一个问题是,(idea)java web项目无法正常使用 项目/lib路径下的项目依赖,需要将其添加到web/WEB-INF/lib路径下才可以。因为这个问题我耽误了很久的时间,因为这个问题在搜索引擎上搜不到答案,而且它也不是一个逻辑上的问题,让别人看别人也看不出来。最终我还是在csdn上胡乱搜索的时候,碰巧看到了这个问题的答案。在此我非常感谢提供了该问题答案的那一位博主。

第二个问题是,在jsp页面上,我始终不知道怎么用jstl标签和el表达式获取从servlet传来的信息,这个问题是我对相关知识不熟悉导致的。最终我选择了使用<%%>最原始的方式实现了相关功能。

其他:
以后在开始动手写一个项目之前,尤其是以后的web项目这样的前端和后端都有的项目时,一定要保证自己已经熟悉了所学的知识,最好能跟着别人先做一个类似的项目,不然会面临自己没有见过的困难,而且开发效率也会很低。

对jdbc封装的类我是从另一位博主的文章上找的 链接,非常感谢这位博主。

代码:
下面放出部分代码,如果您想要查看该程序的完整代码,请前往我的个人网站http://150.158.165.239/#/resource以免费获取完整代码资源

LoginServlet.java

package main.java.controler;

import main.java.entity.User;
import main.java.service.UserService;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@WebServlet("/public/login")
public class LoginServlet extends HttpServlet {
     

    // 处理登录jsp提交的表单
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     
        response.getWriter().println("登录servlet post");

        // 获取提交来的数据
        String userName = request.getParameter("username");
        String password = request.getParameter("password");

        UserService service = new UserService();

        User user = new User();
        user.setUserName(userName);
        user.setUserPassword(password);

        // 判断用户是否存在
        if(service.isUserInfo(user)) {
     
            // 设置该用户的session
            HttpSession session = request.getSession();
            session.setAttribute("username", userName);
            session.setMaxInactiveInterval(60 * 60);
            // 存在登录成功 跳转到首页
//            request.getRequestDispatcher("/").forward(request, response);
            response.sendRedirect(request.getContextPath() + "/");  //重定向
        }
        else {
     
            // 不存在则重新跳转到登录界面
            request.getRequestDispatcher("/webapps/Login.jsp").forward(request, response);
        }
    }

    // 跳转到登录jsp界面
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     
        System.out.println("登录界面");

        //请求转发的路径的默认路径为web/,且在路径最前边要加上/
        request.getRequestDispatcher("/webapps/Login.jsp").forward(request, response);
    }
}

BookDaoImpl.java

package main.java.dao;

import main.java.entity.Book;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class BookDaoImpl implements BookDao {
     

    @Override
    public void add(Book book) {
     
        String sql = "insert into `book` (book_name,book_author,book_price,book_desc,book_type_id) values(?,?,?,?,?)";
        MyJDBC.insert(sql, true, book.getBookName(), book.getBookAuthor(), book.getBookPrice(), book.getBookDesc(), book.getBookTypeId());
    }

    @Override
    public void update(Book book) {
     
        String sql = "update `book` set `book_name`=?, book_author=?, book_price=?, book_desc=?, book_type_id=? WHERE book_id=?";
        MyJDBC.execute(sql,book.getBookName(), book.getBookAuthor(), book.getBookPrice(), book.getBookDesc(), book.getBookTypeId(), book.getBookId());
    }

    @Override
    public List<Book> queryAll() {
     
        return whereQuery("select * from `book`");
    }

    @Override
    public void delete(String id) {
     
        String SQL = "delete from `book` where book_id=?";
        MyJDBC.execute(SQL, id);
    }

    /**
     * 根据sql参数查找全部结果
     */
    @Override
    public List<Book> whereQuery(String sql) {
     
        ResultSet result = MyJDBC.query(sql);

        List<Book> bookList = new ArrayList<>();
        try {
     
            while (result.next()) {
     
                Book book = new Book();
                book.setBookId(result.getInt(1) + "");
                book.setBookName(result.getString(2));
                book.setBookAuthor(result.getString(3));
                book.setBookPrice(result.getString(4));
                book.setBookDesc(result.getString(5));
                book.setBookTypeId(result.getInt(6) + "");

                bookList.add(book);
            }
        }
        catch (Exception e) {
     
            e.printStackTrace();
        }

        return bookList;
    }
}

index.jsp

<%--
  Created by IntelliJ IDEA.
  User: ASUS
  Date: 2020/9/18
  Time: 19:59
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.io.*,java.util.*,java.sql.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
<%@ page import="main.java.entity.BookType" %>
<%@ page import="main.java.service.BookTypeService" %>
<%@ page import="main.java.service.BookService" %>
<%@ page import="main.java.entity.Book" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<!-- 登录界面 -->

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <title>首页</title>

  <link rel="stylesheet" type="text/css" href="/webapps/css/bootstrap-theme.css"/>
  <link rel="stylesheet" type="text/css" href="/webapps/css/bootstrap.css"/>
  <link rel="stylesheet" type="text/css" href="/webapps/css/index.css"/>
</head>


<body>
  <sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"
   url="jdbc:mysql://localhost:3306/books_management?useUnicode=true&characterEncoding=utf-8"
   user="root"  password="123456"/>

  <div class="topbar">
    <div class="title col-lg-2 col-lg-offset-5">图书管理系统</div>
  </div>

  <div class="content">
    <div class="sidebar">
      <ul>
        <li style="background-color: #4c7bd2; box-shadow:0px 0px 6px black inset;"><span>图书管理</span></li>
        <li><span>图书类别管理</span></li>
      </ul>
    </div>

    <ul class="win-ul">
      <li style="display: block;" id="win-1">
        <div class="top" style="width: 860px;">
          <div class="top-content">
            <form action="" method="get">
              <input type="text" class="form-control" name="bookName" placeholder="图书名称"
                     style="width:260px;"/>
              <input type="text" class="form-control" name="bookAuthor" placeholder="图书作者"
                     style="width:260px; margin-left: 30px;"/>
              <sql:query dataSource="${snapshot}" var="result_bookTypeId">
                SELECT * from books_type;
              </sql:query>

              <select class="form-control" style="width: 100px; margin-left: 30px;" name="bookTypeId">
                <option>全部</option>
                <c:forEach var="row" items="${result_bookTypeId.rows}">
                  <option>${
     row.book_type_id}</option>
                </c:forEach>
              </select>
              <button type="submit" class="btn btn-primary query-but" style="margin-left: 60px;">&nbsp;&nbsp;&nbsp;查询&nbsp;&nbsp;&nbsp;</button>
            </form>
          </div>
        </div>

        <div class="win-table table-responsive">
          <!-- 添加界面 -->
          <div class="table-add-back"> <!-- 背景 -->
            <div class="table-add-content"> <!-- 内容 -->
              <div class="close-but btn btn-default">X</div>

              <label class="title">图书添加</label>

              <form class="input-box" action="/bookAddServlet" method="get">
                <input type="text" name="bookNameAdd" class="table-add-text form-control text-flag" placeholder="图书名称"/>
                <input type="text" name="bookAuthorAdd" class="table-add-text form-control text-flag" placeholder="图书作者"/>
                <input type="text" name="bookPriceNameAdd" class="table-add-text form-control text-flag" placeholder="图书价格"/>

                <sql:query dataSource="${snapshot}" var="result_bookTypeId">
                  SELECT * from books_type;
                </sql:query>

                <select class="form-control" style="width: 100px; margin-left: 22px;" name="bookTypeIdAdd">
                  <c:forEach var="row" items="${result_bookTypeId.rows}">
                    <option>${
     row.book_type_id}</option>
                  </c:forEach>
                </select>
                <textarea class="table-add-text form-control text-flag" rows="6" name="bookDesc" placeholder="图书描述"></textarea>
                <button type="submit" class="table-add-but btn btn-primary">添加</button>
              </form>
            </div>
          </div>

          <input type="button" name="table_add" value="  添加  " class="btn btn-success add-button" style="font-weight: bold;"/>

          <table class="table table-striped table-bordered table-hover" style="width: inherit;">
            <thead>
            <tr>
              <td>图书id</td>
              <td>图书名称</td>
              <td>图书作者</td>
              <td>图书价格</td>
              <td>图书描述</td>
              <td>图书类别id</td>
              <td class="oper-cell-book">操作</td>
            </tr>
            </thead>

            <%-- 图书表格内容 --%>
            <sql:query dataSource="${snapshot}" var="result_book">
              SELECT * from `book`;
            </sql:query>

            <tbody class="table-tbody">

                <%
                  String bookName = request.getParameter("bookName");;
                  String bookAuthor = request.getParameter("bookAuthor");
                  String bookTypeId = request.getParameter("bookTypeId");

                  //要执行的sql语句前部分
                  StringBuilder sqlBuilder = new StringBuilder("SELECT * FROM book");

                  boolean flag_WHERE = false; //是否添加WHERE标记

                  //图书名文本区不为空
                  if (!(bookName == null)) {
     
                    sqlBuilder.append(" WHERE " + "book_name LIKE '%"+ bookName +"%'");
                    flag_WHERE = true;
                  }

                  //图书作者文本区不为空
                  if (!(bookAuthor == null)) {
     
                    if(!flag_WHERE) {
     
                      sqlBuilder.append(" WHERE ");
                      flag_WHERE = true;
                    }
                    else
                      sqlBuilder.append(" AND ");

                    sqlBuilder.append("book_author LIKE '%"+ bookAuthor +"%'");
                  }

                  if(bookTypeId != null) {
     
                    //不为全部时
                    if (!bookTypeId.equals("全部")) {
     
                      if(!flag_WHERE) {
     
                        sqlBuilder.append(" WHERE ");
                        flag_WHERE = true;
                      }
                      else
                        sqlBuilder.append(" AND ");

                      sqlBuilder.append("book_type_id = '"+ bookTypeId +"'");
                    }
                  }

                  String bookSQL = sqlBuilder.toString();     //得到需要执行的sql语句

                  System.out.println(bookSQL);

                  BookService bookService = new BookService();
                  List<Book> bookList = bookService.whereQueryBook(bookSQL);

                  for(Book book : bookList) {
     
                    out.print("");
                    out.print("" + book.getBookId() + "");
                    out.print("" + book.getBookName() + "");
                    out.print("" + book.getBookAuthor() + "");
                    out.print("" + book.getBookPrice() + "");
                    out.print("" + book.getBookDesc() + "");
                    out.print("" + book.getBookTypeId() + "");
                    out.print("" +
                            " + request.getContextPath() + "/webapps/bookUpdate.jsp?id=" + book.getBookId() + "\">修改"+
                            " + request.getContextPath() + "/BookDeleteServlet?id=" + book.getBookId() + "\">删除"+
                            "");
                    out.print("");
                  }
                %>
            </tbody>
          </table>

<%--          暂时不做分页--%>
<%--          <div class="bottom-but">--%>
<%--            <ul class="bottom-but-ul">--%>
<%--              <li>1</li>--%>
<%--            </ul>--%>
<%--          </div>--%>
        </div>
      </li>

      <!-- 图书类别管理界面 -->
      <li id="win-2">
        <div class="top">
          <div class="top-content">
            <form action="" method="get">
              <input type="text" class="form-control query-text" name="bookTypeName" placeholder="图书类别名称"
                     style="width:400px;"/>
              <button type="submit" class="btn btn-primary query-but" style="margin-left: 50px;">&nbsp;&nbsp;&nbsp;查询&nbsp;&nbsp;&nbsp;</button>
            </form>
          </div>
        </div>

        <div class="win-table table-responsive">

          <!-- 添加界面 -->
          <div class="table-add-back"> <!-- 背景 -->
            <div class="table-add-content"> <!-- 内容 -->
              <div class="close-but btn btn-default">X</div>

              <label class="title">图书类别添加</label>

              <form class="input-box" action="/BookTypeAddServlet" method="get">
                <input type="text" name="bookTypeNameAdd" class="table-add-text form-control text-flag" placeholder="图书类别名称"/>
                <textarea class="table-add-text form-control text-flag" rows="6" name="bookTypeDesc" placeholder="图书类别描述"></textarea>
                <button type="submit" class="table-add-but btn btn-primary">添加</button>
              </form>
            </div>
          </div>

          <input type="button" name="table_add" value="  添加  " class="btn btn-success add-button" style="font-weight: bold;"/>

          <table class="table table-striped table-bordered table-hover" style="width: inherit;">
            <thead>
            <tr>
              <td>图书类别id</td>
              <td>图书类别名称</td>
              <td>图书类别描述</td>
              <td class="oper-cell">操作</td>
            </tr>
            </thead>

            <tbody class="table-tbody">

            <%
              String bookTypeName = request.getParameter("bookTypeName");

              String sql1 = "SELECT * FROM books_type WHERE book_type_name LIKE \"%"+ bookTypeName +"%\"";

              if(bookTypeName == null || bookTypeName.equals("")) {
     
                sql1 = null;
              }

              String sql = sql1;
              System.out.println(sql + "sql");
              if(sql == null) {
     
                sql = "select * from `books_type`";
              }

              System.out.println(sql + "sql");

              BookTypeService service = new BookTypeService();
              List<BookType> bookTypeList = service.whereQueryBookType(sql);

              for(BookType type : bookTypeList) {
     
                out.print("");
                out.print("" + type.getTypeId() + "");
                out.print("" + type.getTypeName() + "");
                out.print("" + type.getTypeDesc() + "");
                out.print("" +
                        " + request.getContextPath() + "/webapps/bookTypeUpdate.jsp?id=" + type.getTypeId() + "\">修改"+
                        " + request.getContextPath() + "/BookTypeDeleteServlet?id=" + type.getTypeId() + "\">删除"+
                        "");
                out.print("");
              }
            %>
            </tbody>
          </table>

<%--          暂时不做分页--%>
<%--          <div class="bottom-but">--%>
<%--            <ul class="bottom-but-ul">--%>
<%--              <li>1</li>--%>
<%--            </ul>--%>
<%--          </div>--%>
        </div>
      </li>
    </ul>
  </div>

  <script type="text/javascript" src="/webapps/javascript/jquery.js"></script>
  <script type="text/javascript" src="/webapps/javascript/index.js"></script>
</body>
</html>

如果您有什么问题,也欢迎提出,感谢支持。

你可能感兴趣的:(Java,java,web,jsp)