论文正文思路和素材

目录

1 研究背景
1.1 企业信息化背景
2 需求分析
2.1 需求背景
2.2 需求分析
2.3 具体功能
3 系统环境部署
3.1 环境选择和基本搭建
3.1.1 硬件层面
3.1.2 软件层面
3.2 客户端的要求
4 框架前沿技术概述
4.1 后端框架
4.1.1 Spring Boot 1.5.10
4.1.2 Spring Boot Starter Web
4.1.3 Spring Boot Admin
4.1.3 Mybatis
4.1.4 Gradle
4.1.5 Redis
4.1.6 MySql
4.1.7 Shiro
4.2 前端框架
4.2.1 Amaze UI
4.2.2 Vue.js
5 数据库设计
5.1 MySql数据库表结构
5.1.1 数据表关系图
5.1.2 数据字典
5.2 Redis数据结构
6 功能模块实现
6.1 用户登陆模块
6.1.1 前端页面
6.1.2 后端主要逻辑和代码
6.1.3 用户权限及角色分配
6.2 公共模块
6.2.1 天气小插件
6.2.2 未读的站内信及公告提醒和预览
6.2.3 护眼模式小开关
6.2.4 退出登录按钮
6.3 首页模块
6.3.1 工具箱的实现
6.4 人员管理模块
6.4.1 新增员工
6.4.2 查看详情
6.4.3 删除
6.4.4 重置密码
6.4.5 设为最佳员工
6.4.6 自动分页
6.5 个人信息模块
6.5.1 个人详情
6.5.2 修改密码
6.6 日程表模块
6.7 系统监控模块
6.8 系统日志模块
6.8.1 生成日志
6.8.2 读取日志
6.8.3 显示日志
6.9 站内信模块
6.9.2 发件箱
6.9.1 收件箱
7 模拟上线及测试
7.1 发布到线上测试服务器
7.2 调试过程
8 总结致谢
9 参考文献

 



4 框架前沿技术概述
4.1 后端框架
4.1.1 Spring Boot 1.5.10

图4.1 Spring Boot 流程图
Spring Boot是这次开的最为核心的框架,他的角色相当于是一架航母,可以承载、协调、配置、打包其他流行框架,并且会有一大批特别为他定制的软件和定制版框架。可以说Sptring Boot的诞生,解决了软件开发框架协作配置的一大难题。
Spring Boot使开发独立的,产品级别的基于Spring的应用变得非常简单,只需"just run"。 Spring平台及第三方库提供开箱即用的设置,这样就可以有条不紊地开始。多数Spring Boot应用需要很少的Spring配置。

4.1.2 Spring Boot Starter Web
Spring Boot Starter Web是Spring Boot内置的高度集成过的全栈式Web开发框架,其中已经包含了Tomcat、Spring-MVC和Thymeleaf,Spring MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将Web进行职责解耦,基于请求驱动指的就是使用请求—响应模型,使用Spring MVC可以大幅简化Web日常开发。
而Thymeleaf是现代化服务器端的Java模板引擎。简单说, Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 JSP 。Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。这是由于它支持 html 原型,然后在 html 标签里增加额外的属性来达到模板+数据的展示方式。浏览器解释 html 时会忽略未定义的标签属性,所以 thymeleaf 的模板可以静态地运行;当有数据返回到页面时,Thymeleaf 标签会动态地替换掉静态内容,使页面动态显示。
Thymeleaf 开箱即用的特性。它提供标准和spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果,避免每天套模板、该jstl、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言。
Thymeleaf 提供spring标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能。

4.1.3 Spring Boot Admin

图4.2 Spring Boot Admin LOGO
Spring Boot Actuator 可以监控应用的各种信息, 唯一的缺点就是返回的监控信息是JSON格式的数据,还有一点就是在微服务架构下,服务的实例会很多,一个个去看监控信息这似乎有点不太可能,而且这么多地址信息也只能去Eureka中去找,有没有一个功能能够集中的管理Eureka中的服务信息,并且可以通过界面的方式查看actuator 提供的监控信息,它就是Spring Boot Admin。

