毕业论文

基于J2EE架构的集群注册平台系统 的设计与实现

摘 要

随着计算机网络技术的极速发展,帮助人们解决了当今社会很多的痛点问题。其中以工商注册、公司在线办理业务,由传统的线下办理到如今的线上办理,这个需求越来越受到人们的重视。从原来的线下来回跑到如今的只需要动动鼠标,就可以解决耗时耗力可能也解决不了的问题。集群注册平台系统的诞生是社会发展的必然趋势,现在就已经有非常多的用户希望早一点拥有这样的系统。如何将公司线下注册的流程在集群注册平台系统中得以实现、提高效率,是本文主要解决的痛点问题。本文就公司注册在集群注册系统中的实践进行了一些研究,证明了其经济可行性、理论可行性,未来前景一片大好,因此开发了集群注册平台系统。

本文介绍了开发集群注册平台系统的详细过程,开发软件是IntelliJ
IDEA,项目管理工具是Maven,数据库使用的是MYSQL,系统开发使用的前端框架有Bootstrap+HTML5+JQuery,后台采用SpringMVC、Spring和MyBatis技术开发。平台使用三层结构来设计,即Controller层、Service层和Dao层,后台选取JaveEE作为开发技术架构,包括有限公司在线注册模块、个人独资公司在线注册模块、合作伙伴在线注册模块和管理员管理模块,管理员信息管理模块,管理员新闻管理模块,管理者图片管理模块等。

关键词 公司注册;工商注册;集群注册

Designment and Implementation of Cluster Registration Platform System

Abstract

With the rapid development of computer network technology, helping people solve
many of the pain points in today’s society. Among them, the business
registration, the company’s online business, from the traditional offline
management to today’s online processing, this demand has increasingly attracted
people’s attention. From the original line back and forth to today’s only need
to move the mouse, you can solve the problem that time and energy may not be
able to solve. The birth of cluster registration platform system is an
inevitable trend of social development, and now there are already a lot of users
who hope to have such a system earlier. How to achieve the company’s offline
registration process in the cluster registration platform system to achieve
efficiency, is the main problem to solve this paper. This article has carried on
some research on the company registration in the cluster registration system
practice, proved its economic feasibility, theoretical feasibility, and the
future prospect is excellent. Therefore, the cluster registration platform
system was developed.

This paper introduces the detailed process of developing cluster registration
platform system, the development software is IntelliJ IDEA, the project
management tool is Maven, the database uses MYSQL, the front frame of the system
development and use is Bootstrap+HTML5+JQuery, and the background is developed
by SpringMVC, Spring and MyBatis technology. The platform uses three layers of
structure, namely, the Controller layer, the Service layer and the Dao layer,
and the background select JaveEE as the development technology framework,
including the online registration module of the limited company, the online
registration module of the sole proprietorship company, the online registration
module and the administrator management module, the administrator information
management module and the administrator’s new management module. Information
management module, manager image management module, etc.

**Keywords **Company registration, Business registration, Cluster registration

目 录

摘要 I

Abstract II

目 录 IV

第1章 绪论 1

1.1 课题背景 1

1.2 课题的现状和发展趋势 1

1.3 课题的研究意义 2

1.4 论文结构 2

第2章 技术及工具介绍 4

2.1 IntelliJ IDEA工作环境 4

2.2 MySQL数据库 4

2.3 三层体系架构 5

2.4 设计原则 5

2.5 系统使用框架 6

2.5.1 spring框架 6

2.5.2 JQuery框架 8

2.6 技术支持 8

2.6.1 上传与下载图片 8

2.6.2 md5加密 8

2.7 本章小结 9

第3章 需求分析 10

3.1 系统的目标 10

3.2 系统功能需求 10

3.3 系统功能分析及建模 11

3.3.1 系统用例建模 11

3.3.2 系统领域建模 13

3.4 系统非功能需求 14

3.4.1 系统约束 14

3.4.2 系统硬件环境 14

3.4.3 系统软件环境 14

3.5 系统数据需求 15

3.5.1 系统数据库介绍 15

3.5.2 E-R模型建立 15

3.6 本章小结 16

第4章 系统设计 17

4.1 系统功能模块设计 17

4.2 系统模块详细设计 17

4.2.1 登录模块 17

4.2.2 公司注册模块 18

4.2.3 管理员审核模块 20

4.2.4 图片管理模块 20

4.3 数据库设计 20

4.3.1 新闻信息基本表 20

4.3.2 公司注册基本表 21

4.3.3 管理员基本表 22

4.3.4 用户基本表 23

4.3.5 图片基本表 23

4.3.6 公司员工基本表 24

4.3.7 地址基本表 24

4.3.8 银行卡基本表 25

4.3.9 秘书公司基本表 25

4.3.10 经营范围基本表 26

4.3.11 合同信息基本表 27

4.3.12 邮件地址基本表 27

4.3.13 服务区域基本表 28

4.3.14 注册地址基本表 28

4.3.15 秘书公司商品基本表 29

4.3.16 操作记录基本表 29

4.4 本章小结 30

第5章 系统实现与测试 31

5.1 系统实现 31

5.1.1 系统功能模块实现 31

5.1.2 基础数据模块实现 33

5.1.3 公司注册过程实现 34

5.1.4 公司审核模块实现 35

5.1.5 文章信息模块实现 36

5.1.6 文章与图片设计 36

5.1.7 图片上传实现 37

5.2 系统测试 37

5.2.1 系统测试的目的 37

5.2.2 系统测试的方法 37

5.2.3 系统测试用例 38

5.2.4 系统测试结果 38

5.3 本章小结 45

结论 46

致谢 47

参考文献 48

附录 49

绪论

课题背景

在当今迅速发展的网络时代,信息的有效性与生活的各个部分密不可分,应用领域已从第一次军事科学研究应用扩展到各种社会领域,形成了一个大规模的计算机产业,在全球范围内促进技术进步。提高了商业注册的效率,系统对于公司相关重要信息全部进行加密保护。集群注册意味着多家有限责任公司将其公司的住址注册为其居住地,并且该公司提供托管服务以形成企业集群的注册模式[1]。集群注册平台系统将复杂的公司注册流程移到线上处理,因此备受人们瞩目。本系统是为了更加方便人们尤其是那些创业者而设计的。

然而,传统的公司注册流程已经不能满足移动互联网时代的需求[2]。在传统模式中,如果用户想要申请创办一家公司,线下需要做的事情有选择公司的形式、办理企业名称核准、确定公司住所等等事情。集群注册注册平台系统就是将以上的这些步骤移到了线上,用户只需要在电脑前即可完成以上操作,动动鼠标,喝喝咖啡,轻轻松松完成了以上步骤,再也不用求人办事,跑东跑西。

课题的现状和发展趋势

在服务制胜的时代,时间非常的宝贵,节省客户的时间显得日渐重要。在追求效率,客户利益至上的今天,必须牢牢把客户是上帝这样的理念记载心中,时刻谨记,不能忘怀,借助集群注册系统的方便,有效,节省时间,努力提高客户的认可,解决当今社会的痛点问题,该系统主要解决的问题,有一句话来概括,简洁明了,“让你在72小时之内拥有一家属于自己的公司”。帮助广大创业者短时间内拥有一家属于自己的公司,如果不知道注册地址、建立公司的过程等等相关知识,不要紧。至此,以如何解决当前创业人的以上痛点问题的需求油然而生。

集群注册系统软件是国内首家创办的系统,据了解该系统是第一家解决该痛点问题而研发的系统,其意义是重大的,也越来越受到广大创业者的欢迎。目前中国的集群注册理念不是特别的成熟,集群注册软件技术还需要时间的验证,但是我们有信心能够将他做好。在当今日益激烈的经济竞争中,有非常强大的促销价值[3]。我们即使没有成功推广的样品可供使用,但是创新的项目更加容易成功。从长远来看,集群注册系统的前景很好。

课题的研究意义

通过查阅资料和调查分析当前创业者如果想要注册公司的情况,从技术和科技发展角度出发,探索最大程度上利用相关技术实现全集群注册系统功能。由于项目需要核名,判断的公司的名称是否已经被别人用过了,需要打通与内部工商局的接口。本课题的研究扩展了集群注册系统的理论体系和内涵,将技术应用于系统中,能够在一定程度上解决当今社会存在的痛点的问题。

主要由几点来阐述实际应用价值,一:节约了用户的时间,创建公司在也不用东跑西跑,省时省力,用户用着也放心。二:价格实惠,系统只需要2400元套餐的价格,就可以走完全套的流程,比线下注册公司优惠了好多。三:由系统注册的公司完全合法有效,国家认可,而且还提供售后保障,有任何问题都可以联系我们,我们会为您无偿解答,一定给您最舒心放心的服务。四:自雇业务的限制太多。基本上,你经营自己的企业,这样的好处不在公司的方式[4]。不利于与大公司的合作。

由此可知,集群注册平台系统有着非常大的推广价值,不难看出,集群注册平台系统具有省时,省力,节省公司资金投入等诸多优点。因此,集群注册平台系统必然是IT领域受欢迎的话题之一[5]。

论文结构

本文主要研究基于SPRING、SPRING
MVC、MYBATIS、REDIS框架实现的集群注册平台系统。该集群注册平台系统利用Java语言实现。数据库为MYSQL。系统功能模块主要有登录模块,工商注册模块,管理员维护用户模块,注册模块、管理员新闻维护模块、管理员图片维护模块、有限公司在线办理模块、合伙企业在线办理模块、个人独资公司在线办理模块等[6]。本文的内容如下:

摘要:整个项目内容的简要描述,对项目的背景,使用技术,功能和意义的准确阐明,是本文的重点。

第一章:绪论,简要介绍了集群注册平台系统的背景和目的,国内外研究现状以及相关领域现有的研究成果,研究方法,研究成果和结论[7]。

第二章:介绍了技术和工具,介绍了用于集群注册平台系统的技术,数据库是MYSQL,非关系型数据库是REDIS,框架是SSM框架SPRING,SPRING,MYBATIS[8]。

第三章:集群注册平台系统需求分析和总体结构框架设计了解在线商业注册提供的功能和目前的新要求,说明在线公司注册的步骤。以及集群注册平台系统的各个功能模块是如何设计的。

第四章:数据库设计和概要设计,详细介绍了整个系统的功能以及各功能模块的概要和内部结构。
体现了主要的设计过程,并详细解释了数据库中表的属性含义,以及相关的索引信息。

