博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Servlet+JSP+JDBC设计实现图书系统——管理功能实现
阅读量:5265 次
发布时间:2019-06-14

本文共 12179 字,大约阅读时间需要 40 分钟。

写在前面,之前由于种种原因博客好久没有更新。最近打算重拾JavaWeb,所以从头开始,先用servlet+jdbc+bootstrap最基础的代码实现一个图书系统。考虑有管理员端+用户端,项目完成后会上传至github,后期会升级ssh/ssm等,毕竟是温故学习,一点一点来,项目会一直更新补充!

  github地址——

  2018.04.16更新,管理端进一步完善,页面优化调整

  2018.03.29更新,管理端实现了过滤功能(管理端大部分功能已经完善,只剩下JS/JQ的还没有,等用户端写完了再说)

  2018.03.26更新,管理端添加图书编辑页面(book.jsp),并采用了jquery的ajax技术

  2018.03.22更新,管理端采用EL&JSTL进行了页面重构,并且添加分页功能

1.项目结构

 

│ .classpath

│ .gitignore
│ .project
│ LICENSE
│ README.md
├─.settings
│ .jsdtscope
│ org.eclipse.core.resources.prefs
│ org.eclipse.jdt.core.prefs
│ org.eclipse.wst.common.component
│ org.eclipse.wst.common.project.facet.core.xml
│ org.eclipse.wst.css.core.prefs
│ org.eclipse.wst.html.core.prefs
│ org.eclipse.wst.jsdt.ui.superType.container
│ org.eclipse.wst.jsdt.ui.superType.name
├─build
│ └─classes
│ ├─biz
│ │ │ AdminBiz.class
│ │ │ bookBiz.class
│ │ │
│ │ └─impl
│ │ AdminBizImpl.class
│ │ bookBizImpl.class
│ │
│ ├─dao
│ │ │ AdminDao.class
│ │ │ bookDao.class
│ │ │
│ │ └─impl
│ │ AdminDaoImpl.class
│ │ bookDaoImpl.class
│ │
│ ├─pojo
│ │ admin.class
│ │ book.class
│ │ PageBean.class
│ │
│ ├─servlet
│ │ AdminServlet.class
│ │ BookServlet.class
│ │ LogFilter.class
│ │ LoginServlet.class
│ │
│ └─utils
│ myDB.class
├─src
│ ├─biz
│ │ │ AdminBiz.java
│ │ │ bookBiz.java
│ │ │
│ │ └─impl
│ │ AdminBizImpl.java
│ │ bookBizImpl.java
│ │
│ ├─dao
│ │ │ AdminDao.java
│ │ │ bookDao.java
│ │ │
│ │ └─impl
│ │ AdminDaoImpl.java
│ │ bookDaoImpl.java
│ │
│ ├─pojo
│ │ admin.java
│ │ book.java
│ │ PageBean.java
│ │
│ ├─servlet
│ │ AdminServlet.java
│ │ BookServlet.java
│ │ LogFilter.java
│ │ LoginServlet.java
│ │
│ └─utils
│ myDB.java
└─WebContent
├─css
│ bootstrap-theme.css
│ bootstrap-theme.css.map
│ bootstrap-theme.min.css
│ bootstrap-theme.min.css.map
│ bootstrap.css
│ bootstrap.css.map
│ bootstrap.min.css
│ bootstrap.min.css.map
├─fonts
│ glyphicons-halflings-regular.eot
│ glyphicons-halflings-regular.svg
│ glyphicons-halflings-regular.ttf
│ glyphicons-halflings-regular.woff
│ glyphicons-halflings-regular.woff2
├─img
│ │ duzhe.jfif
│ │ qingnian.jfif
│ │ s28350186.jpg
│ │ s29643861.jpg
│ │ s29672551.jpg
│ │ s29686001.jpg
│ │
│ └─readme
│ admin.PNG
├─js
│ bootstrap.js
│ bootstrap.min.js
│ jquery-3.3.1.js
│ npm.js
├─META-INF
│ MANIFEST.MF
├─web
│ admin.jsp
│ AdminLogin.jsp
│ book.jsp
└─WEB-INF
│ web.xml
└─lib
mysql-connector-java-5.1.46-bin.jar
taglibs-standard-impl-1.2.5.jar
taglibs-standard-spec-1.2.5.jar

 

 

  项目采取最基础的MVC分层架构,全部采用servlet+jdbc方式实现。jsp作为v层,servlet作为controller层与业务层代码关联,整个代码做到最大限度的低耦合。前端主要是jQuery和Bootstrap,毕竟我前端了解的少,仅仅会用几个API,所以整个项目前端不做过多赘述。

2.项目分层概述

  ①dao层主要是处理与数据库交互的逻辑

  AdminDao.java