4.1.3 Mybatis
MyBatis是一个开源持久化框架,用于简化持久层的实现。Mybatis可以减少很多JDBC相关的模板样式代码,还提供了方便使用的数据库API。简洁的设计和易用性使得MaBatis在J2EE开发中很快流行起来。在Java应用中,持久层的工作包括:将SQL语句从数据库中查询出的数据填充进Java对象中、使用SQL语句将Java对象中的数据保存进数据库。MyBatis提供了下列特性来简化SQL查询:(1)抽象底层的JDBC代码;(2)自动将SQL查询的结果集保存进对应的Java对象;(3)从Java对象中提取数据并存入数据库中对应的表。
MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。(1)加载配置并初始化触发条件:加载配置文件处理过程:将SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。(2)接收调用请求触发条件:调用Mybatis提供的API传入参数:为SQL的ID和传入参数对象处理过程:将请求传递给下层的请求处理层进行处理。(3)处理操作请求触发条件:API接口层传递请求过来传入参数:为SQL的ID和传入参数对象处理过程:(A)根据SQL的ID查找对应的MappedStatement对象。(B)根据传入参数对象解析MappedStatement对象,得到最终要执行的SQL和执行传入参数。(C)获取数据库连接,根据得到的最终SQL语句和执行传入参数到数据库执行,并得到执行结果。(D)根据MappedStatement对象中的结果映射配置对得到的执行结果进行转换处理,并得到最终的处理结果。(E)释放连接资源。(4)返回处理结果将最终的处理结果返回。

4.1.4 Gradle
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的XML。当前其支持的语言限于Java、Groovy和Scala,计划未来将支持更多的语言。
任何一个 Gradle 构建都是由一个或多个 projects 组成。每个 project 包括许多可构建组成部分。 这完全取决于你要构建些什么。举个例子,每个 project 或许是一个 jar 包或者一个 web 应用,它也可以是一个由许多其他项目中产生的 jar 构成的 zip 压缩包。一个 project 不必描述它只能进行构建操作。它也可以部署你的应用或搭建你的环境。不要担心它像听上去的那样庞大。 Gradle 的 build-by-convention 可以让您来具体定义一个 project 到底该做什么。每个 project 都由多个 tasks 组成。每个 task 都代表了构建执行过程中的一个原子性操作。如编译,打包,生成 javadoc,发布到某个仓库等操作。到目前为止,可以发现我们可以在一个 project 中定义一些简单任务,后续章节将会阐述多项目构建和多项目多任务的内容。

4.1.5 Redis

图4.3 Redis 流程图

通常,在系统中,我们会把数据交由数据库来存储,但传统的数据库增删查改的性能较差,且比较复杂。根据 80/20 法则,百分之八十的业务访问集中在百分之二十的数据上。是否可以有一个存在于物理内存中的数据中间层,来缓存一些常用的数据,解决传统数据库数据读写性能问题。常用的数据都存储在内存中,读写性能非常可观。这种思维在计算机中很常见,之前学习计算机系统的时候就有见过这张图:越往上层的存储设备,存储的速度就会更快。诸如,Redis, Memcache 是将可访问的数据存储在内存中,可见它们可以弥补传统数据库的不足。
Redis以内存作为数据存储介质,所以读写数据的效率极高,远远超过数据库。以设置和获取一个256字节字符串为例,它的读取速度可高达110000次/s,写速度高达81000次/s。LPUSH用来插入一个内容ID,作为关键字存储在列表头部。LTRIM用来限制列表中的项目数最多为5000。如果用户需要的检索的数据量超越这个缓存容量,这时才需要把请求发送到数据库。

4.1.6 MySql
由于企业管理系统并发量不会太大,即便是员工数过万的大型企业,同一时间操作同一张sql表的人数也仅可能在一百人左右。且本次的企业管理系统表结构相对简单,预计数据量不大。综合考量后确定使用MySql,其性能上足以胜任。MySql是一个关系型数据库管理系统,是MySqlAB(瑞典)开发,现在属于oracle公司,是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有的数据放在一个大仓库中,增加了速度并且提高了灵活性。
安全性是数据库永恒的话题,在MySQL 5.7中,有不少安全性相关的改进。包括:MySQL数据库初始化完成以后,会产生一个 root@localhost 用户,从MySQL 5.7开始,root用户的密码不再是空,而是随机产生一个密码,这也导致了用户安装5.7时发现的与5.6版本比较大的一个不同点MySQL官方已经删除了test数据库,默认安装完后是没有test数据库的,就算用户创建了test库,也可以对test库进行权限控制了MySQL 5.7版本提供了更为简单SSL安全访问配置,并且默认连接就采用SSL的加密方式可以为用户设置密码过期策略,一定时间以后,强制用户修改密码。
随着非结构化数据存储需求的持续增长,各种非结构化数据存储的数据库应运而生(如MongoDB)。从最新的数据库使用排行榜来看,MongoDB已经超过了PostgreSQL,其火热程度可见一斑。各大关系型数据库也不甘示弱,纷纷提供对JSON的支持,以应对非结构化数据库的挑战。MySQ MySQL对支持JSON的做法是,在server层提供了一堆便于操作JSON的函数,至于存储,就是简单地将JSON编码成BLOB,然后交由存储引擎层进行处理,也就是说,MySQL 5.7的JSON支持与存储引擎没有关系,MyISAM 存储引擎也支持JSON 格式。