第五章:集群注册平台系统的详细设计与实现。本章详细介绍了各功能模块的功能接口,详细介绍了集群注册平台系统的内部组件。

技术及工具介绍

IntelliJ IDEA工作环境

集群注册平台系统主要是利用IntelliJ IDEA工作环境开发的,同时还安装了JDK
1.7操作环境[9]。它具有更快的操作和更好的代码生成;持续的重新设计和日常编码变得更容易,并与其他工具完美地结[10]。

IntelliJ
IDEA比其他大多数IDE好得多。IDEA对开发人员最令人兴奋的功能是深厚的编程理念:IDEA可以在不离开IDE的情况下调用,几乎可以实现所有功能[11]。同时,IDEA可以完全自定义界面的布局,比如隐藏一些暂时未使用的工具栏和窗口,以便获得对界面布局的更多控制。一般来说,IntelliJ
IDEA的界面除了最重要的编辑器之外还有几个工具窗口,在编程过程中需要在编辑器和工具窗口之间切换,IntelliJ
IDEA有很多快捷键这是一个开发人员它允许您快速切换而不使用错误的键盘[12]。

MySQL数据库

集群注册平台使用MySQL数据库来存储数据,MySQL是一个开源的关系数据库,在5.7版之前,MySQL对地理空间功能和一般性能的支持有限,所以没有被广泛使用。然而,随着对LBS服务需求的不断增加,MySQL进行了大规模重建和GIS优化,并将此升级整合到版本5.7中。[13]。5.7
GIS改进:使用Boost
Geometry库重构地理空间数据代码,向球体添加通用ST_Distance_Sphere等。InnoDB存储引擎本身支持地理空间数据类型,InnoDB存储引擎R

  • 树索引支持地理空间查询。

平台选择MySQL数据库进行数据存储,优点如下:

1.免费且开源,无其他费用。

2.高性能和快速响应。

3.可靠性好,丢失数据并不容易。

4.操作简单易懂。

5.适合中小型企业,足够的容量来存储集群注册系统。

Navicat是一个功能强大的数据库管理工具和MySQL开发工具,Navicat为专业开发人员提供功能强大且功能强大的工具,但对于新的学习者来说,仍然很容易。Navicat使用优秀的图形用户界面(GUI),可以让您快速安全地工作,轻松地创建,组织,打开和共享信息。用户可以完全控制MySQL数据库,并可以显示各种管理数据,它包括用于管理用户和访问权限的各种图形管理工具,因此,可以将数据从一个数据库传输到另一个数据库。

三层体系架构

集群注册平台系统采用三层体系架构图进行设计的,三层体系结构是接口层,业务逻辑层和数据访问层。解释他们之间的共同关系,目标是实现劳动分工和治理理念。同时,由于三层体系结构彼此独立,因此可以更容易地更改和维护系统结构,从而提高代码的可重用性。三层体系架构如图2-1所示。

图2-1 三层体系架构图

接口层接收来自用户的请求,一旦数据返回,客户就可以访问应用程序,它位于最靠近用户的最外层,并帮助用户完成操作,特别是使用JSP,HTML语言设计[14]。

业务逻辑层专注于业务规则,业务流程和其他业务相关系统设计的设计,并在数据访问层和接口层之间的连接中发挥作用。它包含数据层的主要操作,处理数据的主要业务,并将其结果返回到表示层。

数据访问层是三层体系结构中的低级体系结构,是业务组件和数据库表之间的逻辑接口。它完成数据库操作,而数据访问层提供主要逻辑,接受数据库中的操作,并返回结果。

设计原则

集群注册系统的设计原则基于用户体验的要素。简单明了的系统设计使用户在使用该系统时可以获得最高的满意度。主要为面向服务的用户体验而设计,平台将从战略层、范围层、结构层、框架层和表现层5个层面来进行设计。

1.战略层,成功的用户体验的基础是一个明确定义的“策略”。平台的用户需求主要是快速有效地完成在线群集注册。在清晰策略开始时,虽然角色不同,但最终目标是相同的,但通过事先调查可更好地理解用户需求。最初的详细需求分析报告为用户体验的成功奠定了基础。

2.范围层,对应产品的信息和功能点,参与产品关注和权衡当您将用户需求和网站目标转变为网站向用户提供的内容时,该策略就成为一种触角。在信息产品方面,范围是对各种内容元素的详细描述。

3.结构层,根据产品的实际落地情况,在明确了产品的架构信息和核心功能之后,我们能够构建产品的业务结构和相应的信息架构,并在此基础上进行交互式设计,以确定页面之间的级别和关系。此级别的输出是一个业务流程图和操作流程图[15]。

4.框架层,考虑界面设计,交互布局,主要是为了解决事物的安排。包括导航设计,界面设计,交互细节在内的设计。此阶段的工作可以由产品经理或交互设计师完成。输出通常是对交互式原型和功能的描述。

5.平台,虽然它是一种视觉设计,但我们需要控制视觉设计是否符合设计审查的整体产品计划。这个阶段的输出是一个具有视觉设计和高保真度的原型。

集群注册平台系统还采用了服务设计的概念来提升用户体验,集群注册平台系统将用户体验设计融入到服务设计中,始终坚持以人为本的理念,结合用户大学管理员,用户,公司和学生,通过服务设计,用户可以体验到全新,高效,全面的管理体系。用户可以创建和增强服务体验并创建完美的用户体验。

系统使用框架

该平台主要采用B /
S架构(浏览器/服务器),设计平台的主要功能,部署在服务器上,便于平台的开发和使用。该系统采用B
/
S结构允许用户通过网页浏览器注册各种操作,操作简单方便。平台选择Spring框架,前台选择使用JQuery框架。这两个用于完成系统的设计和实现。

SPRING框架

SPRING框架的原理与SPRINGBOOT框架的原理有很多相似之处,系统的背景设置是通过各层之间的交互完成的。为了更好的使用SPRING框架,将其具体层次进行了如下解释。集群注册平台系统的项目架构图如图2-2所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BA1BRpGS-1587047422076)(media/76501dc15a454a1a3d5665a460e48bf2.png)]

图2-2 项目架构图

Controller层:控制层主要负责处理由DisPatcherServlet分散的请求,它不需要继承特定的类或者执行特定的接口,此外,控制层通过注入调用业务层来处理业务逻辑并将处理后的数据恢复到页面。
Service层:服务层负责业务逻辑处理以处理与业务相关的进程。在相对较大的系统中,因为要处理的逻辑很复杂,所以如果请求可能需要多次操作数据库,如果这些请求将DAO层代码调用到行动,这是可能的。然而,由于这不利于代码维护和重用,因此通常在dao层和动作层之间添加服务层,并将复杂的服务逻辑传递给服务层。
Domain层:一般是实体对象,实体对象中的属性与数据库中的字段相对应,主要用于接受页面中的数据,或者,您可以查询数据库中的数据,将其转换为实体对象,然后将其返回到页面进行显示。
DTO层:数据传输对象起到数据封装和隔离的作用,在实际项目中,DTO分两层传输,第一层是服务层到控制器。控制器简化了服务数据,并只发布一些与服务相关的相关领域或领域。不同的服务可能有DTO和不同的服务。另一层是Web前端层的控制层,这层DTO封装了控制器的执行结果,返回到前端Web,返回实体封装类,适用于所有类型的实体,它们是由Ajax请求返回并且没有业务依赖性。
Data:它主要由数据库类,数据库活动的基类,数据交换的通用接口以及由操作组成的数据组成。每个类都有自己的目标。

Spring
Framework是一个开源框架,用于解决业务应用程序开发的复杂性。它有一个轻量级的容器控制框架,用于逆向控制和面向方面的编程,性能出色。后端选择Java编程语言是因为其良好的面向对象功能,易用性和易操作性。

集群注册平台系统的前台和后台将完成Ajax的数据传输。Ajax指的是集成了多种技术的Web开发技术。使用Ajax的主要原因是它具有良好的兼容性。当涉及大量工作时,这可以在请求客户完成的同时减少Web服务器上的负载。

该项目使用json数据格式发送数据,AJAX异步传输数据。选择前端数据传输的主要原因是由于其自身的优点和特点,易于理解和阅读。

JQuery框架

前台使用JQuery框架,该框架是用JavaScript编写的前端框架,用于创建客户端Web应用程序界面.JQuery框架对其他前置功能(例如UI界面或其他JSP页面)具有更好的处理能力,或者数据分析和其他异常情况。

技术支持

在进行大纲设计时,考虑到存在一些阻碍完成开发任务的技术问题,有必要在数据实施前查询数据,提前掌握需要掌握的技术知识,为系统的实现奠定理论知识基础。

上传与下载图片

在设计集群注册平台系统时,上传下载图片比较频繁,因此有必要了解其技术。上传和下载照片的主要技术:

1.图片上传操作

该平台采用B /
S架构。当用户使用浏览器上传图像时,图像将以文件流的形式发送到服务器。在之前的研究中,通过Servlet获得指导以获得文件流并进行了详细阐述,但这种持续的请求过程非常麻烦。这是一个用于文件输入插件的解决方案。该插件功能非常强大,样式非常好,支持文件预览,AJAX上传TOEIC文件上传等酷炫功能。

2.图片下载操作

Java读取二进制文件并在诱饵中读取它们,在Java中,文件有四种类型的操作,即InputStream,OutputStream,Reader和Writer。前两种操作是字节流中的操作,后者是对字符流的操作。

MD5加密

集群注册系统存储了大量的公司和个人信息,因此数据的安全性非常重要。在设计时,研究了MD5数据加密算法算法,并对集群注册平台系统中的用户密码进行了加密和保护。

MD5算法是一种主要用于补充数据保护的散列算法,在群集注册平台系统中,MD5算法主要是补充用户密码保护。具体应用为:前台输入用户密码,后台接收MD5加密后生成永久固定长度的字符串和不可逆字符串,以确保用户信息的安全MD5算法具有强大的抗破坏性,是其选举的主要原因。

本章小结

本章介绍了集群注册平台系统的开发环境,存储数据使用的数据库,项目搭建使用的架构(控制层、业务层、数据访问层)。以及项目中使用到的技术以及涉及到的算法,用到了SPRINGMVC、MYBATIS、SPRING框架,涉及到的算法,图片的上传与下载、数据非对称加密算法等算法。

需求分析

系统的目标

集群注册平台系统主要是为了满足在线公司注册需求而开发设计,该系统提供完整的功能以满足用户的需求。集群注册平台系统的开发是为了满足在线商业注册的便利,实现创新思维的模式。可以快速,轻松地实现个性化,突出“效率”功能。