1 public interface AdminDao {2     public boolean adminLogin(String admin,String password);3 }

  AdminDaoImpl.java

1 public class AdminDaoImpl implements AdminDao{ 2     public boolean adminLogin(String admin, String password) { 3         Connection conn=null; 4         PreparedStatement st=null; 5         ResultSet rs=null; 6         Boolean result=false; 7         try { 8             //获取连接 9             conn=myDB.getConnection();10             //编写SQL语句11             String adminLoginSql="select * from aduser where adname='"+admin+"' and password='"+password+"'";12             //创建语句执行者13             st=conn.prepareStatement(adminLoginSql);14             //获取结果15             rs=st.executeQuery();16             if(rs.next())17                 result=true;18             else19                 result=false;20         } catch (Exception e) {21             e.printStackTrace();22         }23         finally {24             myDB.closeResource(conn, st, rs);25         }26         return result;27     }28 }

 

  ②biz层主要是业务逻辑的实现

  AdminBiz类似Dao层,所以就不贴代码了

  AdminBizImpl.java

1 public class AdminBizImpl implements AdminBiz{ 2     private AdminDao adminDao; 3     public boolean adminLogin(String admin, String password) { 4         //实例化接口 5         adminDao=new AdminDaoImpl(); 6         pojo.admin admin2=new pojo.admin(); 7         admin2.setAdmin(admin); 8         admin2.setPassword(password); 9         Boolean result=adminDao.adminLogin(admin2.getAdmin(), admin2.getPassword());10         return result;11     }12 }

 

  ③utils是工具类,主要有数据库连接的类,这样每次操作数据库不用重写代码

  

  ④pojo层是数据库表的映射实体类

  PageBean.java类主要用于图书分页实现

  

1 public class PageBean
{ 2 private int currentPage=1;//当前页,默认显示第一页 3 private int pageCount=5;//每页显示的行数 4 private int totalCount;//总记录数 5 private int totalPage;//总页数=总记录数/每页显示的行数+1 6 private List
pageData; 7 8 //获取总页数 9 public int getTotalPage() {10 if(totalCount%pageCount==0)11 totalPage=totalCount/pageCount;//被整除情况12 else {13 totalPage=totalCount/pageCount+1;14 }15 return totalPage;16 }17 public void setTotalPage(int totalPage) {18 this.totalPage=totalPage;19 }20 public int getCurrentPage() {21 return currentPage;22 }23 public void setCurrentPage(int currentPage) {24 this.currentPage = currentPage;25 }26 public int getPageCount() {27 return pageCount;28 }29 public void setPageCount(int pageCount) {30 this.pageCount = pageCount;31 }32 public int getTotalCount() {33 return totalCount;34 }35 public void setTotalCount(int totalCount) {36 this.totalCount = totalCount;37 }38 public List
getPageData() {39 return pageData;40 }41 public void setPageData(List
pageData) {42 this.pageData = pageData;43 }44 }
View Code

 

 

 

  ⑤servlet控制层

  AdminServlet.java类(用于图书管理端分页等功能的实现)

  

1 public class AdminServlet extends HttpServlet{ 2     @Override 3     protected void service(HttpServletRequest req, HttpServletResponse rep) throws ServletException, IOException { 4         int currentPage;//获得当前页 5         String current=(String) req.getParameter("page"); 6         if(current==null) 7             currentPage=1; 8         else 9             currentPage=Integer.parseInt(current);10         //实例化业务层11         bookBiz bookbiz=new bookBizImpl();12         PageBean pb=new PageBean();13         pb.setTotalCount(bookbiz.getTotalCount());14         if(currentPage>0)15             pb.setCurrentPage(currentPage);16         //分页查询17         ArrayList
books=bookbiz.searchAllBook(pb);18 //获得总页数19 int pageCount=pb.getTotalPage();20 //将book集合和页面数跳转至admin.jsp页面21 req.setAttribute("bookslist", books);22 req.setAttribute("pagesize", pageCount);23 req.getRequestDispatcher("web/admin.jsp").forward(req, rep);24 }25 }
View Code

 

  BookServlet.java类(用于图书编辑修改等的实现)

  

1 public class BookServlet extends HttpServlet{ 2     @Override 3     protected void service(HttpServletRequest req, HttpServletResponse rep) throws ServletException, IOException { 4         int bookid=Integer.parseInt(req.getParameter("bookid")); 5         bookBiz bookbiz=new bookBizImpl(); 6         book bk=bookbiz.getBookById(bookid); 7         if(req.getParameter("method")!=null&&req.getParameter("method").equals("update")) { 8             int borrow=Integer.parseInt(req.getParameter("borrow")); 9             String intro=req.getParameter("intro");10             if(bookbiz.editBook(bookid, intro, borrow)) {11                 //req.setAttribute("bk", bk);12                 //req.getRequestDispatcher("bookServlet?bookid="+bookid).forward(req, rep);13                 PrintWriter out=rep.getWriter();14                 out.println("success");15             }16         }17         else {18             //将获取到的book数据发送并跳转至book.jsp页面19             req.setAttribute("bk", bk);20             req.getRequestDispatcher("web/book.jsp?bookid="+bookid).forward(req, rep);21         }22     }23 }
View Code

  LogFilter.java类(用于登录过滤实现)

 

1 public class LogFilter implements Filter{ 2     private FilterConfig config; 3     @Override 4     public void destroy() { 5         // TODO Auto-generated method stub 6          7     } 8     /* 9      * Filter的核心处理10      * */11     @Override12     public void doFilter(ServletRequest req, ServletResponse rep, FilterChain filc)13             throws IOException, ServletException {14         HttpServletRequest request=(HttpServletRequest) req;15         HttpServletResponse response=(HttpServletResponse) rep;16         HttpSession session=request.getSession();17         //如果session中有logined,则证明过滤成功18         if(session.getAttribute("logined")!=null) {19             filc.doFilter(req, rep);20         }21         else22             response.sendRedirect("web/AdminLogin.jsp");23     }24 25     @Override26     public void init(FilterConfig config) throws ServletException {27         this.config=config;28     }29 30 }
View Code

 

 

3.数据库设计

  aduser表

  

4.前端JSP设计

  ①AdminLogin.jsp页面

  

 

 

1 <%@ page language="java" contentType="text/html; charset=utf-8" 2     pageEncoding="utf-8"%> 3  4  5  6 
7 管理员登录页面 8
9
10 11 14 15 16
17
18

图书管理系统

19
20 21
22
23
24
26
27
28
29
30
31
33
34
35
36
37
38
39
40 41
42
43
44 45
View Code

 

  ②admin.jsp页面(管理端)

  

 

1 <%@page import="pojo.PageBean"%>  2 <%@page import="pojo.book"%>  3 <%@page import="java.util.ArrayList"%>  4 <%@page import="biz.impl.bookBizImpl"%>  5 <%@page import="biz.bookBiz"%>  6 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>  7 <%@ page language="java" contentType="text/html; charset=utf-8"  8     pageEncoding="utf-8"%>  9  10  11  12 
13 管理页面 14
15
16
17
18 19 20 21 22
23
24
25

26 图书系统管理员端 27

28
29
30
31
32
33
34
35
50
36
37
38
39
40
41
42
43
44
45
46
47
48
49
51
56
59
70
73
76
79
84
85 86
87
书籍封面 书籍名称 是否借出 书籍作者 分类目录 简介 操作
52
53
54
55
57

${book['bk_name']}

58
60

61 62

63
64
65
66
67
68

69
71

${book['bk_name']}

72
74

${bk['bk_category']}

75
77

${book['bk_intro']}

78
80
81
82
83
88
95
96
97
100
101
102
103
104
105 106
View Code

 

   ③book.jsp(图书编辑页面)

1 <%@ page language="java" contentType="text/html; charset=utf8" 2     pageEncoding="utf8"%> 3     <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 4  5  6  7 
8 编辑图书 9
10
11
12 13 14 32 33 34
35

36 管理员端37

38
39
40
41
42
43
44
45
46
47
53
54
55
56
57
58
59
60
63
64
65
66
67
68
69
书籍名称 ${bk['bk_name']}
是否借出 48 52
书籍作者 ${bk['bk_author']}
书籍分类 61 ${bk['bk_category']}62
书籍介绍
70
71
72
73 74
View Code

 

5.web.xml等配置文件

 

转载于:https://www.cnblogs.com/vincentme/p/8602333.html

你可能感兴趣的文章
设计模式课程 设计模式精讲 2-2 UML类图讲解
查看>>
linux后台运行和关闭SSH运行,查看后台任务
查看>>
C# Dynamic通用反序列化Json类型并遍历属性比较
查看>>
exit和return的区别
查看>>
Python(软件目录结构规范)
查看>>
Dreamweaver cc新版本css单行显示
查看>>
Java基础教程——网络基础知识
查看>>
Kruskal基础最小生成树
查看>>
【hdu 1429】胜利大逃亡(续)
查看>>
javascript之Style物
查看>>
Factory Design Pattern
查看>>
P1192-台阶问题
查看>>
Java大数——a^b + b^a
查看>>
简单的数据库操作
查看>>
帧的最小长度 CSMA/CD
查看>>
树状数组及其他特别简单的扩展
查看>>
普通求素数和线性筛素数
查看>>
PHP截取中英文混合字符
查看>>
【洛谷P1816 忠诚】线段树
查看>>
电子眼抓拍大解密
查看>>