MySQL支持JSON以后,总是避免不了拿来与MongoDB进行一些比较。但是,MySQL对JSON的支持,至少有两点能够完胜MongoDB。可以混合存储结构化数据和非结构化数据,同时拥有关系型数据库和非关系型数据库的优点能够提供完整的事务支持L数据库从5.7.8版本开始,也提供了对JSON的支持。

4.1.7 Shiro

图4.4 Apache Shiro 安全认证流程图
Apache Shiro 是一个强大易用的 Java 安全框架,提供了认证、授权、加密和会话管理等功能,对于任何一个应用程序,Shiro 都可以提供全面的安全管理服务。并且相对于其他安全框架,Shiro 要简单的多。本教程只介绍基本的 Shiro 使用,不会过多分析源码等,重在使用。
Apache Shiro 是 Java 的一个安全框架。目前,使用 Apache Shiro 的人越来越多,因为它相当简单,对比 Spring Security,可能没有 Spring Security 做的功能强大,但是在实际工作时可能并不需要那么复杂的东西,所以使用小而简单的 Shiro 就足够了。对于它俩到底哪个好,这个不必纠结,能更简单的解决项目问题就好了。Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在 JavaSE 环境,也可以用在 JavaEE 环境。Shiro 可以帮助我们完成:认证、授权、加密、会话管理、与 Web 集成、缓存等。这不就是我们想要的嘛,而且 Shiro 的 API 也是非常简单。
如图4.4所示,Authentication:身份认证 / 登录,验证用户是不是拥有相应的身份;Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限;Session Manager:会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通 JavaSE 环境的,也可以是如 Web 环境的;Cryptography:加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储;Web Support:Web 支持,可以非常容易的集成到 Web 环境;Caching:缓存,比如用户登录后,其用户信息、拥有的角色 / 权限不必每次去查,这样可以提高效率;Concurrency:shiro 支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去;Testing:提供测试支持;Run As:允许一个用户假装为另一个用户(如果他们允许)的身份进行访问;Remember Me:记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录了。

4.2 前端框架
4.2.1 Amaze UI

图4.5 Amaze UI LOGO
Amaze UI ,首个国人开发的HTML5开源跨屏前端框架,它以移动优先(Mobile first)为理念,从小屏逐步扩展到大屏,最终实现所有屏幕适配,适应移动互联潮流。相比国外框架,Amaze UI 关注中文排版,根据用户代理调整字体,实现更好的中文排版效果;兼顾国内主流浏览器及 App 内置浏览器兼容支持。
Amaze UI原生支持移动端,从小屏开始扩展,所以用Amaze UI开发的网站,原生就支持IPad和手机访问,当窄分辨率或者竖屏设备访问时,页面会自动缩放以及重新排版,自适应不同的设备。因此用户哪怕只用一个IPad都可以登陆系统正常办公。
使用Amaze UI开发效率极高,官方已经把大量的代码都集成了,开发者只需要去官网的API中选择自己需要的复制粘贴,再稍微的修改即可。

4.2.2 Vue.js

图4.6 Vue MVVN结构模型图
Vue是由华人打造的著名渐进式 JavaScript 框架,它是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。很多使用过vue的程序员这样评价它,“vue.js兼具angular.js和react.js的优点,并剔除了它们的缺点”。授予了这么高的评价的vue.js,也是开源世界华人的骄傲,因为它的作者是位中国人–尤雨溪(Evan You)。
Vue.js 是一个JavaScriptMVVM库,是一套构建用户界面的渐进式框架。它是以数据驱动和组件化的思想构建的,采用自底向上增量开发的设计。相比于Angular.js,Vue.js提供了更加简洁、更易于理解的API,使得我们能够快速地上手并使用Vue.js;同时比起 React + Redux 相对复杂的架构,Vue.js 更加轻量级也更加容易上手,是初创项目的首选前端框架。Vue 的核心库只关注视图层,它不仅易于上手,还便于与第三方库或既有项目整合。并且作者是华人的关系,Vue拥有着对华人开发者最友好的api文档和官方教程。

赠人玫瑰 手留余香
VUE 慕课去哪儿 课程笔记
彩虹猫 banner.txt for Spring Boot
立即登录, 发表评论.
没有帐号? 立即注册
0 条评论