集群注册系统功能模块包括主页面视图、有限公司在线注册、合伙企业在线注册、个人独资公司在线注册、企业中心模块、个人中心模块、联系我们模块、用户管理模块、公司管理模块、LOGO管理模块,新闻管理模块、BANNER管理模块、NEWS管理模块等几个部分。本集群注册平台系统主要展示了用MYSQL、REDIS作为数据存储方式的JAVA编程。mysql、redis存储数据对于集群注册来说是比较好的方式,这种存储方式方便快捷,等到以后数据多了以后,还可以采用分库分表的操作。

系统功能需求

用户对集群注册平台系统要求的描述分析了系统最重要的功能需求,具体描述如下。

1.普通用户登录模块

在用户进入系统之前,登陆操作是所有用户必须要执行的操作,判断登陆成功与否的逻辑是用户输入的用户名密码与数据库中的数据是否匹配,防止用户没有登录就进入集群注册平台系统。如果验证通过,那么用户可以进入系统,否则,用户名或密码不正确,并且在线在线公司被注册。在这个简单的介绍中,为了方便起见,我设置了3个用户名和密码。
三位用户分别是李云峰,孙晓东和赵红明。如果您想注册,您也可以在线注册,您必须输入电子邮件地址,密码,确认密码和用户名才能完成注册。

2.有限公司在线注册模块

有限公司在线注册模块
本模块处理用户在线注册有限公司。在线注册有限公司需要录入有限公司的名称、企业类型、注册区域、注册资本、计划从事义务以及经营范围等等信息,之后需要录入有限公司的主要人员信息,包括法人信息填写,法人姓名,法人身份证号,法人移动电话,法人身份证住址、法人邮箱等信息,财务负责人信息填写,财务负责人姓名,财务负责人身份证号,财务负责人身份证住址,电子邮件,股东和投资者的财务负责人信息,包括证书类型,证书编号,姓名,实际资金和支付的金额,以及重要的出资方式等信息,以及最后是否设立董事会,经理,监事,董事的身份证类型,号码等等信息,这些信息也是存储在mysql中。

3.个人独资公司在线注册模块

主要对用户想要在线进行个人独资公司的注册。用户点击个人独资公司注册,输入个人独资公司的公司信息,例如公司类型选择个体工商户、公司名称、注册区域、从事行业类型、经营范围、注册资本、在线核名等,当输入完个人独资公司信息以后填写个人独资公司的主要员工信息,例如法人信息填写、法人姓名、身份证号码、住址、移动电话、电子邮箱等保存到mysql数据库中。

系统功能分析及建模

系统用例建模

1.用例视图强调从用户的角度看待或所需的系统功能参与者,用例,关联,包含,扩展关系和泛化关系是用例图的六个要素。

UML提供用例图的元素符号和绘制规则。采用User
Case图可以使用例的描述更规范、它更准确,更清晰,更易于理解,易于沟通。我们从现有用例中提取信息的公共部分作为不同的用例。通过以各种方式重用此常见用例,我们减少了模型的维护工作。

根据上述章节,我们可以了解系统应具备的功能。
通过这种方式,我们可以确定只有一个用户参与者。用例是系统参与者和系统在交互过程中需要完成的事情,也是系统和参与者之间的事情。对话,表明系统提供了什么功能以及系统为参与者提供了什么。普通用户可以进行的操作主要有联系我们模块、修改密码、用户登录模块、有限公司在线注册(包括录入公司信息与录入员工信息)、个人独资公司的在线注册(包括录入公司信息与录入员工信息)、合伙企业的在线注册(包括录入公司信息与录入员工信息)、注册模块、公司详情模块、公司审核详情(查看自己注册公司的审核情况)、图片管理模块(包括图片的上传与下载功能)、新闻模块(查看推送的新闻信息)。用户用例图如图3-1所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KVF0gIEv-1587047422078)(media/8f81093321dd9abb7813f3acacf657a9.png)]

图3-1 用户用例图

2.管理员登录集群注册平台系统后台,对官网的信息进行维护。管理员用例图如图3-2所示。管理员具有的功能有:用户信息的维护、注册公司审核、图片上传和新闻管理。

(1)管理员可以更改变量信息,如新闻内容,照片信息等。对于不可变的信息,它不能更改。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zi30NIdb-1587047422080)(media/c9002b559b9a0636f4eccab980fa314d.png)]

图3-2 管理员用例图

系统领域建模

集群注册平台系统在需求分析过程中建立了一个系统的领域模型,泛华、实现、关联、聚合、组合、依赖是UML类图的几种关系。

平台中最重要的实体是:经理,用户,公司,公司的员工等。平台的关系主要由聚合关系和组合关系组成,关系是它自己的关系,它是一个类知道另一个类的属性和方法。如公司与公司员工之间的关联可以使双向的,它也可以是单向的,组成部分是整体与部分之间的关系,但部分不能与整体分开存在。

系统非功能需求

系统约束

系统设计有各种限制,这些限制使得实施的系统更加实用和安全,有助于我们更广泛地查看系统架构并帮助改进系统。主要有以下约束限制:

1.安全约束

首先,我们需要考虑系统安全。该系统存储来自大量用户和公司的基本信息,以及公司在线注册过程中有关员工和其他方面的信息。严格保证安全。信息的所有方面必须保证安全,不能被破解或被黑客入侵。该系统必须有明确的安全限制,以确保所有方面的信息安全。

2.性能约束

性能约束意味着必须满足性能,影响性能的指标有很多,例如响应时间即系统对请求作出相应的时间。吞吐量,每单位时间处理的请求数。并发用户数是系统可以运行并使用系统功能的用户数。资源利用率是一段时间内的平均资源利用率。

系统硬件环境

集群注册平台系统采用B /
S架构。在您可以执行访问操作之前,您需要将系统部署到服务器。因此,有必要考虑服务器的配置,以确保系统兼容正常兼容性和外部正常访问。同时,用户的客户端要求不高,可以通过浏览器正常访问。

客户端配置:

1.CPU要求:Intel Core i5 -6500HQ或更高;

2.主板需求:Intel G51 + ich7;

3.内存要求:6GB DRD6以上;

4.硬盘要求:32GB+250G混合硬盘以上。

服务器端配置:

1.CPU要求:Intel Core i7 -6700HQ;

2.服务器主板要求:IntelS1200BTL服务器主板;

3.内存要求:2GB DDR4L 3200以上;

4.硬盘要求:250G以上。

系统软件环境

系统的软件开发环境至关重要,这是保证系统正常运行的重要因素,对系统运行环境的要求如下:

1.操作系统:Windows 7;

2.Web服务器:Tomcat 6.0;

3.开发工具:IntelliJ IDEA2016;

4.数据库:MySQL6.0及以上;

5.数据库可视化工具:Navicat。

系统数据需求

系统数据库介绍

集群注册平台系统的数据库设计只是列出每个模块中包含的信息,有助于系统构建总体设计,并有助于下一个系统的设计。数据库主要从五个方面设计,如下所述。

1.基本数据主要包括公司表格,员工表格,用户表格,图像表格,新闻表格,地址表格,秘书公司信息表格以及表格与表格之间的关系,他以员工为例,与公司和秘书处有联系,即表外键的设计被用来确定关系。

2.构建专用的数据表空间和索引表空间。这意味着数据独立于索引。根据应用程序创建单独的表空间。分区表所在的表空间也应该单独考虑。请特别注意对象的应用程序一定不能放在系统和其他系统表空间中。

3.必须考虑通常用作查询条件并具有不同值的字段进行索引。例如,由于开发环境中的数据量很小,因此不能忽略名称和员工编号。

4.符合索引的首列一定是那个不同值较多的那个比如姓名、性别,姓名一定要放到前面去。应该关注复合主键的第一个问题,并且经常看到与主键匹配的第一个关键字段是一个只有很少不同值的区域。

5.长度的大小要以最接近实际情况为准。

E-R模型建立

在对集群注册平台的系统数据库进行需求分析时,选择E-R模型来确定数据库实体与属性之间的关系。选择一些重要的实体并构建他们的定制E-R模型来简化系统的数据库表设计。公司实体属性图如图3-3所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CTlIitip-1587047422082)(media/dbf2b6cdcba69e09681d214c812947e8.png)]

图3-3 company实体属性图

本章小结

本章介绍了系统的需求分析,系统的目标、系统的功能需求、系统用力建模包括用户用例图和管理员用例图。介绍了系统的硬件需求与软件需求,以及公司的ER模型图,系统的相关约束,安全约束与性能约束。

系统设计

系统功能模块设计

集群注册平台系统的功能模块是根据公司的在线注册流程制定的,集群注册平台系统的功能模块图如图4-1所示,简要介绍了系统的功能模块,平台具有清晰的认识。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SANuzNkj-1587047422083)(media/5b25d53c217152f65ff7993b57b90e72.png)]

图4-1 系统功能模块图

该系统设计了三个角色:不同的管理员,用户和角色也有不同的操作权限。简而言之,管理员负责输入数据,包括基本数据,图像管理和新闻信息,以及公司信息的统计管理,审核注册公司信息。用户登录集群注册平台系统官网,在线注册有限公司、合伙企业、个人独资公司,快速完成公司注册。

集群注册平台的业务为实现用户在线实现公司注册的需求,该平台基于基于组件的软件工程。通过可重用组件的设计,软件重用的概念被应用于平台。该平台通过编写程序开发自己的组件并组装现有的组件,减轻升级和维护平台的负担,并降低建立平台的成本。为连接用户机制选择优秀的系统风格,页面设计简洁大方,功能设计结构清晰,用户体验元素是主要元素,用户很简单使用后您可以习惯业务流程。

系统模块详细设计

登录模块

用户登录模块的主要用户是管理员和用户。管理员输入用户信息。当然,用户也可以在官方网站上注册。在登录时,系统会根据用户的角色评估用户名和密码,读取用户信息并进入不同的功能页面。登录模块的具体流程图如图4-2所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C5SZ4pXl-1587047422084)(media/eb391920e77b2a896bfd1330f141bd94.png)]

图4-2 登录模块流程图

用户登录成功后,可以根据权限设置进入不同的页面,然后选择相应的功能模块进行不同的操作,由于集群注册平台系统保存了普通用户和管理员的信息,因此数据的安全性尤为重要,因此选择了md5算法。用于数据保护以防止他人窃取用户密码。

公司注册模块

