目录

  • 1 设计模式
  • 2 环境配置
  • 3 技术栈
  • 4 项目的目录结构
  • 5 系统设计
  • 6 数据库设计
  • 参考文档

1 设计模式

1.1 MVC三层架构说明

  • 在MVC的组成之中会包含以下几点:
    • 模型层:完成可重用类设计,例如,实体类的设计;
    • 视图层:JSP、HTML、CSS、JavaScript显示出不牵扯到过多的Java程序,最好的显示出是没有任何的Java程序;
    • 控制层:Servlet(接收数据、验证数据、调用业务、跳转页面) 控制层不负责数据的显示出来,只是负责将数据处理后交给JSP显示。
  • MVC三层架构的具体说明
    • 模型层(Model):
      模型表示企业数据和业务规则。在MVC的三个部件中,模型拥有最多的处理任务。例如它可能用像EJBs和ColdFusion Components这样的构件对象来处理数据库,被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。
      模型层更多是Java编写的,它接受视图层请求的数据,然后进行相应的业务处理,并返回最终的处理结果。模型层担负的责任最为核心,并使得应用程序得到重用和可扩展。
    • 视图层(View):
      视图是用户看到并与之交互的界面。对老式的Web应用程序来说,视图就是由HTML元素组成的界面,在新式的Web应用程序中,HTML依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,它们包括Adobe Flash和像XHTML,XML/XSL,WML等一些标识语言和Web services.
      简单地说,用户交互界面,在Web应用中,可以是JSP、HTML、CSS、JavaScrip程序。使用MVC模式设计的视图层仅仅进行数据的采集和处理,以及用户的请求,而业务流程的控制和处理则是交给控制层(Controller)和模型层(Model)。
    • 控制层(Controller):
      控制器接受用户的输入并调用模型和视图去完成用户的需求,所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。
      从用户端接收请求,将模型和视图匹配在一起,共同完成用户地请求。它的作用就是告诉容器应该选择什么样的视图以及选择什么样的模型。例如,当一个用户点击一个链接时,控制层接受到请求之后,并不直接进行任何的数据操作,而是把用户的请求信息传递给相应的模型层,并告诉模型应该进行什么样的操作,最后根据操作结果选择符合要求的视图返回给请求用户。
      控制器在MVC设计模式中就是一个中间枢纽的作用,协调着视图和模型层的操作。

1.2 MVC视图分析

2 环境配置

  • Operating System:Windows 10
  • IDEA:2020.3.1
  • JDK:jdk-15
  • Mysql: 8.0.26
  • Tomcat:7.0.103
  • Maven:4.0.0

2.1 注入maven相关依赖(pom.xml)

<dependencies><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>${junit.version}</version><scope>test</scope></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-engine</artifactId><version>${junit.version}</version><scope>test</scope></dependency><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.4</version></dependency><dependency><groupId>c3p0</groupId><artifactId>c3p0</artifactId><version>0.9.1.2</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.26</version></dependency><dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>1.1.2</version></dependency><dependency><groupId>commons-dbutils</groupId><artifactId>commons-dbutils</artifactId><version>1.7</version></dependency><dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4</version></dependency><dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>1.1.1</version></dependency><dependency><groupId>net.sf.json-lib</groupId><artifactId>json-lib</artifactId><version>2.4</version><classifier>jdk15</classifier></dependency></dependencies>

2.2 C3P0连接池的配置

注入所需maven依赖

<dependency><groupId>c3p0</groupId><artifactId>c3p0</artifactId><version>0.9.1.2</version></dependency>

C3P0连接池的配置文件(c3p0-config.xml)

<c3p0-config><named-config name="testc3p0"><property name="user">root</property><property name="password">123456</property><property name="driverClass">com.mysql.jdbc.Driver</property><property name="jdbcUrl">jdbc:mysql://localhost:3306/library?useUnicode=true&characterEncoding=UTF-8</property><property name="acquireIncrement">5</property><property name="initialPoolSize">5</property><property name="minPoolSize">5</property><property name="maxPoolSize">10</property></named-config></c3p0-config>

基本原理

  • 建立数据库连接池对象(服务器启动)。
  • 按照事先指定的参数创建初始数量的数据库连接(即:初始化空闲连接数)。
  • 对于一个数据库访问请求,直接从连接池中得到一个连接。如果数据库连接池对象中没有空闲的连接,且连接数没有达到最大(即:最大活跃连接数),创建预设定数目的数据库连接。
  • 存取数据。
  • 访问结束,释放对应的数据库连接(将连接放入空闲队列中,如果实际空闲连接数大于连接池最大保留连接数则释放连接)。
  • 释放数据库连接池对象(服务器停止、维护期间,释放数据库连接池对象,并释放所有连接)。

3 技术栈

3.1 前端技术

主要技术:

  • layui框架
  • Jquery
  • Ajax
  • iframe内联框架

3.2 后端技术

主要技术

  • Servlet
  • Maven
  • Mysql
  • JavaMail

4 项目的目录结构

4.1 maven的设计

maven树的结构设计图

4.2项目的总体设计

目录结构设计

5 系统设计

5.1 系统功能设计说明

(1)登录:管理员和读者可以通过输入用户名和密码或者邮箱验证码登录;

(2)注册:普通用户可以通过输入邮箱地址来发送验证码的方式注册用户账号

(3)用户管理:超级管理员可以对用户进行增删改查的操作;

(4)图书管理:管理员登录后可以对书库中的书进行增删改查;

(5)借书管理:读者可以借书与还书;

(6)图书借/还书审核:管理员对读者借书和还书进行审核;

(7)图书检索:读者和管理员可以搜索书库中的书。例如,按图书编号、书名、作者、图书类型任选一种方式进行搜索;

5.2 Diagrams流程图

  • controller目录下类的继承关系图
  • entity目录下实体类的继承关系图
  • filter目录下类的继承关系图
  • mail目录下类的继承关系图
  • repository目录下的接口及对应的接口实现类

自定义接口

接口实现类

  • service目录下的接口及对应的接口实现类

自定义接口

接口实现类

  • utils目录下类的继承关系图

6 数据库设计

6.1 表的视图

6.2 E-R图设计

  • 读者实体E-R图
  • 管理员实体E-R图
  • 图书实体E-R图
  • 图书分类实体E-R图
  • 借阅图书实体E-R图
  • 还书登记实体E-R图

    **访问在线文档地址https://docum.wehstudy.xyz/

参考文档

  • 前端Layui框架
  • Java 全栈知识体系