基于MVC三层架构的图书管理系统(JavaWeb+Maven项目)

目录

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视图分析

基于MVC三层架构的图书管理系统(JavaWeb+Maven项目)

; 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.servletgroupId>
            <artifactId>javax.servlet-apiartifactId>
            <version>4.0.1version>
            <scope>providedscope>
        dependency>
        <dependency>
            <groupId>org.junit.jupitergroupId>
            <artifactId>junit-jupiter-apiartifactId>
            <version>${junit.version}version>
            <scope>testscope>
        dependency>
        <dependency>
            <groupId>org.junit.jupitergroupId>
            <artifactId>junit-jupiter-engineartifactId>
            <version>${junit.version}version>
            <scope>testscope>
        dependency>
        <dependency>
            <groupId>jstlgroupId>
            <artifactId>jstlartifactId>
            <version>1.2version>
        dependency>
        <dependency>
            <groupId>org.apache.commonsgroupId>
            <artifactId>commons-lang3artifactId>
            <version>3.4version>
        dependency>
        <dependency>
            <groupId>c3p0groupId>
            <artifactId>c3p0artifactId>
            <version>0.9.1.2version>
        dependency>
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <version>8.0.26version>
        dependency>
        <dependency>
            <groupId>taglibsgroupId>
            <artifactId>standardartifactId>
            <version>1.1.2version>
        dependency>
        <dependency>
            <groupId>commons-dbutilsgroupId>
            <artifactId>commons-dbutilsartifactId>
            <version>1.7version>
        dependency>

        <dependency>
            <groupId>javax.mailgroupId>
            <artifactId>mailartifactId>
            <version>1.4version>
        dependency>
        <dependency>
            <groupId>javax.activationgroupId>
            <artifactId>activationartifactId>
            <version>1.1.1version>
        dependency>
        <dependency>
            <groupId>net.sf.json-libgroupId>
            <artifactId>json-libartifactId>
            <version>2.4version>
            <classifier>jdk15classifier>
        dependency>
    dependencies>

2.2 C3P0连接池的配置

注入所需maven依赖

        <dependency>
            <groupId>c3p0groupId>
            <artifactId>c3p0artifactId>
            <version>0.9.1.2version>
        dependency>

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


<c3p0-config>

    <named-config name="testc3p0">

        <property name="user">rootproperty>
        <property name="password">123456property>
        <property name="driverClass">com.mysql.jdbc.Driverproperty>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/library?useUnicode=true&characterEncoding=UTF-8property>

        <property name="acquireIncrement">5property>

        <property name="initialPoolSize">5property>

        <property name="minPoolSize">5property>

        <property name="maxPoolSize">10property>

    named-config>

c3p0-config>

基本原理

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

3 技术栈

3.1 前端技术

主要技术:

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

3.2 后端技术

主要技术

  • Servlet
  • Maven
  • Mysql
  • JavaMail

4 项目的目录结构

4.1 maven的设计

maven树的结构设计图

基于MVC三层架构的图书管理系统(JavaWeb+Maven项目)

4.2 项目的总体设计

目录结构设计

基于MVC三层架构的图书管理系统(JavaWeb+Maven项目)

; 5 系统设计

5.1 系统功能设计说明

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

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

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

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

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

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

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

5.2 Diagrams流程图

  • controller目录下类的继承关系图
    基于MVC三层架构的图书管理系统(JavaWeb+Maven项目)
  • entity目录下实体类的继承关系图
    基于MVC三层架构的图书管理系统(JavaWeb+Maven项目)
  • filter目录下类的继承关系图
    基于MVC三层架构的图书管理系统(JavaWeb+Maven项目)
  • mail目录下类的继承关系图
    基于MVC三层架构的图书管理系统(JavaWeb+Maven项目)
  • repository目录下的接口及对应的接口实现类

自定义接口

基于MVC三层架构的图书管理系统(JavaWeb+Maven项目)
接口实现类
基于MVC三层架构的图书管理系统(JavaWeb+Maven项目)
  • service目录下的接口及对应的接口实现类

自定义接口

基于MVC三层架构的图书管理系统(JavaWeb+Maven项目)
接口实现类
基于MVC三层架构的图书管理系统(JavaWeb+Maven项目)
  • utils目录下类的继承关系图
    基于MVC三层架构的图书管理系统(JavaWeb+Maven项目)

6 数据库设计

6.1 表的视图

基于MVC三层架构的图书管理系统(JavaWeb+Maven项目)
6.2 E-R图设计
  • 读者实体E-R图
    基于MVC三层架构的图书管理系统(JavaWeb+Maven项目)
  • 管理员实体E-R图
    基于MVC三层架构的图书管理系统(JavaWeb+Maven项目)
  • 图书实体E-R图
    基于MVC三层架构的图书管理系统(JavaWeb+Maven项目)
  • 图书分类实体E-R图
    基于MVC三层架构的图书管理系统(JavaWeb+Maven项目)
  • 借阅图书实体E-R图
    基于MVC三层架构的图书管理系统(JavaWeb+Maven项目)
  • 还书登记实体E-R图
    基于MVC三层架构的图书管理系统(JavaWeb+Maven项目)
    **访问在线文档地址https://docum.wehstudy.xyz/