公司注册模块是整个集群注册平台系统的核心功能模块,公司注册过程分为:个人独资公司在线注册、合伙企业在线注册、有限公司在线注册、个人独资公司员工信息录入、合伙企业员工信息录入、有限公司员工信息录入,具体操作功能模块图已经有很好的说明。公司注册功能结构如图4-3所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W2LBZbaZ-1587047422085)(media/3ea4dd8a5cfa4a107c408879ec42fd6e.png)]

图4-3 公司注册功能结构图

在集群注册平台系统中,不同类型公司注册流程是一个需要考虑实现的功能。用户可以通过选择在线注册有限公司,为其补充信息,通过时序图可以清楚地了解有限公司的实现流程,有限公司在线注册的时序图如图4-4所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I2w4sL2V-1587047422086)(media/15735925ba9b1f2dc7e45a872357a9b4.png)]

图4-4 有限公司在线注册时序图

管理员审核模块

在集群注册平台系统中,公司信息审计功能至关重要,用户必须完成公司数据,管理员可以查看公司信息。管理员审核公司的时序图如图4-5所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pse4yNsd-1587047422087)(media/caa37d3fa03792e8905d99d503457a00.png)]

图4-5 审核公司时序图

图片管理模块

图片管理模块是集群注册平台系统重要的一部分,管理员可以对集群注册平台系统官网首页展示的图片进行管理。

数据库设计

新闻信息基本表

新闻信息的表主要有存储新闻首页展示的内容,下面将介绍表的属性及基本关系。

新闻信息表,描述文章信息的内容以及标题,其中主要属性有:新闻标识、新闻标题、新闻内容、创建人、更新人、创建时间、更新时间,具体描述如表4-1所示。

表4-1 新闻信息表(t_news)

属性名 属性说明 字段名 字段类型 约束
id 标识 id int PK、唯一
title 新闻标题 title Varchar(50)
content 新闻内容 content Varchar(50)
createUser 新闻创建人 create_user Varchar(50)
updateUser 新闻更新人 update_user Varchar(50)
createTime 创建时间 create_time date
updateTime 更新时间 update_time date

公司注册基本表

公司注册表主要存储公司的相关信息,下面将介绍表的属性及基本关系。

注册公司表,主要属性有标识、公司名称、审核状态、注册资本、经营范围、用户id、订单id、公司id、秘书公司id、公司类型、注册区域、注册地址、从事业务、合伙年限、合伙人数、最大人数、董事会、投资情况、审核人、审核人姓名、审核时间、审核人id、操作人、操作时间、支付时间、支付状态、创建时间、更新时间、从事业务、经营范围,具体描述如表4-2所示。

表4-2 注册公司表(t_register_company)

属性名 属性说明 字段名 字段类型 约束
id 标识 id int PK
companyName 公司名称 company_name Varchar(20) 唯一
approvalStatus 审核状态 approval_status Varchar(50)
registerAmount 注册资本 register_amount Varchar(200)
businessScope 经营范围 business_scope Varchar(200)
userId 用户id user_id Varchar(200)
orderId 订单id order_id Varchar(200)
companyId 公司id company_id Varchar(200)
vendorId 秘书公司id vendor_id Varchar(200)
companyType 公司类型 company_type int
serviceAreaId 注册区域 service_area_id Varchar(200)
addressId 注册地址 address_id Varchar(200)
businessId 从事业务 business_id Varchar(200)
createUser 创建人 create_user Varchar(10)
updateUser 更新人 update_user Varchar(10)

续表4-2

属性名 属性说明 字段名 字段类型 约束
partnerCount 合伙人数 partner_count int
maxCount 最大人数 max_count int
hasDirectorate 董事会 hasDirectorate int
investCondition 投资情况 invest_condition int
approveUserId 审核人 approve_user_id int
approveName 审核人姓名 approve_name Varchar(200)
approveTime 审核时间 approve_time date
approveId 审核人id approve_id int
operatorName 操作人 operator_name Varchar(200)
operatorTime 操作时间 operator_time Varchar(200)
payStatus 支付状态 pay_status int
finishTime 结束时间 finish_time date
remark 备注 remark Varchar(200)
createTime 创建时间 create_time date
updateTime 更新时间 update_time date
businessYear 营业年限 business_year int
employePeople 从业总人数 employe_people int
registerArea 注册区域 register_area Varchar(200)
comBusiness 从事业务 com_business Varchar(200)
businessScope 经营范围 business_scope Varchar(200)

管理员基本表

管理员基本表主要存储集群注册平台系统管理员的信息。

管理员基本表,主要属性有标识、姓名、密码、手机号码、邮箱、是否有效、提交时间、更新时间、角色、账户,具体描述如表4-3所示。

表4-3 管理员信息表(t_operator_user)

属性名 属性说明 字段名 字段类型 约束
id 标识 id int PK
operatorName 姓名 operator_name Varchar(20)
operatorPassword 密码 operator_password Varchar(20)
phoneNo 手机号码 phone_no Varchar(50)
email 邮箱 email Varchar(50)
valid 是否有效 valid Boolean
roleId 角色 role_id int
operatorAccount 账户 operator_account Varchar(50)

续表4-3

属性名 属性说明 字段名 字段类型 约束
createTime 提交时间 create_time date
updateTime 更新时间 update_time date

用户基本表

用户信息的表主要有存储集群注册平台系统用户的信息,下面将介绍表的属性及基本关系。

用户信息表,其中主要属性有:用户标识、用户姓名、邮箱、密码、创建人、更新人、创建时间、更新时间,具体描述如表4-4所示。

表4-4 用户信息表(t_user)

属性名 属性说明 字段名 字段类型 约束
id 标识 id int PK、唯一
name 姓名 name Varchar(50)
email 邮箱 email Varchar(50)
password 密码 password Varchar(50)
create_user 创建人 create_user Varchar(50)
update_user 更新人 update_user Varchar(50)
update_time 更新时间 update_time date
create_time 创建时间 create_time date

图片基本表

图片信息的表主要有存储图片首页展示的内容,下面将介绍表的属性及基本关系。

图片信息表,其中主要属性有:图片标识、图片备注、图片流、创建人、更新人、创建时间、更新时间,具体描述如表4-5所示。

表4-5 图片信息表(t_picture)

属性名 属性说明 字段名 字段类型 约束
id 标识 id int PK、唯一
picRemark 图片备注 pic_remark Varchar(50)
url 图片流 url Varchar(50)
creatTime 创建时间 creat_time date
updateTime 更新时间 update_time date
createUser 创建人 create_user Varchar(50)
updateUser 更新人 update_user Varchar(50)

公司员工基本表

员工信息的表主要有存储公司员工的信息,下面将介绍表的属性及基本关系。

员工信息表,其中主要属性有:标识、公司id、人员id、姓名等等,具体描述如表4-6所示。

表4-6 员工信息表(t_company_employee)

属性名 属性说明 字段名 字段类型 约束
id 标识 id int PK、唯一
companyId 公司id company_id Varchar(50)
personId 人员id person_id Varchar(50)
name 姓名 name Varchar(50)
identityId 身份证号码 identity_id Varchar(50)
ientityType 证件类型 ientity_type Varchar(50)
phoneNum 手机号码 phone_num Varchar(50)
password 密码 password Varchar(50)
status 状态 status Varchar(50)
address 地址 address Varchar(50)
idtityCheck 实名认证 idtity_check Varchar(50)
idPiveMg 正面照 id_pive_mg Varchar(50)
idImg 反面照 id_c_img Varchar(50)
receiveCate 领取证书 receive_cate Varchar(50)
idntityTime 认证时间 idntity_time Varchar(50)
regiserCont 注册公司数量 regiser_cont Varchar(50)
secnyCount 秘书公司数量 secrry_any_count Varchar(50)
createTime 创建时间 create_time date
updateTime 更新时间 update_time date
email 邮箱 email Varchar(50)
ideImgPdf 图片 ide_img_pdf Varchar(50)
realPay 实付金额 real_pay Varchar(50)
confirmPay 确认金额 confirm_pay Varchar(50)
payWay 支付方式 pay_way Varchar(50)
emploeType 员工类型 employee_type Varchar(50)

地址基本表

地址信息的表主要有存储地址信息,下面将介绍表的属性及基本关系。

地址信息表,其中主要属性有:标识、用户id、新接受方姓名、手机号码等等,具体描述如表4-7所示。

表4-7 地址信息表(t_company_address)

属性名 属性说明 字段名 字段类型 约束
id 标识 id int PK、唯一
userId 用户id user_id Varchar(50)
receiveName 接受方姓名 receive_name Varchar(50)
phoneNum 手机号码 phone_num Varchar(50)
provinceArea province_area Varchar(50)
cityArea city_area Varchar(50)
countyArea county_area Varchar(50)

银行卡基本表

银行卡信息的表主要有存储银行卡信息,下面将介绍表的属性及基本关系。

银行卡信息表,用户实名认证时使用,其中主要属性有:标识、用户id、银行类型、银行名称,具体描述如表4-8所示。

表4-8 银行卡信息表(user_bank_card)

属性名 属性说明 字段名 字段类型 约束
id 标识 id int PK、唯一
userId 用户id user_id Varchar(50)
bankType 银行类型 bank_type Varchar(50)
bankName 银行名称 bank_name Varchar(50)
cardNmber 银行卡号 card_nmber Varchar(50)
cardType 银行卡类型 card_type Varchar(50)
status 状态 status Varchar(50)
createTime 创建时间 create_time date
updateTime 更新时间 update_time date

秘书公司基本表

秘书公司信息的表主要有存储秘书公司的内容,下面将介绍表的属性及基本关系。

秘书公司信息表,其中主要属性有:标识、申请号、用户id、秘书公司id等等,具体描述如表4-9所示。

表4-9 秘书公司信息表(t_vendor)

属性名 属性说明 字段名 字段类型 约束
id 标识 id int PK、唯一
applyId 申请号 apply_id Varchar(50)
userId 用户id user_id Varchar(50)
bvendorId 秘书公司id vendor_id Varchar(50)
vendorName 秘书公司 vendor_name Varchar(50)
legalName 法人姓名 legal_name Varchar(50)
status 状态 status Varchar(50)
identityId 证件id legal_identity_id Varchar(50)
identityType 证件类型 legal_identy_type Varchar(50)
businLicense 营业执照 business_license Varchar(50)
licImg 营业执照 license_image Varchar(50)
amount 资金 register_amount Varchar(50)
scope 范围 business_scope Varchar(50)
address 地址 company_address Varchar(50)
status 状态 approve_status Varchar(50)
phone 手机号码 phone_number Varchar(50)
userId 用户id approve_user_id Varchar(50)
userName 用户姓名 approe_user_name Varchar(50)
appTime 审核时间 approve_time date
remark 备注 remark Varchar(50)
createTime 创建时间 create_time date
updateTime 更新时间 update_time date

经营范围基本表

经营范围信息的表主要有存储经营范围有关信息,下面将介绍表的属性及基本关系。

经营范围信息表,其中主要属性有:标识、秘书公司id、经营范围、状态,具体描述如表4-10所示。

表4-10 经营范围信息表(vendor_company_business)

属性名 属性说明 字段名 字段类型 约束
id 标识 id int PK、唯一
vendorId 秘书公司id vendor_id Varchar(50)
busiessId 经营范围 business_id Varchar(50)
valid 状态 valid Varchar(50)
createTime 创建时间 create_time date

续表4-10

属性名 属性说明 字段名 字段类型 约束
updateTime 更新时间 update_time date

合同信息基本表

合同信息的表主要有存储合同的内容,下面将介绍表的属性及基本关系。

合同信息表,其中主要属性有:标识、秘书公司id、合同编号、创建时间等等,具体描述如表4-11所示。

表4-11 合同信息表(vendor_contract)

属性名 属性说明 字段名 字段类型 约束
id 标识 id int PK、唯一
vendorId 秘书公司id vendor_id Varchar(50)
contractNo 合同编号 contract_no Varchar(50)
startTime 开始时间 contract_start_time Varchar(50)
endTime 结束时间 contract_end_time date
courier 快递公司 courier date
courierNo 快递单号 courier_no Varchar(50)
createTime 创建时间 create_time date
updateTime 更新时间 update_time date

邮件地址基本表

邮件地址信息的表主要有存储地址信息展示的内容,下面将介绍表的属性及基本关系。

地址信息表,其中主要属性有:标识、秘书公司id、状态、创建人等等,具体描述如表4-12所示。

表4-12 邮件地址信息表(vendor_mail_address)

属性名 属性说明 字段名 字段类型 约束
id 标识 id int PK、唯一
vendorId 秘书公司id vendor_id Varchar(50)
status 状态 status Varchar(50)
postCode 代码 post_code Varchar(50)
detlAddress 地址 detl_address Varchar(50)
consiName 姓名 consignee_name Varchar(50)
consiPhone 手机号码 consi_phone_num Varchar(50)
createTime 创建时间 create_time date

续表4-12

属性名 属性说明 字段名 字段类型 约束
updateTime 更新时间 update_time date

服务区域基本表

服务区域信息的表主要有存储地区信息,下面将介绍表的属性及基本关系。

服务区域信息表,其中主要属性有:标识、秘书公司id、省id、创建人等等,具体描述如表4-13所示。

表4-13 服务区域信息表(vendor_service_area)

属性名 属性说明 字段名 字段类型 约束
id 标识 id int PK、唯一
vendorId 秘书公司id vendor_id Varchar(50)
proId 省id service_province_id Varchar(50)
proName 省名称 province_name Varchar(50)
cityId 市id service_city_id Varchar(50)
cityName 市名称 service_city_name Varchar(50)
countId 区id service_county_id Varchar(50)
cuntyName 区名称 county_name date
createTime 创建时间 create_time date
updateTime 更新时间 update_time date
valid 状态 valid int

注册地址基本表

注册地址信息的表主要有存储注册地址信息,下面将介绍表的属性及基本关系。

注册地址信息表,其中主要属性有:标识、用户id、区域id、创建人等等,具体描述如表4-14所示。

表4-14 注册地址信息表(vendor_service_register_address)

属性名 属性说明 字段名 字段类型 约束
id 标识 id int PK、唯一
vendorId 用户id vendor_id Varchar(50)
areaId 区域id service_area_id Varchar(50)
regAddress 注册地址 register_address Varchar(50)
status 状态 status Varchar(50)
createUser 创建人 create_user Varchar(50)

续表4-14

属性名 属性说明 字段名 字段类型 约束
createTime 创建时间 create_time date
updateTime 更新时间 update_time date

秘书公司商品基本表

秘书公司商品信息的表主要有存储秘书公司商品信息,下面将介绍表的属性及基本关系。

秘书公司商品信息表,其中主要属性有:标识、公司商品id、地区、价格,具体描述如表4-15所示。

表4-15 秘书公司商品信息表(vendor_sku)

属性名 属性说明 字段名 字段类型 约束
id 标识 id int PK、唯一
userId 公司商品id vendor_sku_uuid Varchar(50)
bankType 秘书公司id vendor_id Varchar(50)
bankName 商品id sku_id Varchar(50)
cardNmber 地区 service_area_id Varchar(50)
cardType 价格 price Varchar(50)
status 是否下架 valid Varchar(50)
createTime 创建时间 create_time date
updateTime 更新时间 update_time date
createUser 创建人 create_user Varchar(50)
updateUser 更新人 update_user Varchar(50)

操作记录基本表

操作记录信息的表主要有存储用户的操作记录,下面将介绍表的属性及基本关系。

操作记录信息表,其中主要属性有:标识、操作人、操作时间、更新时间等等,具体描述如表4-16所示。

表4-16 操作记录信息表(vendor_sku_operator_his)

属性名 属性说明 字段名 字段类型 约束
id 标识 id int PK、唯一
skuId 商品id vendor_sku_id Varchar(50)
operatorId 操作人id operator_id Varchar(50)
opatorName 操作人姓名 operator_name Varchar(50)
opeRemark 备注 operator_remark Varchar(50)

续表4-16

属性名 属性说明 字段名 字段类型 约束
updateUser 更新人 update_user Varchar(50)
createTime 创建时间 create_time date
updateTime 更新时间 update_time date

本章小结

本节从系统功能模块设计,详细介绍了系统的功能模块,系统的登录流程模块图,公司注册的时序图,管理员审核模块时序图。以及集群注册平台系统的底层数据库设计,包括公司地址表、公司员工表、新闻表、管理员信息表、用户信息表、公司信息表等15表的信息,具体介绍了每张表的字段名、字段类型、字段意义等等详细信息。

系统实现与测试

系统实现

系统功能模块实现

1.系统详细功能模块

集群注册平台系统的功能模块它是根据全公司注册流程设计的系统功能模块图如图5-1所示。系统的功能模块进行了详细描述,平台清晰了解。设计的内容主要包括用户登录模块、有限公司在线注册(包括录入公司信息与录入员工信息)、个人独资公司的在线注册(包括录入公司信息与录入员工信息)、合伙企业的在线注册(包括录入公司信息与录入员工信息)、管理员登录模块、公司详情模块、公司审核模块(审核不同类型公司信息)、图片管理模块(包括图片的上传与下载功能)、新闻管理模块(新闻的更新与维护)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cWubmJeV-1587047422088)(media/3a7e1dce7c1f9ded93794e5fc5393b59.png)]

图5-1 系统详细功能模块图

2.用户详细用例图

主角,用例以及它们之间的关系组成用例图。 用户用例图如图5-2所示。
用户的操作进行了详细的说明,平台清晰了解。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CvfvwI2T-1587047422088)(media/4801cdac213d83e9c338f012a25e8f3e.png)]

图5-2用户详细用例图

3.管理员详细用例图

用例图简要描述了系统的最终任务和结果,显示了用例是如何启动的,以及参与者在什么情况下启动了用例。主要用于模拟系统,子系统或类的功能。管理员详细用例图如图5-3所示,将管理员的操作做了详细的说明,对平台有一个清晰的认识。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xpR5iSJ7-1587047422089)(media/14190fa8ca2fc3aa2a1bf4d6a685a59e.png)]

图5-3管理员详细用例图

基础数据模块实现

1.用户信息维护

管理员维护用户信息。 用户信息属性包括:代码,名称,电子邮件和密码。
管理员可以检索,添加,编辑和删除用户,用户信息维护如图5-4所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7585hXJ8-1587047422090)(media/0d3e12f24a1cea6ae2d0b582b46f7e0d.png)]

图5-4用户信息维护

2.新闻信息维护

管理员正在编辑新闻信息,如图5-5所示,新闻信息属性包括:数字,新闻标题,新闻内容,创建者,修饰符,更新时间等,管理员可以编辑和删除新闻。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RSuD2PEL-1587047422090)(media/b32fa0805f15f5996d10fd8138867a36.png)]

图5-5 新闻信息维护

公司注册过程实现

1.公司注册流程

用户对集群注册公司信息进行补充。公司信息有:公司名称、注册资本、从属行业、经营范围等,如图5-6所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c2hVxs6T-1587047422091)(media/68d5dec407b1a01adea543eb0fbe4738.png)]

图5-6 公司注册信息

2.公司职员信息补充

用户对公司员工信息进行填写。公司员工属性有:员工姓名、手机号码、邮箱、上身份证号,如图5-7所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2oSN2ydG-1587047422091)(media/1829f6b6e062ac3b85e1191ad9c1477b.png)]

图5-7 公司职员信息补充

公司审核模块实现

后台公司管理模块主要是为管理员设计的,核心功能是为了查看与审核用户在官网注册的公司信息。有审核通过与驳回两种操作。如果审核通过,会给用户派发营业执照等重要的公司经营信息。如果审核驳回,那么说明用户输入的信息不完整,或者输入的信息有误,则需要重新输入。审核功能的实现,数据库表中有status属性,用来标明该公司是审核通过状态还是驳回状态,亦或者是待审核状态,如图5-8所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KkkcGGju-1587047422092)(media/88b9da4cbf7556952139a1f4e828b1ce.png)]

图5-8 审核公司信息

文章信息模块实现

文章与图片设计

文章信息维护

管理员可以对新闻的文章内容进行编辑,如图5-9所示。新闻字段有:编号、文章标题、更新时间、文章内容。在新闻内容文本框中输入想要更新的新闻内容,点击提交按钮,即可完成更新。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CqtDQUXS-1587047422092)(media/88a20191321a7e1b6a2cd5d74e3837a6.png)]

图5-9 文章信息维护

图片上传实现

图片信息维护

管理员可以对图片信息维护。点击系统new管理模块,选择要上传的图片文件,点击确定按钮,完成上传。如图5-10所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jUg1lyA5-1587047422093)(media/a3156ea3f18f6a96ae6debdb171c984a.png)]

图5-10 图片信息维护

系统测试

系统测试的目的