; 参考文档

Original: https://blog.csdn.net/IT_WEH_coder/article/details/126620622
Author: IT_WEH_coder
Title: 基于MVC三层架构的图书管理系统(JavaWeb+Maven项目)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/788440/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 《Tango With Django2》Chapter5笔记 — Model & DB

    Django用对象关系映射器(Object Relational Mapper, ORM)¹来访问存储在数据库中的数据 本质上,存储在数据库表中的数据是通过Django模型封装的。…

    Python 2023年8月6日
    058
  • Python编程题汇总

    找出列表中单词最长的一个 def test(): a = ["hello", "world", "yoyo", &quo…

    Python 2023年8月3日
    037
  • Mybatis缓存机制

    什么是缓存? 为什么使用缓存? 什么场景下使用缓存? 缓存(Cache)就是数据交换的缓冲区,一个临时存储数据的地方,当我们读取数据时会首先从缓存中查找需要的数据,如果找到了则直接…

    Python 2023年10月13日
    024
  • Pandas(十二)–绘图

    Pandas 在数据分析、数据可视化方面有着较为广泛的应用,Pandas 对 Matplotlib 绘图软件包的基础上单独封装了一个 plot()接口,通过调用该接口可以实现常用的…

    Python 2023年8月6日
    036
  • python点云可视化

    本文为博主原创文章,未经博主允许不得转载。 本文为专栏《python三维点云从基础到深度学习》系列文章,地址为”https://blog.csdn.net/suiyin…

    Python 2023年8月3日
    051
  • 大数据HQL笔试题

    大数据HQL笔试题 问题[字节跳动] 学生每做一道题目就会在表里记录一条,求8月22号学生答的第一题以及得分,最后一题以及得分 原数据如下 + | user_id | questi…

    Python 2023年8月9日
    052
  • numpy广播机制

    NumPy的广播机制 文章目录 NumPy的广播机制 * Broadcast 最简单的广播机制 稍微复杂的广播机制 广播机制到底做了什么 一个典型的错误案例 一个正确的经典示例 一…

    Python 2023年8月26日
    057
  • 【读书笔记】《利用Python进行数据分析》第2版_第七章 数据清洗与准备

    讨论用于缺失值、重复值、字符串操作和其他分析数据转换的工具 7.1 处理缺失值 pandas对象的所有描述性统计信息默认情况下是排除缺失值的 对于数值型数据,pandas使用浮点值…

    Python 2023年8月16日
    065
  • 分享写python需要养成的9个编程好习惯,希望给你们带来帮助~

    Original: https://www.cnblogs.com/Qqun261823976/p/16454943.htmlAuthor: python倩Title: 分享写py…

    Python 2023年11月2日
    031
  • 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档

    背景 在计量领域中,计量检定是一种重要形式,主要用于评定计量器具的计量性能,确定其量值是否准确一致,实现手段包括计量检验、出具检定证书和加封盖印等。在检定证书这一环节,存在一个难点…

    Python 2023年10月22日
    046
  • aardio 编程语言快速入门 —— 语法速览

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Python 2023年6月9日
    068
  • 线程(Thread)基本用法

    一.线程的调用 1.无参 def run_01(): for i in range(6, 10): print("test01", i) time.sleep(…

    Python 2023年10月14日
    040
  • django使用原生SQL查询示例

    实际开发中,在ORM模型查询API不够用或或者数据量比较大的情况下,我们只能使用原始的SQL语句进行查询。 raw()管理器方法用于原始的SQL查询,并返回 &#x6A21…

    Python 2023年8月5日
    045
  • Go 语言入门 3-动态数组(slice)的特性及实现原理

    go 语言中的动态数组(slice),是基于数组实现的,可以相比数组而言更加的灵活。其他语言的 slice 通常仅是一个 API, 但是 go 语言的 slice 不仅仅是一种操作…

    Python 2023年6月11日
    077
  • python pandas dataframe group

    groupby() 用法 pandas 可以很方便的对DataFrame中的数据进行分组处理,可以按单列、多列进行分组,可以对分组的内容通过agg方法进行sum、min、max、 …

    Python 2023年8月22日
    041
  • 死磕Java面试系列:深拷贝与浅拷贝的实现原理

    深拷贝与浅拷贝的问题,也是面试中的常客。虽然大家都知道两者表现形式不同点在哪里,但是很少去深究其底层原理,也不知道怎么才能优雅的实现一个深拷贝。其实工作中也常常需要实现深拷贝,今天…

    Python 2023年10月16日
    031
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球