软件测试的目的就是发现软件的缺陷,但是我在完成集群注册平台系统的时候,也加入了自己的思索。个人觉得软件发展的今天,测试不仅仅是发现、还有预防,降低风险等多个目的。准确的说,作为测试人员,必然没有办法提高产品质量,不过就是给产品质量给出准确的评估。

系统测试的方法

主要采用恢复测试,安全测试,压力测试,白盒测试,黑盒测试,性能测试对集群注册平台系统项目进行测试。各种测试方法的本质区别在于,关注的焦点不同。详细阐述如下:

1.恢复测试

关注导致软件错误的各种情况,并检查恢复过程是否可以正确执行。

2.安全测试

安全测试是指检查系统的内部保护机制以防止入侵。在安全测试中,测试者试图扮演入侵系统的角色。因此,系统安全设计的标准是增加尝试渗透系统的成本。

3.压力测试

压力测试旨在测试性能,可靠性,稳定性以及在使用系统时长期测试的其他系统。此测试的目的不是发现系统错误,而是消除系统性能瓶颈。

系统测试用例

系统测试用例是进行项目测试的输入数据的统称。测试时,主要分析相关测试用例的结果与我们预期的测试结果是否一致。

1.选取用户这一角色,测试其登录情况,测试用例具体如表5-1所示。

表5-1 登录模块用例

测试数据 数据名称 数据值 数据名称 数据值
登录成功数据 用户名 liyunfeng 密码 123456
登录失败数据 用户名 liyong 密码 888888

2.用户管理的主要操作为增加、检索、删除、编辑,测试用例如下。

(1)增加用户过程

数据名称:用户名,数据值:liyunfeng;数据名称:密码,数据值:123456。

(2)检索用户过程

数据名称:姓名,数据值:liyunfeng;数据名称:邮箱,数据值:[email protected];数据名称:姓名,数据值:空;数据名称:邮箱,数据值:空;

3.新闻内容管理的主要操作为编辑新闻内容,修改系统官网展示的新闻信息。测试用例如下。

编辑新闻内容

数据名称:新闻内容,数据值:律师行业税务解决方案,数据名称:新闻编号,数据值:1,数据名称:新闻标题,数据值:律师行业税务解决方案,数据名称:创建人,数据值:李云峰,数据名称:更新人,数据值:李云峰。

系统测试结果

1.用户登录模块测试的结果如表5-2所示。

表5-2 登录测试结果

测试项目 测试数据 预期测试结果
用户登录成功 用户名:liyunfeng, 密 码:123456。 登录成功,进入系统
用户登录失败 用户名:liyunfeng, 密 码:888888。 登录失败,提示错误信息

用户登录失败如图5-11所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IOL2GJGS-1587047422094)(media/56d1453e4a6e9f1edb141d7fd56e0ca3.png)]

图5-11 用户登录失败

2.用户管理测试结果

(1)增加用户过程测试结果如图5-12所示。这个操作中有一次增加操作,即为用户信息增加。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yX4ShFAp-1587047422094)(media/38c7ff21e33ac9d1af6e4e81e7d1afd4.png)]

图5-12 增加用户过程

增加成功如图5-13所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uyNDvZBI-1587047422095)(media/da66f913eabb05026d8e9f7fec2971e8.png)]

图5-13 增加用户成功

(2)查询用户信息测试结果如图5-14所示。通过用户名“李云峰”与邮箱“[email protected]”检索,点击“查询”按钮,返回结果。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SAecfZhI-1587047422095)(media/6564adced5b67521398c1cf4efb630e9.png)]

图5-14 查询用户信息

3.新闻内容管理测试结果

(1)管理员登录到后台,修改新闻管理模块中新闻内容测试的结果如图5-15所示,编辑“新闻内容”,点击“提交”按钮,完成新闻内容的更新。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3qzmI541-1587047422096)(media/f91e45112152e44ca6a91db22610a65d.png)]

图5-15修改新闻内容

官网展示新闻内容如图5-16所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OYiC7Ip9-1587047422096)(media/7aebaf61393ab988fba1f132983434b7.png)]

图5-16 首页新闻展示内容

(2)点击“返回”按钮,则返回上一级菜单。

(3)审核有限公司如图5-17所示,如果信息无误,审核通过,否则执行驳回操作,可完成公司审核。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kaDhNji4-1587047422097)(media/10ff7d422e1d25f96b1aa4a43fae7db7.png)]

图5-17 审核有限公司

有限公司审核通过如图5-18所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P1DpAcmB-1587047422098)(media/459f3bfe0ea8b00b25f105462945fba6.png)]

图5-18 审核通过

(4)点击“返回”则返回公司管理主界面不做任何操作。

(5)图片管理测试结果如图5-19所示,选择要提交的首页banner图片,点击“提交”按钮,完成系统banner图片上传。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0CXOYpCY-1587047422098)(media/10e4b769539e7cdefa6f5383c2854745.png)]

图5-19 图片上传表

修改后的首页图片展示如图5-20所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bWTwJz0p-1587047422099)(media/588809eea640d47ce2bff3be4273b259.png)]

图5-20 修改后首页图片显示表

(6)点击“返回”按钮,则返回图片管理主界面不做任何操作。

(7)后台审核个人独资公司如图5-21所示,如果信息无误,可完成公司审核。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W9H37r8G-1587047422100)(media/17a6afa00d2294d0ef2647488366b9d5.png)]

图5-21 个人独资公司信息

个人独资公司审核通过如图5-22所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LkxdfQkQ-1587047422100)(media/120742c87f1a849f81b118afad014a2f.png)]

图5-22 审核个人独资公司

用户前台查询到的审核状态如图5-23所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uM1W90ab-1587047422101)(media/70a728214e3dba1b0a778af020df1a2f.png)]

图5-23 用户前台查询审核状态

(8)联系我们页面测试结果如图5-24所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U7yzflRF-1587047422102)(media/2fd9697d6b4a37a0365c4574916d9258.png)]

图5-24 联系我们

(9)修改密码页面测试结果如图5-25所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4UKDI7Fw-1587047422102)(media/79d151b6c11017b23d3b63da2d9044f7.png)]

图5-25 修改密码

(10)找回密码页面测试结果如图5-26所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3AYn21Un-1587047422103)(media/6c2ac18faf1dce4713c7d62ceec88e9d.png)]

图5-26 找回密码

4.把集群注册系统项目发布到腾讯云后,使用43个账号并发操作,因项目代码对于高并发处理得当,在高并发场景下不会出现问题。

本章小结

本章详细阐述了集群注册系统的模块。通过首页与联系我们模块,商业注册流程和业务控制模块,文章信息模块,文章和图像管理员后台维护模块等几个模块来说明。上手系统更加容易。

在本章中,我们对系统进行了完整测试。测试方法用到了黑盒白盒测试,首先测试系统工商注册的流程是否能够走通,接下来测试前后台交互的过程。举例说明,管理员新增用户,前台测试能否登录。管理员在后台进行图片或文章等信息的维护,检查官网上的信息是否发生了更新。

结论

项目开发集群注册平台系统,帮助人们解决了当今社会很多的痛点问题。其中以工商注册、公司在线办理业务,由传统的线下办理到如今的线上办理,这个需求越来越受到人们的重视。从原来的线下来回跑到如今的只需要动动鼠标,就可以解决耗时耗力可能也解决不了的问题。

集群注册平台系统主要功能:在后台对用户信息进行维护、管理员维护主页上显示的新闻信息,管理员维护官方网站上显示的图片信息,管理员检查公司信息;用户登录,用户注册,检索密码以及更改密码;有限责任公司的在线注册,独资企业的在线注册,合伙企业的在线注册。集群注册平台系统的优点:省时省力、可扩展、方便、界面美观、容易操作、可推广性高等等优点。

集群注册平台系统的开发的目的,主要是解决将公司线下注册的流程在集群注册平台系统中得以实现、提高效率。本文就公司注册在集群注册系统中的实践进行了一些研究,证明了其经济可行性、理论可行性,未来前景一片大好,因此开发了集群注册平台系统。以后还会增加接入微信扫码支付、身份证的图像识别功能、即时通讯功能等,这些功能的增加将会使集群注册平台系统更加完整。

致谢

这篇论文到此就创作完成了,在这里非常感谢老师、父母、以及同学的关心指导。在他们的帮助下,解决了我在完成集群注册平台系统中遇到的问题,顺利的完成了论文的创作。

尤其是要非常感谢我的导师王春英老师,热情、认真负责。细心地检查我的论文,从论文结构、内容、图的编号、字体样式大小等多个方面进行指导,无微不至。老师对待工作认真负责的态度深深的影响到了我,将来还会向王春英老师学习,做一个优秀的人。

在即将毕业的时候,我的心情非常激动。从集群注册平台系统课题的研究到项目的实现以及最后论文的完成,这期间经历了太多太多,也接受了太多人无私的帮助。这里,统一表达最真挚的谢意!最后感谢养育我长达成人的父母,谢谢你们!

参考文献

  1. Bruce Joyce.教学模式[M].第八版.北京:中国人民大学出版社,2014:5-9.

  2. 陈平.信息技术导论[M].北京:清华大学出版社,2011:3-5.

  3. 刘强,邓晓衡.高校毕业设计管理平台的设计与实现[J].企业科技与发展,2016,(11):37-39.

  4. 李运平,吴素芹,刘艳华.基于Web的毕业设计管理系统设计与实现[J].软件导刊,2016,(11):123-125.

  5. 陈荔.本科毕业论文(设计)质量控制与提升研究[J].昭通学院学报,2016,(05):100-104.

  6. 杨帆.本科毕业设计教学模式创新研究[J].计算机教育,2010,(07):74-77.

  7. Karthik Sadasivam,Banuprasad Samudrala,T. Andrew Yang. Design of Network
    Security Projects Using Honeypots[J]. Journal of Computing Sciences in
    Colleges,2005,20(4):282 -293

  8. lan Sommerville.软件工程[M].第九版.北京:机械工业出版社,2011:3-34.

  9. Abraham
    Silberschatz.数据库系统概念
    [M].北京:机械工业出版社,2014:22-30.

  10. Jesse James
    Garrett.用户体验要素[M].第二版.北京:机械工业出版社,2016:15-31.

  11. 赵俊昌.精通JS脚本之ExtJS框架[M].第二版.北京:清华大学出版社,2011:4-20.

  12. ZHANG Z Y,WANG Y F. Research the query optimization of distributed
    heterogeneous database based on hibernate [J]. IEEE ICACTE, 2010, V6579-581.

  13. MichaelBlaha.UML面向对象建模与设计[M].第二版.北京:人民邮电出版社,2011:21-25.

  14. Thomas M.Database Solutions[M].Addison Wesley,2004:4-16.

  15. 刘晓华.JSP 应用开发详解[M].第二版.北京:电子工业出版社,2000:5-36.

附录

英文原文

Servlet and Reactive Stacks in Spring Framework5

Spring Framework 5 provides a choice of two web stacks, Servlet and Reactive,
available side by side. This reflects a big, general shift towards asynchronous,
non-blocking concurrency in applications. The goal of this article is to provide
some context, explain the range of available choices, and  provide guidance for
choosing between these stacks.

For the remainder of this article I will use the “servlet stack” and the
“reactive stack” as shorthand for the two web stacks supported in Spring
Framework 5, that applications can use through the Spring MVC
(spring-webmvc module) and the Spring WebFlux (spring-webflux module) web
frameworks.

By now you’ve heard “reactive” from many different angles, and it has become
quite a buzzword. Nevertheless there is a real trend behind it, a story of
growing asynchronicity, starting from the early days of servlet containers when
applications were relatively simple and self-contained, to the present day where
asynchronicity hides in just about every corner. How well equipped are we to
deal with all of this asynchronicity?

Traditionally, Java used thread pools for the concurrent execution of blocking,
I/O bound operations (e.g. making remote calls). This seems simple on the
surface, but it can be deceptively complex for two reasons: one, it’s hard to
make applications work correctly when you’re wrestling with synchronization and
shared structures. Two, it’s hard to scale efficiently when every blocking
operation requires an extra thread to just sit around and wait, and you’re at
the mercy of latency outside your control (e.g. slow remote clients and
services).

Not surprisingly, various solutions have evolved, (such as coroutines, actors,
etc.), to relegate the concurrency to the framework or language. There is now a
proposal in Java for a lightweight thread model called Project
Loom, but it
will be years before we see this in production. What can we do today to better
deal with asynchronicity?

A common misconception, especially among Java developers, is that scale requires
a lot of threads. While this may be true with paradigms like imperative
programming and blocking I/O, it is not true in general. If an application is
fully non-blocking it can scale with a small, fixed number of threads. Node.js
is proof you can scale with a single thread only. In Java we don’t have to be
limited to one thread so we can fire enough threads to keep all cores busy. Yet
the principle remains-- we don’t rely on extra threads for higher concurrency.

How do we make our applications non-blocking? First and foremost, we must
forfeit the traditional sequential logic associated with imperative programming,
in favor of asynchronous APIs, and we must learn to react to events they
generate. Of course, working with asynchronous callbacks can become unwieldy
very quickly. For a better model we can look to the CompletableFuture introduced
in Java 8, which gave us a continuation-style fluent API, where logic is
declared in sequential steps rather than in nested callbacks:

This is a better model but supports only a single value. What about handling
asynchronous sequences? The Java 8 Stream API provides functional-style
operations on streams of elements, but that’s built for collections, where a
consumer pulls available data, and not for “live” streams where the producer
pushes elements, with potential latency in between.

This is where reactive libraries such as RxJava, Reactor, Akka Streams, and
others come in. They look like Java 8 Streams, but are designed for asynchronous
sequences and add Reactive Streams back
pressure, to give consumers control over the publisher’s rate.

The switch from imperative to a functional, declarative style does not feel
“natural” at first and takes time to adjust. The same is true for many other
things in life, for example learning to ride a bicycle or a new language. Don’t
let that stop you. It does get easier and brings great benefits.

The imperative to declarative transition can be compared to rewriting explicit
loops with the Java 8 Stream API, with similar benefits. The Java 8 Stream API
lets you declare “what” should be done, not “how”, rendering your code more
readable. Similarly in reactive libraries, you declare what should be done, not
how to deal with concurrency, threads, and synchronization, and so code scales
more efficiently using fewer hardware resources.

Last but not least, an additional motivation for change is the lambda syntax in
Java 8, which is crucial for the adoption of functional, declarative APIs and
reactive libraries, while allowing us to imagine new programming models. Much
like annotations let us build annotated REST endpoints, the lambda syntax in
Java 8 let us build functional-style routings and request handlers.

The Spring Framework is not the first in the async, non-blocking web space. But
it brings the perspective of Java enterprise applications and choice at all
levels. Choice matters because not all existing applications can change and
because not every application needs to change. Choice, and also consistency and
continuity, come in handy with microservice architecture where independent
decisions can be made by application.

For a long time the Servlet API was the de facto standard for server
independence. Over time however, alternatives have appeared, and projects
seeking the efficient scale of event loop concurrency and non-blocking I/O have
already looked beyond the Servlet API and servlet containers.

To be sure, Tomcat and Jetty have evolved greatly over the years to become more
efficient under the hood. What hasn’t changed as much in 20 years is the way
they’re used through the Servlet API with blocking I/O. Non-blocking I/O was
introduced in Servlet API 3.1 but has not been adopted because it requires deep
change, replacing core, web framework and application contracts built around
blocking I/O. In practice this has meant choosing between the Servlet API with
blocking I/O, or alternative asynchronous runtimes such as Netty that don’t
depend on the Servlet API.

The reactive stack in Spring Framework 5 defers that decision, allowing you to
have your blocking and your reactive too. Spring WebFlux applications can run on
servlet containers, or adapt to other native server APIs. In Spring Boot 2 the
WebFlux starter uses Netty by default, but you can easily change to Tomcat or
Jetty in a few lines of configuration. The reactive stack restores a degree of
choice that was once possible only through the Servlet API.

The Spring MVC annotation based programming model, familiar to many, is
supported on both a servlet stack (Spring MVC) and on a reactive stack (Spring
WebFlux). That means you can choose between blocking and non-blocking, event
loop concurrency, but keep the web framework programming model.

Use of reactive clients enables applications to compose remote service calls
efficiently, and concurrently, and yet without explicitly dealing with threads.
The benefits are greatly amplified on the server side, with high concurrency.

The use of reactive clients is not limited to just the reactive stack or Spring
WebFlux. The code below is also supported on the servlet stack and it shows that
a Spring MVC controller can handle requests and render the response through
reactive types:

In the above sample, the controller uses the reactive, non-blocking WebClient to
fetch cars from one remote service, then attempts to book one of them through a
second remote service, and finally returns a response to the client. Note the
ease and expressiveness with which we can declare asynchronous remote calls and
have them executed concurrently (event loop style) without having to deal with
threads and synchronization.

One advantage of the annotation programming model is flexible controller method
signatures. Applications can choose from a wide range of supported method
arguments and return values, and the framework adapts to the preferred usage
style. This makes it easy to support multiple reactive libraries.

On both the servlet and reactive stacks, the use of Reactor or RxJava types is
supported in controller method signatures. This is configurable, so other
reactive libraries can be plugged in as well.

In addition to expressing controller logic through annotated controllers, which
is a common choice among Java web frameworks, Spring WebFlux also supports a
lambda-based, lightweight, functional programming model for routing and handling
requests.

Functional endpoints are very different from annotated controllers. When you use
annotations, you describe to the framework what should be done and let it do as
much work as it can on your behalf – remember the Hollywood principle “don’t
call us, we’ll call you”? By contrast, the functional programming model consists
of a small set of helper utilities available to the application to drive request
processing from start to finish. A short snippet of routing and handling a
request would look something like the following:

The servlet stack is a classic servlet container and Servlet API, with Spring
MVC as the web framework. In the beginning the Servlet API was built on a
“thread-per-request” model, i.e. making a full pass through the filter-servlet
chain on a single thread, blocking along the way as needed. Over time extra
options were added to adapt to the changing needs and expectations of web
applications:

The Async Servlet feature in 3.0 made it possible to leave the response open for
further processing after a full pass through the filter-servlet chain. Spring
MVC builds extensively on this feature and it’s what makes reactive return value
types in annotated controllers possible.

Unfortunately, the non-blocking I/O features in 3.1 cannot be integrated into
existing web framework contracts built around imperative, blocking semantics.
That is why it is not supported in Spring MVC, and instead Spring WebFlux was
created on a new foundation of non-blocking web framework contracts that support
both the Servlet API and other servers.

The reactive stack can run with Tomcat, Jetty, Servlet 3.1 containers, Netty,
and Undertow. Each server is adopted to a common Reactive Streams API for HTTP
request handling. On top of that foundation is a slightly higher level, but
still general purpose WebHandler API, comparable to the Servlet API but with
asynchronous, non-blocking contracts.

Note that although Tomcat and Jetty are supported on both sides, they’re used
through different APIs in each. On the servlet stack they’re used through the
Servlet API with blocking I/O. On the reactive stack they’re used through
Servlet 3.1 non-blocking I/O without ever exposing the Servlet API – many parts
of which remain blocking and synchronous (e.g. request parameters, multipart
requests, etc), for application use.

On the servlet stack, applications are allowed to block. That is why servlet
containers use a large thread pool to absorb potential blocking in the
application. This assumption is reflected in the Filter and Servlet contracts,
both of which are imperative and return void, as well as in the blocking
InputStream and OutputStream.

中文译文

Spring框架中的servlet和反应栈

1.引言

Spring框架5提供了两个Web栈的选择,Servlet和Reallet,并排可用。这反映了应用程序中异步、非阻塞并发的一个大的、一般的转变。本文的目的是提供一些上下文,解释可用选择的范围,以及为这些堆栈之间的选择提供指导。

对于本文的其余部分,我将使用“servlet堆栈”和“反应堆栈”作为Spring框架5中支持的两个Web栈的简写,应用程序可以通过Spring
MVC(Spring WebMVC模块)和Spring WebFLASH(Spring
WebFramework模块)Web框架来使用。

到现在为止,你已经从许多不同的角度听到了“反应”,它已经成为了一个流行词。尽管如此,有一个真正的趋势,它是一个异步增长的故事,从servlet容器的早期开始,当应用程序相对简单和独立的时候,到现在异步性隐藏在每一个角落。我们有多好的装备来应对这些异步性?

传统上,使用java线程池阻塞并行执行,I/O绑定操作(如远程调用)。这在表面上看起来很简单,但它可能具有欺骗性复杂的原因有两个:一,当你与同步和共享结构摔跤时,很难使应用程序正确工作。第二,当每一个阻塞操作需要额外的线程来围坐和等待时,很难有效地缩放,而你只能控制你的控制之外的延迟(例如慢的远程客户端和服务)。
毫不奇怪,各种解决方案已经发展,(如协同程序,演员等),以降低并发到框架或语言。现在有一个建议,一个轻量级的java线程模型称为 项目织机,但这将是几年前我们看到这个生产。我们今天能做些什么来更好地处理异步性呢?

一个常见的误解,特别是在java开发人员,是规模需要大量的线程。虽然这可能是真实的范式,如命令编程和阻塞I/O,它一般不是真的。如果一个应用程序完全不阻塞,它可以用一个小的固定数量的线程来缩放。No.js证明你只能用一个线程来缩放。在java中我们不必局限于一个线程,所以我们可以发射足够的线程保持所有核心忙。然而,原则仍然存在,我们不依赖额外的线程来实现更高并发性。

如何使我们的应用程序不阻塞?首先,我们必须放弃与命令式编程相关联的传统时序逻辑,而不是异步API,并且我们必须学会对它们生成的事件作出反应。当然,使用异步回调可以很快变得笨拙。一个更好的模型,我们可以看到completablefuture介绍java
8,这给了我们一个延续风格流畅的API,在逻辑顺序的步骤,而不是嵌套回调宣布:

这是一个更好的模型,但只支持一个值。处理异步序列怎么样?java
8流API提供的功能型业务流上的元素,但那是专为收藏,消费者将可用的数据,而不是“活”的溪流里,生产者推动的元素,与潜伏期之间。

这是RXJava、反应器、AKKA流等反应库出现的地方。他们看起来像java
8流,但被用于异步序列并添加 反应流 回压,给消费者在出版商的速率控制。

从祈使语气到功能性陈述语气的转换起初并不觉得“自然”,需要时间来调整。生活中的许多其他事情也是如此,例如学习骑自行车或新语言。不要让这阻止你。它会变得更容易,带来巨大的利益。

陈述性转型势在必行相比可以重写显环与java 8流API,类似的好处。java
8流API允许你声明“什么”应该做的,不是“如何”,使你的代码更具可读性。类似地,在反应库中,您声明应该做什么,而不是如何处理并发、线程和同步,因此代码使用较少的硬件资源更有效地缩放。

最后但并非最不重要的,对于变化的另外一个动机是java
8λ的语法,这是功能性的采用至关重要,声明的API和反应库,同时让我们想象新的编程模型。就像注释注释休息让我们建立端点,在java
8λ的语法让我们建设功能的风格路线和请求处理程序。

Spring框架不是异步、非阻塞Web空间中的第一个。但它将各级java企业应用和选择的视角。选择很重要,因为并不是所有现有的应用程序都可以改变,也不是因为所有的应用程序都需要改变。选择,以及一致性和连续性,在微服务架构中是有用的,其中可以通过应用做出独立的决策。

长期以来,servlet
API实际上是服务器独立性的标准。然而,随着时间的推移,出现了替代方案,寻求事件循环并发和非阻塞I/O的有效规模的项目已经超出了servlet
API和servlet容器。

可以肯定的是,Tomcat和Jetty经过多年的发展,在引擎盖下变得更加高效。在20年中没有什么变化的是通过Servlet
API使用I/O阻塞的方式,在Servlet API
3.1中引入了非阻塞I/O,但是没有被采用,因为它需要深度更改,取代围绕I/O.构建的核心、Web框架和应用契约。在实践中,这意味着在servlet
API与阻塞I/O之间进行选择,或者选择不依赖servlet API的NETY等异步异步运行时。

在Spring Framework 5中的反应堆栈推迟了这个决定,允许你也有你的阻塞和反应。Spring
WebFrand应用程序可以在Servlet容器上运行,或者适用于其他本地服务器API。在Spring
Bug
2中,WebFrutter启动器默认使用NETY,但您可以在几行配置中轻松地更改为Tomcat或JETTY。反应栈通过一个servlet
API恢复一次可能选择的程度。

对许多熟悉的Spring MVC注释编程模型在servlet栈(Spring MVC)和反应堆栈(Spring
WebFrand)上都支持。这意味着您可以在阻塞和非阻塞、事件循环并发之间进行选择,但保持Web框架编程模型。使用反应式客户端可以在不处理与线程相关代码的情况下,更有效地调度对远程服务的调用。这对于服务器端的并发性能来说无疑有巨大的好处。

使用反应式客户端使应用程序能够高效、并发地、而不显式地处理线程来编写远程服务调用。这些好处在服务器端被大大放大,并发性很强。
反应客户端的使用不仅限于反应堆栈或弹簧WebFLUTE。下面的代码也支持servlet堆栈,它表明Spring
MVC控制器可以处理请求并通过反应类型呈现响应:

在上面的示例中,控制器使用被动的、非阻塞的WebClient来从一个远程服务中获取汽车,然后试图通过第二远程服务来预订其中一个,并最终返回对客户端的响应。请注意,我们可以声明异步远程调用并使它们同时执行(事件循环样式),而不必处理线程和同步。

注释编程模型的一个优点是灵活的控制器方法签名。应用程序可以从广泛支持的方法参数和返回值中选择,并且框架适应于首选的使用方式。这使得很容易支持多个反应库。

在servlet和反应堆栈上,在控制器方法签名中支持使用电抗器或RxJava类型。这是可配置的,所以也可以插入其他反应库。

除了通过注释表达控制器逻辑控制器,这是java
web框架之间的共同选择,泉流量也支持基于lambda,轻巧、路由和处理请求的函数式编程模型。

功能端点与注释的控制器非常不同。当你使用注解的时候,你会告诉框架应该做些什么,让它尽可能多地为你所做的工作——记住好莱坞的原则“不要打电话给我们,我们会打电话给你”。相比之下,函数编程模型由一小部分辅助程序提供给应用程序,以驱动从开始到结束的请求处理。路由和处理请求的短片段看起来如下:

Servlet栈是一个经典的servlet容器和servlet API,以Spring
MVC为Web框架。开始时,Servlet
API建立在一个“每个请求线程”模型上,即在一个线程上通过一个过滤器servlet链,根据需要阻塞一条路。随着时间的推移,额外的选项被添加以适应Web应用程序不断变化的需求和期望:

3中的异步Servlet特性使得在完全通过过滤器servlet链之后,可以为进一步的处理留下响应打开。Spring
MVC广泛地构建在这个特性上,这使得注释控制器中的无功返回值类型成为可能。

不幸的是,3.1中的非阻塞I/O特性不能集成到现有的围绕强制、阻塞语义的Web框架契约中。这就是为什么在Spring
MVC中不支持它的原因,而是Spring WebFLUX是在支持Servlet
API和其他服务器的非阻塞Web框架契约的基础上创建的。

反应堆栈可以与Tomcat、JETY、Servlet
3.1容器、NETY和UntToW一起运行。每个服务器都采用一个用于HTTP请求处理的通用反应流API。在这个基础之上,是一个稍微高一点但仍然通用的WebHandler
API,它与servlet API相比,但是具有异步、非阻塞的契约。

请注意,尽管Tomcat和Jetty在两侧都支持,但它们各自通过不同的API使用。在servlet堆栈中,它们通过Servlet
API使用I/O阻塞,在反应堆栈上,它们通过servlet 3.1使用非阻塞I/O,而不暴露Servlet
API——其中许多部分保持阻塞和同步(例如请求参数、多部分请求等),F或应用程序使用。

服务调用。这些好处在服务器端被大大放大,并发性很强。
反应客户端的使用不仅限于反应堆栈或弹簧WebFLUTE。下面的代码也支持servlet堆栈,它表明Spring
MVC控制器可以处理请求并通过反应类型呈现响应:

在上面的示例中,控制器使用被动的、非阻塞的WebClient来从一个远程服务中获取汽车,然后试图通过第二远程服务来预订其中一个,并最终返回对客户端的响应。请注意,我们可以声明异步远程调用并使它们同时执行(事件循环样式),而不必处理线程和同步。

注释编程模型的一个优点是灵活的控制器方法签名。应用程序可以从广泛支持的方法参数和返回值中选择,并且框架适应于首选的使用方式。这使得很容易支持多个反应库。

在servlet和反应堆栈上,在控制器方法签名中支持使用电抗器或RxJava类型。这是可配置的,所以也可以插入其他反应库。

除了通过注释表达控制器逻辑控制器,这是java
web框架之间的共同选择,泉流量也支持基于lambda,轻巧、路由和处理请求的函数式编程模型。

功能端点与注释的控制器非常不同。当你使用注解的时候,你会告诉框架应该做些什么,让它尽可能多地为你所做的工作——记住好莱坞的原则“不要打电话给我们,我们会打电话给你”。相比之下,函数编程模型由一小部分辅助程序提供给应用程序,以驱动从开始到结束的请求处理。路由和处理请求的短片段看起来如下:

Servlet栈是一个经典的servlet容器和servlet API,以Spring
MVC为Web框架。开始时,Servlet
API建立在一个“每个请求线程”模型上,即在一个线程上通过一个过滤器servlet链,根据需要阻塞一条路。随着时间的推移,额外的选项被添加以适应Web应用程序不断变化的需求和期望:

3中的异步Servlet特性使得在完全通过过滤器servlet链之后,可以为进一步的处理留下响应打开。Spring
MVC广泛地构建在这个特性上,这使得注释控制器中的无功返回值类型成为可能。

不幸的是,3.1中的非阻塞I/O特性不能集成到现有的围绕强制、阻塞语义的Web框架契约中。这就是为什么在Spring
MVC中不支持它的原因,而是Spring WebFLUX是在支持Servlet
API和其他服务器的非阻塞Web框架契约的基础上创建的。

反应堆栈可以与Tomcat、JETY、Servlet
3.1容器、NETY和UntToW一起运行。每个服务器都采用一个用于HTTP请求处理的通用反应流API。在这个基础之上,是一个稍微高一点但仍然通用的WebHandler
API,它与servlet API相比,但是具有异步、非阻塞的契约。

请注意,尽管Tomcat和Jetty在两侧都支持,但它们各自通过不同的API使用。在servlet堆栈中,它们通过Servlet
API使用I/O阻塞,在反应堆栈上,它们通过servlet 3.1使用非阻塞I/O,而不暴露Servlet
API——其中许多部分保持阻塞和同步(例如请求参数、多部分请求等),F或应用程序使用。

在servlet堆栈上,应用程序可以被阻止。这就是为什么servlet容器使用大线程池来吸收应用程序中的潜在阻塞的原因。这一假设反映在过滤器和servlet契约中,这两个契约都是强制的和返回的无效的,以及在阻塞输入流和输出流中。

你可能感兴趣的:(毕业论文)