基于SSM的博客系统设计与实现

摘要

随着科学技术的不断发展,互联网走进了越来越多人的家庭生活中,博客也逐渐成为越来越多人茶余饭后交流学习,分享经验的桥梁。在博客出现之前,传统的知识只能进行单方面的传播。继博客出现后,知识传播演变成了知识的分享与交流,发博者可以和读者在评论区针对问题互动。另外,分享博客涉及的范围也更广,各行各业,各种各样的类型都有涵盖。
本文介绍了SpringMVC,Spring,Mybatis框架,并整合这些框架来作为本博客系统的后端开发框架。设计的系统整体由两大部分组成,包括前台的博客浏览页面和系统后台管理两个部分。前台主要用于展示博客内容,评论等基本信息。后台有普通用户和管理员两种角色,普通用户只具备发布博客权限,管理员还有对博客标签修改,资料上传等更多权限。本文将详细介绍开发所用到的前后端框架,从需求分析,数据库设计到完整的项目开发完成过程。
关键词: SpringMVC,Spring,Mybatis,博客系统

第一章 前言

1.1 研究的目的与意义

随着社会的发展,互联网已经普及千家万户,越来越多的人会在网上冲浪,喜欢在互联网上记录自己的故事、照片、视频或分享自己的观点等,这就有了所谓的博客。可以看到越来越多的人热衷于写博客和阅览别人的博客,现实里不想说的话博客上说,现实中接触不到的知识博客上找,博客的作用越来越大。博客用一种特别的类似于广播式信息传播方式,带给人们一种全新的沟通方式[1]。搭建一个个人博客,在上面分享自己对生活的感悟,对知识的理解并进行讨论在我看来一直是一件很有意义的事。经过几十年的发展,现有的博客种类也愈发丰富,博客内容划分也更加细致,博客界面也设计得更加精美,用户能借此获得更好的体验。但是随之而来的一个很大的问题就是博客设计者越是在意花里胡哨的界面,用户想要获取自己需要的内容的过程就会更为复杂。所以当各大博客网站争相演变得越来越复杂的时候,用户想要检索到其想要的知识也变得更为艰难。与微信能在QQ风靡一时的时候依靠其简洁的界面和功能大受欢迎类似,本人想设计一个界面更为简洁,通过分类和标签能让用户快速直接地检索到其所需的博客网站,当然也可以通过关键字定位博客中的内容来检索博客。SSM框架具有不错的性能以及较为迅捷的开发速度,直到此时也还是比较主流的企业级应用开发框架组合,很多中型以及小型公司的门户网站、政府网站、金融项目等架构都是基于SSM构建开发的[2]。使用SSM框架来搭建博客系统使得各层次之间实现解耦合,且能让开发者更专注于业务逻辑。

1.2 研究的现状与趋势

1.2.1 国内研究现状与趋势

博客是自21世纪初才开始进入中国,进入国内市场的时间相对来说是有点晚。虽然它的发展速度很快,但也只是少数人了解使用。一直到了2004年网红木子美的娱乐新闻铺天盖地,博客上也有很多相关文章,用到博客来浏览这些信息的用户也越来越多。一年后,国内各大门户网站意识到了博客的发展前景,也加入了这一块资源的争夺,比如新浪微博、搜狐等。有了这些大咖的加入后博客的发展速度也是与日俱增。博客不再只是供社会精英使用,越来越多的学生,民众也加入了发表博客的队伍。时至今日,博客网站已经多不胜数,除了我们众所周知的新浪微博,腾讯微博,还有供国内程序员交流学习的博客圈CSDN、博客园等,而且越来越多的个体也加入到开发自己个人博客网站来供人浏览。随着互联网的高速发展以及对民众的普及,可以预见的是,博客的发展前景仍是一片光明。

1.2.2 国外研究现状与趋势

在国外博客的历史起源可以追究到万维网刚出现的时候,那时候万维网的发明者开设的第一个网站其实本质上就是一个博客网站,这个网站的作用就是列出在整个网络中已存在的所有网站信息。国外博客萌芽期在上世纪九十年代,2000年后开始博客也成为了在各专业领域上最具有统治力的知识传播模式中的一种。时至今日,博客网站也涉及各行各业,TechCrunch是知名和流行的科技媒体网站之一,也是知名的网络科技咨询博客网站。还有关注电子产品咨询的TechRadar,致力于视频游戏业务的Eurogamer(欧洲游戏网),也有全球最大的代码托管平台Github等。二十一世纪是科技时代,是知识的世纪,通过博客来学习和分享知识的人只会越来越多。

1.3 研究的主要内容

本博客系统主要分为两个大版块,前台页面和后台管理系统,前台主要用于给用户展示博客和一些文件等,也提供快速检索功能。后台有发布博客、博客管理、分类管理、文件管理、用户管理以及评论管理等模块,后台首页记录了博客分类、数量、标签、评论数等统计,还使用Chart.js制作了一些用户浏览的数据统计图以供分析。用户的角色权限划分为普通注册用户和博客系统管理员两种,普通注册用户只有发博和对自己的博客评论操作权限,管理员除了对所有博客内容具有管理权限外,还可以对分类、标签、用户评论、文件等执行增删查改操作。

1.4 本章小结

本章阐述了本博客系统的研究目的与意义,国内外的研究现状以及大体描述了本系统的主要内容。下一章将介绍要完成本博客系统所需要的部分关键技术。

第二章 关键技术介绍

2.1 概念

2.1.1 Spring框架

Spring框架是为了解决在企业中的应用开发过程过于繁琐而被设计出来的一个框架,完全开放源代码。Spring实现开发过程中各层之间分离,解决了开发者在企业级开发过程中遇到的许多问题,它也提供了IOC、AOP等强大的功能。IOC译为控制反转,反转的意思是指创建对象的方式反转,从以前的通过new方式来创建对象变为由Spring来创建对象。控制是指创建的对象的属性值和引用也由Spring来为我们创建。这其中还涉及一个非常重要的思想依赖注入,依赖注入的概念是切断了服务类对它所依赖的接口的具体实现类的直接联系,不再直接创建依赖的具体对象,而使用框架来注入[3]。AOP被大多数人翻译为面向切面编程,其概念可以理解为将分散在各个方法中的重复代码横向抽取出来,然后在程序执行过程中,在需要的地方直接调用这些抽取出来的代码即可。这样的实现产生的系统,其代码的冗余小[4]。Spring框架使用模板类jdbcTemplate为数据访问层构建提供了极为便利的实现途径[5]。Spring框架由Spring Core、Spring AOP、Spring DAO和Spring Web MVC等组成,这些实用的组件构成了丰富的Spring生态圈。

2.1.2 SpringMVC框架

SpringMVC作为一个Spring框架的后续发展框架,它与Spring Web Flow结合在一起。这是一个以java为基础的MVC开发方式的轻型web架构,其原理是以DispatcherServlet为核心,协调使用其他的组件来完成相应的请求并返回相应响应。为了规范化开发过程,SpringMVC将一个复杂的项目拆分,分为模型、视图和控制器这三层逻辑,这样也方便了开发者之间的配合以及减少出错。当向MVC添加控制反转时,就能使应用程序高度解耦[6]。在配置上,SpringMVC 框架的配置主要是完成前端控制器、处理器映射器、处理器适配器、视图解析器的配置[7]。

2.1.3 Mybatis框架

Mybatis框架对用户来说是一个非常容易上手的持久层框架,它将很多基于JDBC的操作都封装了起来,让开发人员可以相对简化地完成业务对象对关系数据库的转换[8]。使用该框架后,不用再手动设置参数,可以在xml文件中或者在实体类中使用注解来配置所有的映射关系,接口和实体层都可以借此来映射成数据库中的记录。Mybatis的几个特点也是它成为主流的持久层框架的原因,灵活,解耦合,系统dao层在设计的过程中能够更简单,过程思路清楚。另外,它还提供xml标签来支持动态地编写增删查改语句,这也是解耦的体现。xml作为一种元标记语言,可用来定义某些特殊领域的有关结构化的标记语言[9]。

2.1.4 Tomcat服务器

Tomcat是Apache旗下的项目,由该公司以及Sun等公司和个人联合研发,深受 Java开发者们的欢迎,是一款很优秀的网络应用程序。另外,Tomcat具有稳定的性能,且完全免费,很多企业都对其表示称赞,很自然地成为了当前使用比较广泛的web应用服务器[10]。
Tomcat因为其免费,属于轻小型应用服务器,所以使用场景主要为一些小型项目或者偏中型项目,此类项目具有较小的并发量,不容易出现系统崩溃等问题。这可以理解为,当在开发系统上配置好此服务器时,它可以实现接收页面发来的请求。

2.1.5 Mysql技术

Mysql是一款功能及其强大的关系型数据库管理系统,也是截止目前为止使用人数最多的DBMS之一。在web开发领域里,Mysql也必然是所有RDBMS应用软件中的佼佼者,因为它功能非常强大、上手又简单、还有便于用户管理以及响应速度快、安全可靠性强等优点[11]。如果将所有数据都放在同一个大的仓库里面,数据的查询就会变得极为复杂和混乱。而关系型型数据库具有一个很好的优点就是使用表来划分保存不同类型的数据,这样做能极大提高数据获取速度和具有很好的灵活性。在Mysql中也使用了标准的操作数据库的sql语言。因为其体量小,响应得到结果快,相比于其他的数据库管理系统来说成本还更低,所以总是作为规模不是太大的企业网站建设首选。

2.1.6 Thymeleaf模板引擎

Thymeleaf是一个能够处理和生成HTML,XML,JavaScript等的java模板引擎的开发工具。它支持HTML的原型,当浏览器无视没有定义的Thymeleaf标签属性时,可以显示Thymeleaf模板的静态网页效果。在应用程序中,网页设定的标记属性会被动态取代。Thymeleaf可以直接通过浏览器访问来查看静态页面效果,也可以通过web应用程序进行访问,查看动态页面效果。此外,Thymeleaf还支持Spring标准语言,并为SpringMCV提供了一种可选择的模块,它能够迅速实现表单绑定,属性编辑和国际化。

2.1.7 Bootstrap框架

Bootstrap是基于前端三大件来开发的一款前端开发框架,所谓的前端三大件就是HTML、CSS以及JavaScript。它具有简洁直观的特点,其目的是使得web项目开发速度更为迅捷。Bootstrap最大的特点应该就是响应式设计,所谓的“响应式网页设计”就是它可以自动根据当前屏幕的尺寸变化从而调整出适合比例的网页[12]。另外,它为开发人员提供了功能及其强大的内置组件,开发者只需要了解一些相关的class、标签名等所代表的的意思以及会简单的引用,再导入相应的JS、css等即可,这一简单快速的特点也吸引了大批开发者加入其中。

2.1.8 Maven仓库

Maven也是Apache基金会中的一个备受开发者们欢迎的开源项目,是一款用于实现项目管理的工具,具有跨平台的特点。Maven可以用来创建项目,它提供了一个仓库这样的抽象定义,这能够让开发者能够不用再到网上一个一个来下载所依赖的jar包[13]。Maven仓库基本分为两种,系统的本地仓库和远程仓库。远程仓库又分为中央仓库和其他仓库等。中央仓库里面存放了所有的jar包内容,当你创建了本地仓库后需要哪些jar包就可以在pom.xml中加入dependency,然后在网络联通的情况下会自动去访问远程中央仓库请求下载该依赖的jar包。但是又由于Maven的中央仓库在国外,国内用户下载会比较慢,所以很多国内的知名企业又创建了镜像仓库来获取中央仓库中的信息,这样国内用户直接使用这些镜像仓库来下载速度会快很多。

2.2 本章小结

本章介绍了此博客系统在开发过程中用到的一些重要的前后端框架概念以及部分关键技术,包括MVC模式这种分层思想。系统搭建的主要后端框架技术Spring、SpringMVC和持久化框架Mybatis,以及java模板引擎Thymeleaf和前端展现使用的Bootstrap框架。这几大技术配合负责数据库的Mysql以及Maven仓库等来完成了整个系统的实现。

第三章 需求分析

本章将详细阐述博客系统的功能,性能以及UI界面的需求分析,以系统用户划分用例来详细介绍系统功能。

3.1 总体需求分析

信息技术的发展必然带动社会进步,人民的文化素养也越来越高,网络普及率也必然迅速上升。在这种条件下,博客也在快速发展。博客极具个性化的特点,每个人可以在此处展示个人才能,分享对世界的认知,对知识的理解。另外,相比于电子邮件或者讨论群组等方式,博客更能展示个性。
根据网上现有的博客系统和实际需求,结合软件工程的思想,在搭建博客网址之前,需要进行需求分析,并由获取的数据来编写需求分析规范。本博客系统由后台进行管理和发表博客,前台主要作用是呈现博客内容给用户,并提供高效快速的检索方式。游客的访问范围仅限于前台页面,进入后台需要注册登录。

3.2 系统分析

本博客系统角色可以划分非注册游客,普通注册用户和博客系统管理员这三种。根据用户的不同需求,这三种角色的权限也有所不同。要进入后台必须注册登录,不能以游客身份访问。本博客系统分为前台和后台管理,前台的页面主要做博客展示,游客可以在此检索浏览博客,查看一些上传的文件,评论等。对普通用户来说,本博客系统具有注册登录,博客浏览,博客发布以及资源文件上传功能。对管理员来说,除了具备普通用户具有的功能以外,还具有博客管理,分类、标签管理,文件管理和系统管理等功能。

3.2.1 系统用户及用例分析

从上述的需求分析描述中,我们可以看出本博客系统的用户角色分为三种,游客、普通注册用户和管理员。如果用户只是想在本博客网站上检索资料,那以游客的身份足矣,避免了注册登录这一麻烦过程。对于大多数想要发表博客的用户,都必须完成注册登录,成为普通注册用户后才能实现此功能。当然,此类用户也可以对其自己发表的博客内容进行管理。最后系统的管理员只有一个,需要维护系统正常运行,管理所有用户和博客内容。
用户的角色确定以后,那么他们的用例分析也随之确定:
1)管理员
本博客系统的管理员对系统所有的功能都具有处理权限,但实际上管理员的价值主要体现在于执行一些操作以维护系统的正常运行。比如删除一些不符合网络规范,思想倾向有问题的博客内容,以保证本博客网站内容的健康性、合法性和安全性。由此分析,以本博客系统管理员为主要活动者的用例说明如下:
(1)对用户发布的博客进行审查,对违反网络规范的博客内容进行删除或修改等操作。
(2)将一些热点博客内容设置为推荐。
(3)对经常发布虚假广告博客的用户进行注销账户处理。
(4)结合博客内容变化趋势和热点话题变化,对分类和标签进行编辑修改,与时俱进,给予用户发布博客时更好的内容定位。
(5)对恶意评论和虚假广告评论进行处理。
(6)管理文件内容,对用户上传的错误文件或者不符合网络规范的文件进行处理。
(7)可以编辑或修改一些系统参数。
2)普通用户
博客系统的普通注册用户具有一般的博客用户所具有的权限,比如用户注册登录、博客发布、评论博客、根据分类和标签检索博客、关键字搜索博客内容等功能。以普通注册用户为主要活动者的用例说明如下:
(1)具有注册登录进入后台管理系统功能。
(2)发布个人博客,包括添加博客分类和添加相关标签等。
(3)对自己发表的博客进行管理,修改、删除、浏览等。
(4)浏览前台博客内容,可以检索。
(5)互动管理:对感兴趣或有疑问的博客内容进行评论。
3)游客
游客具有最低的访问权限,仅具有前台访问功能,针对的对象为仅需要浏览博客内容的用户。游客具有所有博客的浏览权限,以其作为主要活动者的用例说明如下:
(1)根据分类检索博客内容。
(2)根据标签检索博客内容。
(3)在搜索栏使用关键字来精准定位博客文章。
(4)浏览、下载注册用户或管理员上传的文件。
管理员、普通用户和游客三者的用例分析关系如下图3.1所示。
在这里插入图片描述
图3.1博客系统角色用例图

3.2.2 数据需求

数据需求是指要完成需求分析所需要的数据。本博客系统的数据对象主要包括用户、博客、评论、文件、类别和标签等。
用户权限划分为系统管理员和注册用户,系统管理员具有本博客系统的最高权限,下图3.2是用户实体图。
在这里插入图片描述
图3.2用户实体图
博客实体包含文章id、分类id、文章内容、文章类型等属性,下图3.3是博客实体图。
在这里插入图片描述
图3.3博客实体图
类别实体主要是将博客按内容分类,其属性包括分类表id,分类名称和缩略名,下图3.4是类别实体图。
在这里插入图片描述
图3.4类别实体图
标签和类别类似,但与博客对应关系略有不同,下图3.5为标签实体图。
在这里插入图片描述
图3.5标签实体图
评论主要是博客发表后的产物,其属性包括评论表id、文章id、作者id、评论内容等。下图3.6为评论实体图。
在这里插入图片描述
图3.6评论实体图
文件主要是对用户上传的文件的相关信息存储,比如文件路径、名称、文件大小等。下图3.7为系统文件实体图。
在这里插入图片描述
图3.7文件实体图
日志主要用于存储一些访问来源信息,日志实体图如下3.8所示。
在这里插入图片描述
图3.8日志实体图
实体之间的的关系总共有四种:一对一,可以表示成1:1;一对多,可以写成1:n;多对一,用n:1来表示,以及多对多,用m:n来表示。
用户与其发表的博客文章的关系为一对多:一篇博客文章只能由一个用户发表,而一个用户可以发表多篇博客文章。
用户和文件实体的关系为一对多:一个用户可以在本博客系统上上传多个文件,而一个文件只能属于一个用户。
用户和评论的关系为一对多:一个用户可以在不同的博客文章下发表多条评论,而每一条评论只可能属于唯一一个用户。
博客和类别的关系为多对一:一篇博客只能有一种类别,但是一个类别可以供多篇博客使用。
博客和评论的关系为一对多:一篇博客下面可以包含多条评论回复,而每一条评论只能属于一篇博客。
博客和日志的关系为一对多:一篇博客可以产生多条日志信息,而每条日志信息只能属于一篇博客。
下图3.9为各实体之间的总体联系图。
在这里插入图片描述
图3.9博客系统总体实体-联系图
博客系统关系模式如下:
用户表(用户id,用户名,密码,邮箱,博客地址,昵称,创建时间,活跃时间,角色权限,头像位置)
博客表(文章id,分类id,标题,缩略名,创建时间,修改时间,文章内容,是否推荐,用户id,文章类型,文章状态,密码,访问量,缩略图,描述,标签列表)
分类表(分类id,分类名称,缩略名)
标签表(标签id,标签名,总标签数)
评论表(评论id,文章id,创建时间,用户名,用户id,邮箱,博客地址,ip地址,用户代理,评论内容,父评论id)
文件表(文件表id,路径,用户id,文件状态,名称,类型,创建时间,修改时间,下载量,文件大小)
日志表(日志表id,用户代理,浏览器名,操作系统名,访问api路径,ip地址,来源地址,访问时间,文章id)
配置信息表(系统设置键,系统设置值)

3.2.3 系统数据分析

本博客系统中,主要是管理员管理博客、类别、标签、文件等数据,数据结构决定了算法的选择与使用。因此,数据可以说是分析一个系统的起点。本节将通过数据流图的方式分析系统中数据的流向和处理。
本博客系统在数据流向上主要由两部分组成,一部分是对管理员来说,当登录后台管理系统后,管理员在此可以点击增删查改按钮产生新的数据流。另一部分是浏览者在前台页面执行某些操作,比如评论等产生的新数据流。下图3.10为后台管理系统的数据流图。
在这里插入图片描述
图3.10博客后台管理系统数据流图
对注册用户来说,他们可以对自己发布的博客内容进行增删查改等操作,其具体细节数据流图如下图3.11所示。
在这里插入图片描述
图3.11博客管理详细数据流图

3.2.4 系统性能需求分析

从狭义的角度来说,一个软件系统的性能指标是能在使用较少的系统资源的同时能够具有很快的响应速度。而站在广义的角度上来说,软件性能的重点不在于功能上是否能够实现,而在于用户能感受到完成功能的及时性。
在系统工程以及需求工程理论中,非功能性需求是指系统的运行状态和系统特性在某些条件下需要满足的需求。非功能需求由两部分组成,分别是执行质量和开发质量。系统在运行过程中展示的包括易用性等的特性可以理解为执行质量;开发质量顾名思义就是在开发过程中系统所展示出来的的性质,比如可扩展性、可测试性等。
本博客系统主要面向广大互联网用户,从执行质量和开发质量上来衡量,本系统具有良好的性能、易用性以及可拓展性、可测试性。下表3.1为性能特性需求分析说明表。
表3.1性能特性需求分析说明表

特性名称需求说明
性能主要针对于系统的响应时间进行说明,应该符合普遍的标准–2/5/10原则:当系统在2秒内完成用户操作的响应,则认为系统的响应速度很快;当用户在2-5秒之间得到响应,则认为系统的响应速度可以接受;当用户在5-10秒之间得到响应,则认为系统的响应速度很慢,但是仍在可接受的范围内;当用户在超出10秒后仍然无法得到响应时,大多数用户则认为当前请求失败,并认为系统很糟糕。当并发操作用户量达到8000时,操作的响应时间至少小于10秒。
易用性系统界面简洁,功能结构清晰,设置合理的导航,保证交互的流畅性,清晰的视觉层次,规则的版面等。
可靠性在系统的使用过程中不会出现系统频繁崩溃,数据大量丢失或者错乱,不会出现界面长时间的混乱,乱码等,不会出现严重的安全性问题,并且可以根据系统周期时间的使用过程中,系统正常运行的时间与总时间运行之比应保证在99%以上。
可拓展性系统应支持二次开发以满足未来的业务需求,系统架构设计和代码结构应保证其松耦合性,以保证当系统需要增加新的模块时对原有系统的结构和代码不会有太大的修改之处。
可维护性系统应支持定期数据备份和及时恢复,以保证系统崩溃后能尽快恢复系统的正常运行。
3.2.5 UI界面需求分析

用户评判系统的一个重要指标就是UI界面。一个简洁明了,美观的界面往往能更吸引用户驻留。本博客系统功能明确,界面简洁美观,容易上手。简易性表现在用户使用方便,减少其在使用过程中发生选择错误的可能性。一致性是所有优秀的界面都具有的特点,界面的结构必须清晰并且一致,风格必须统一,不能给用户一种花里胡哨,乱七八糟的感觉。

3.3 本章小结

此章节描述了本博客系统的出现条件和具有的特点,对系统的角色进行划分并阐述了各角色所具有的访问权限和功能。以性能特性需求分析指标衡量本系统的易用性、可靠性、可维护性和可拓展性。以UI界面指标来衡量本系统的界面具有良好的用户好感度。

第四章 系统总体结构设计

本章将结合上一章对系统的分析来划分具体功能模块以及完成系统的具体数据库设计。

4.1 系统的功能模块

本博客系统主要分为前台和后台管理两个模块,核心部分在后台管理模块,详细的后台管理系统基础功能模块图如下图4.1所示。
在这里插入图片描述
图4.1博客系统基础功能模块图

4.2 数据库设计

通过对系统的需求分析和功能分析,建立了8个表,分别是用户表,包括用户的个人信息,主要用于用户的注册登录;参数配置信息表,用于存储参数的键值对;博客信息表,包括文章标题、文章内容、文章类型、文章内容、文章状态、标签列表、访问量等信息;博客分类表,系统中的所有分类信息列表;博客标签表,系统中的所有标签信息列表;博客评论表,包括了文章id、博客地址、评论内容、父评论等;文件表,包括系统中所有的文件信息;日志信息表,包括所有的日志信息。下图4.2是数据库关系模型图。
在这里插入图片描述
图4.2数据库关系模型图
1.用户表
在此表中包括了所有注册用户的个人信息,如下表4.1所示:
表4.1用户表
编号 约束条件 字段名 数据类型 字段长度 允许为空 描述
1 主键 u_id int 10 N 用户id主键
2 name varchar 32 N 用户名
3 password varchar 64 N 密码
4 mail varchar 200 N 邮箱
5 url varchar 200 Y 博客地址
6 screenName varchar 32 Y 昵称
7 created timestamp 0 Y 创建时间
8 activated timestamp 0 Y 活跃时间
9 role varchar 16 N 角色权限
10 photo varchar 200 Y 头像地址

2.参数配置信息表
在此表中包含了所有的配置文件参数信息,由键值对来储存,如下表4.2所示:
表4.2参数配置信息表
编号 约束条件 字段名 数据类型 字段长度 允许为空 描述
1 主键 name varchar 32 N 系统配置参数键
2 value text Y 系统配置参数值

3.博客信息表
在此表中包含了所有的博客内容信息,包括文章id、分类id、标题、缩略名、文章内容、文章类型、文章状态等信息,如下表4.3所示:
表4.3博客信息表
编号 约束条件 字段名 数据类型 字段长度 允许为空 描述
1 主键 cid int 10 N 文章id
2 外键 cgid int 4 N 分类id
3 title varchar 200 N 标题
4 slug varchar 200 N 缩略名
5 created_time timestamp 0 Y 创建时间
6 modified_time timestamp 0 Y 修改时间
7 content_text longtext 0 N 文章内容
8 content_order int 5 N 是否推荐(1是 0否)
9 外键 author_id int 10 N 作者id
10 content_type varchar 16 N 文章类型
11 content_status varchar 16 N 文章状态
12 password varchar 32 Y 密码(如果状态为加密需要)
13 views int 11 Y 访问量
14 thumb text 0 Y 缩略图
15 description text 0 N 描述
16 tag_list varchar 255 Y 标签列表

4.博客分类表
在此表中包含了博客的所有分类信息,如下表4.4所示:
表4.4博客分类表
编号 约束条件 字段名 数据类型 字段长度 允许为空 描述
1 主键 cgid int 4 N 分类表id
2 cg_name varchar 50 N 分类名称
3 cg_slug varchar 50 N 缩略名

5.博客标签表
在此表中包含了博客系统的所有标签信息,如下表4.5所示:
表4.5博客标签表
编号 约束条件 字段名 数据类型 字段长度 允许为空 描述
1 主键 tid int 4 N 标签表id
2 name varchar 50 N 标签名
3 count int 4 N 总标签数

6.博客评论表
在此表中包含了博客系统的所有评论信息,包括文章id、作者、博客地址、邮箱、评论内容等信息,如下表4.6所示:
表4.6博客评论表
编号 约束条件 字段名 数据类型 字段长度 允许为空 描述
1 主键 coid int 10 N 评论表id
2 外键 cid int 10 N 文章id
3 created timestamp 0 Y 创建时间
4 author varchar 200 N 作者
5 外键 authorId int 10 N 作者id
6 mail varchar 200 N 邮箱
7 url varchar 64 Y 博客地址
8 ip varchar 64 Y ip地址
9 agent text 0 Y 用户代理
10 text text 0 N 评论内容
11 外键 parent int 10 Y 父评论id

7.文件表
在此表中包含了博客系统所有的文件相关信息,如下表4.7所示:
表4.7文件表
编号 约束条件 字段名 数据类型 字段长度 允许为空 描述
1 主键 fid int 10 N 文件表id
2 path varchar 200 Y 路径
3 外键 author_id int 10 N 作者id
4 file_status varchar 20 Y 文件状态
5 name varchar 100 Y 名称
6 file_type varchar 50 Y 类型
7 created_time timestamp 0 Y 创建时间
8 modified_time timestamp 0 Y 修改时间
9 download_count int 5 Y 下载量
10 file_size varchar 50 Y 文件大小

8.日志信息表
在此表中包含了博客系统的所有操作日志信息,如下表4.8所示:
表4.8日志信息表
编号 约束条件 字段名 数据类型 字段长度 允许为空 描述
1 主键 id int 10 N 日志信息表id
2 ua text 0 Y 用户代理
3 browser_name varchar 32 Y 浏览器名
4 os_name varchar 32 Y 操作系统名
5 api_path varchar 200 Y 访问api路径
6 ip varchar 32 Y ip地址
7 referer varchar 255 Y 来源地址
8 access_time timestamp 0 Y 访问时间
9 外键 content_id int 10 Y 文章id

4.3 本章小结

本章节介绍了博客系统的基础功能模块,主要分为博客管理、分类管理、用户管理、文件管理和系统管理等。最后设计了基于Mysql的博客系统数据库以及列出其数据字典。

第五章 详细设计

本章将对博客系统的各模块设计实现过程进行详细介绍。

5.1 用户注册模块设计

此模块用于需要登录博客系统进入后台的尚未注册的游客,要完成注册需要输入用户名,用户邮箱及密码三个参数。输入后系统会判断用户注册信息的有效性,两次输入的密码是否相同,若是输入数据不合法或者上下密码不一致的话右上角会弹出错误需重新输入的提示。下图5.1为用户注册模块实现流程图。
在这里插入图片描述

图5.1用户注册模块实现流程图
具体实现过程:在用户填写完注册表单的信息之后,系统通过正则表达式来判断输入的用户名的格式是否合法,通过后端的findUserByUserName()方法获取数据库中的用户信息传递给前端data,然后在js代码中判断输入的用户名是否已经存在。邮箱的输入格式也是使用正则表达式来判断,密码验证使用判断语句实现。注册成功后会将输入框提交的data通过向后端发送Ajax请求传给后端,使用sql插入语句写入数据库并跳转到登录页面。用户在注册的过程中输入密码提交后会对密码进行MD5加密,加密方法在写工具类StringUtils中。下图5.2是注册页面的效果图。
在这里插入图片描述

图5.2用户注册页面效果图

5.2 用户登录模块设计

此模块用于在博客系统注册过的用户和管理员进入后台系统的登录验证。用户登录模块的设计思路就是用户在输入框输入用户名和密码信息,点击提交后系统程序通过检索数据库中的用户表信息,如果发现有存在完全相同的用户名和密码信息即显示登陆成功,跳转到后台管理系统页面。否则提示登录失败,重置输入框,需重新输入。
具体实现过程:用户进入登录页面后,首先根据自己的账号信息填写用户名和密码,提交表单后前端携带data向后端发起Ajax请求,data中有三个参数,除了用户名和密码外还有rememberText,这个参数携带是否选择七天内免登录信息,是一个布尔型参数。后端接收到数据后,使用sql查询语句查询当前用户名和密码是否存在于user表中。如果相同,则登陆成功,否则显示登录失败。在勾选七天内免登录后,rememberText参数将被置为on,在七天内再次进入后台系统是会先判断此参数,当为on时就跳过登录直接跳转到后台管理系统首页。下图5.3是用户登录页面效果图。
在这里插入图片描述

图5.3用户登录页面效果图

5.3 前端页面设计与实现

本系统的前端页面主要分为前台页面和后台页面,前台页面主要展示博客内容、评论、分类、标签和文件等信息。界面设计的特点是简单清晰,色调一致。后台页面包括仪表盘,各管理页面和发布博客页面等。因为所有的界面制作都是基于Bootstrap框架来完成响应式布局,所以页面内容可以随着屏幕的大小和布局改变而改变以完成适配。仪表盘页面主要用于直观展示数据统计图和表格,直观展示一些站点统计信息。评论博客时可以使用的表情来自于服务器上存储的图片,在前端使用src标签引入需要的表情链接即可。

5.4 仪表盘设计与实现

仪表盘的设计与实现主要依赖于前端完成,其布局主要为一个大的div中完成对其他管理模块的部分数据展示和点击跳转,在此div下面使用js代码来初始化两个表格,包括labels,backgroundColor,data等参数,然后通过new一个Chart对象填入来完成渲染。表格中的数据由前端发送Ajax请求从后端获取,比如展示前七天每天数据的折线统计图数据,在后端的Controller层中有getLastWeekendAccess()方法来实现调取sql查询语句获取数据返还给data,然后展示在表格中。下图5.4是仪表盘数据统计图。
在这里插入图片描述
图5.4仪表盘数据统计图

5.5 博客管理模块设计与实现

博客管理模块是本博客管理系统的核心部分,包括博客发表,博客浏览,博客搜索以及博客管理,主要包括博文的增删查改操作,在后端代码中涉及的主要是Content对象、ContentService、ContentServiceImpl、ContentController以及ContentMapper.xml等。
1)博客编辑功能
博客的编辑功能包括了博客的创建和修改操作,博客表中有一个文章id字段,修改博客的页面是基于创建博客的页面视图完成,只是根据文章id携带其他数据在其中。博客第一次创建并发表功能实现的sql语句就是普通的insert插入语句,在前端表单中填入数据提交后传给后端插入。id为insertSelective的sql插入语句对每个字段进行了非空判断。博客编辑中比较重要的工具栏使用ul列表搭建,每一个小工具图标置于一个li中,引入编写的js代码实现其功能。官网下载导入Editor.md,在edit.js中修改完成富文本编辑器的初始化和表单校验等功能。以上就是博客编辑功能的主要部分实现原理。
2)博客浏览功能
博客浏览功能的实现相对简单,因为浏览方式较多,所以其查询sql语句也较多,可以根据分类id来查询浏览博客列表,实现方法为selectContentListByCgid(),可以查询所有博客,可以根据作者id来查询该作者的博客列表,也可以根据浏览量字段排一下序来获取热点博客列表,这些都并非很复杂的查询语句,功能实现较为简单。
3)博客管理功能
博客管理功能体现在后台管理的博客管理模块,其主要目的是实现博客的增删查改。前面已经详细描述过除了删除以外的其他功能,删除功能的实现原理也并不复杂,在博客列表选中要删除的博客,点击删除后根据文章id向后端发起请求,层层回调,直到sql语句执行成功,在数据库中删除该文章id对应的所有字段信息,最后在前端重新渲染即可。需要注意的是,本博客系统的普通用户仅具对其自身发表的博客有管理权限,无权编辑别人的博客信息,下图5.5是管理员和普通用户获取博客列表的接口方法图,普通用户传入了参数userId,加了这个限制后在页面上只会展示其个人拥有的博客,因此也仅能对其自己发表的博客进行管理。管理员拥有所有博客信息的访问权限,所以也可以实现统筹管理,维护博客系统的安全以及符合网络规范等。
在这里插入图片描述

图5.5管理员与普通用户获取博客列表接口代码图

5.6 分类管理模块设计与实现

分类是博客系统中一个常用且实用的功能,分类管理是针对分类的增删改查操作。分类信息和博客的关系是一对多的,即一个分类可以包含多篇博客,而一篇博客只能具有一个分类。分类管理的实现较为简单,就是很平常的增删查改功能,但是在实现删除功能时,要确保必须至少保留一个分类,防止恶意删除。否则用户在发表博客时无法选择分类,就无法继续发布博客。所以在分类管理界面中给分类生活频道去掉了删除按钮,无法在前端删除所有分类,维护了系统的稳定和正常运行。下图5.6是分类管理模块界面展示图。
在这里插入图片描述

图5.6分类管理界面展示图

5.7 标签管理模块设计与实现

标签管模块类似于分类管理模块,是针对标签的增删改查操作。标签的信息和博客密切相关,因为分类可以说是大方向划分用户发布的博客方向,而标签相当于每一篇博客的关键字,且可以不止有一个,因为博客和标签的关系在第三章描述过是多对多的。在涉及到和标签相关操作的时候,需要考虑博客标签关系表的相关操作。以下主要说明标签的创建过程和其查询过程。
普通用户和管理员可以在编辑一篇博客的时候在添加标签的输入框中创建新的标签。只有管理员可以在标签管理系统中对所有标签内容进行修改和删除。
标签查询功能实现分为按主键标签表id查询,按标签名查询,查询所有标签,按名字模糊查询,对标签进行计数等。下面详细介绍一下按名字模糊查询方法的实现,此功能的实现调用了TagService的fuzzyQueryTag()方法,在TagMapper.xml中的sql语句使用了like关键字模糊查询,并对输入要查询的标签名value值做’%${value}%'包装。按标签来检索博客的展示页面如下图5.7所示。
在这里插入图片描述

图5.7标签浏览界面展示图

5.8 评论管理模块设计与实现

评论的交互究其本质就是用户和用户之间的交互。用户对自己感兴趣的博客进行评论,博主或者其他用户也可以对此评论展开讨论,当然所有注册用户都可以进行持续交互。要完成此功能只需在博客评论表中添加父评论id来对应评论表id即可。对于后台管理系统中的评论管理,普通用户仅可以实现查看自己发表的评论,也只能对其自己发表的评论进行管理。而管理员具有所有评论的访问和管理权限,这一部分的实现和博客管理模块相同。下面讲一下普通用户获取其评论列表的实现原理,在CommentService中有selectCommentListWithUserId()方法,其实现sql语句加入了条件作者id与用户id相同,所以只能获取该用户自己的评论列表。本系统的查询语句还有根据评论表id来查询作者,根据评论表id来查询所有信息,根据评论创建时间查询所有信息并排序等。下图5.8是普通用户评论管理模块界面展示图,图5.9是管理员评论管理模块界面展示图。
在这里插入图片描述

图5.8普通用户评论管理模块界面展示图
在这里插入图片描述

图5.9管理员评论管理模块界面展示图

5.9 用户管理模块设计与实现

后台管理系统中最基本和必要的功能之一就是用户管理功能,用户管理模块仅限于管理员操作,此模块包含管理员对用户的删除,查看和修改功能实现。功能实现较为简单就不多赘述,下图5.10为用户管理模块界面展示图。
在这里插入图片描述

图5.10用户管理模块界面展示图

5.10 文件管理模块设计与实现

文件管理模块包括文件上传、浏览、下载和删除功能。文件上传的实现功能较为复杂,所以本文将详细介绍上传文件过程。在前端页面选择文件并点击上传文件后,会携带文件向后端发起请求,文件类型为MultipartFile数组。后端uploadFileList()方法中设置文件存储路径,作者信息等。在这过程中会遍历文件列表,对文件路径进行重复判断,以确保不会上传重复文件。文件的大小单位格式化计算方法放在了FileUtil工具类中。在使用set方法注入完所有相关信息后调用fileService中的insert()方法来插入到数据库中保存。下图5.11位文件管理模块界面展示图。
在这里插入图片描述

图5.11文件管理模块界面展示图

5.11 本章小结

本章详细阐述了博客系统的设计实现过程,通过系统的代码结构,系统函数的调用情况以及功能的流程图来详细描述各模块功能的实现原理和主要过程,并展示了部分功能的显示界面。

第六章 系统测试

系统测试是指通过特定条件下运行程序以检测错误和测试软件质量,以评估其是否符合要求的过程。可以这样讲:软件测试是为了发现错误而执行程序的过程[14]。系统测试的目的是找到系统中在功能或非功能上不符合需求的地方。系统测试根据软件工程理论主要分为白盒测试和黑盒测试,白盒测试主要检查代码在条件、溢出、路径等语法上存在的问题,这个在开发过程使用Junit工具来完成。黑盒测试又称功能测试,本章将从页面和系统功能上完成测试以检验系统是否符合需求。

6.1 前台页面测试

6.1.1 首页测试

后台启动Tomcat服务器后台跳转的第一个页面为首页,首页展示了博客列表,点击任意一篇博客都可完成跳转。图6.1是首页界面测试图。
在这里插入图片描述

图6.1首页运行界面图

6.1.2 其他前台页面测试

点击分类、标签、发博日志、留言、文件等模块都能实现页面的正常稳定快速跳转,展示出完整的数据。点击右边的链接也能完成页面跳转。前台页面跳转功能正常实现。

6.2 后台页面测试

6.2.1 仪表盘页面测试

仪表盘作为后台管理系统的首页,展示了用户近期的访问数据。点击仪表盘的more info跳转到对应的页面,仪表盘数据展示和页面跳转功能正常。下图6.2为仪表盘运行界面。
在这里插入图片描述
图6.2仪表盘运行界面图

6.2.2 发布博客界面测试

点击发布博客进入发布博客页面,文本框可供正常输入文字,分类下拉菜单可供正常选择,可以添加多个标签,时间准确,发布博客界面测试正常。下图6.3为博客发布界面。
在这里插入图片描述

图6.3博客发布运行界面图

6.2.3 管理模块界面测试

管理模块包括博客管理、文件管理、用户管理、评论管理、分类和标签管理。点击进入各管理模块增删查改按钮均能正常点击并刷新页面。管理模块界面测试正常。

6.3 系统功能测试

功能测试为本系统最值得测试的地方,下面介绍博客系统最为重要的部分功能测试,分别是用户注册、用户登录、搜索功能、发布博客、评论功能以及各管理模块功能。下表6.1为此部分功能的正常反馈测试用例表。
表6.1正常反馈测试用例表
测试项 前提条件 操作 输入 预期结果
用户注册 用户从系统前台页面点击进入后台管理。 1.点击登录页上的注册按钮。
2.填写注册信息。
3.点击“注册”按钮提交表单信息。 正确填写注册信息
用户名:zhuyixin
邮箱:9821@qq.com
密码:zyx
再次确认密码:zyx 右上角弹出注册成功提示,跳转到登录页面。
用户登录 1.用户从系统前台页面点击进入后台管理。
2.用户已经注册过账号信息。 1. 填写登录信息。
2. 点击登录页面的“登录”按钮。 正确填写登录信息
用户名:zyx
密码:zyx 提示进入后台,跳转到后台管理仪表盘页面。
搜索功能 用户已通过浏览器输入系统服务器地址访问博客系统首页。 1.点击博客搜索框。
2.输入搜索信息。 正确填写搜索信息
输入:git
展示包含该输入内容的所有博客列表。
发布博客 用户正确登录进入后台管理。 1.点击“发布博客”
2.正确填写博客信息。
3.点击“发布”按钮。 填写合法博客信息
标题:冰糖葫芦制作
分类:美食频道
标签:制作、美食
博客描述:制作冰糖葫芦的过程
博客内容 点击发布后可在前台博客列表展示博客页面,可在博客管理中管理此博客信息。
评论功能 用户登录博客系统。 在博客详情页下面输入内容评论。 评论内容:写的很棒
回复评论:我也这么觉得 在博客详情页最下方显示所有评论和回复信息。
各管理模块功能 管理员登录博客系统,进入后台管理。 在各管理模块页面点击增删查改按钮。 点击各按钮 实现增加、删除、修改和编辑操作,刷新修改后的页面。

6.4 本章小结

本章为博客系统测试篇,简要描述了前端界面测试过程,主要测试了系统的功能,选择了相关的测试用例,使用黑盒测试方法对系统进行了测试。

总结

此个人博客系统给予了用户极大的方便,它很好地解决了现有的博客系统界面花哨功能复杂,用户的选择判断更容易失误的问题。本博客系统除了提供内容搜索以外,添加了分类和标签这两层划分,将用户发表的博客内容划分得更为精确细致。可以这么说,用户在其他博客网站检索到自己所需要内容的时间远比本博客系统长,这就是本博客系统最大的优势。另外,本博客系统与时俱进,系统管理员可以针对当今的时事热点话题或者技术增加分类,访问量多的热门博客也会显示在首页,给予用户更多的选择。当今博客种类繁多,但总体可以分为两大类,一种是走专一路线,比如走纯代码路线的Github,走专业技术路线的CSDN等。另一种是可以发表任何内容的博客网站,比如腾讯微博、新浪微博等。在这些博客网站上可以发布技术内容,当然更多人使用这种博客系统的目的主要还是用来休闲娱乐。热搜榜、同城热搜、要闻等,用户通过这类博客系统来了解娱乐八卦或者实时热点新闻等,经常使用此类博客网站的用户也被称为“吃瓜群众”。当然,此类博客网站相比于纯某个方向的博客网站来说用户访问量肯定也会更大。所以本博客网站结合了这两大类博客网站的各自优势,用户可以在此博客网站上看到纯方向的影子,比如美食频道,生活频道,代码整理等分类。当你点进某个分类的时候,它就是一个纯方向的博客系统。当然,你也可以感受到不同方向的内容,因为当你还没有选择分类的时候,你的选择权就可以有很多,不再拘泥于一个方向。可以料想到的是,随着网络的普及率以及人民的文化水平越来越高,会有越来越多的人编写博客。无论是记录生活还是分享知识,亦或是在博客上发发牢骚,博客都会成为用户的一个极佳选择。所以,本博客系统也拥有极大的发展前景。

总结

[1]刘兴亮.微博的传播机制及未来发展思考[J].新闻与写作,2010(03):43-46.
[2]李洋. SSM框架在Web应用开发中的设计与实现[J]. 计算机技术与发展, 2016.
[3]薄奇, 许林英. Spring框架中IoC的实现[J]. 微处理机, 2008, 29(1):4.
[4]袁绪峰.基于Spring框架的AOP编程[J].计算机与现代化,2006(01):118-120.
[5]胡启敏, 薛锦云, 钟林辉. 基于Spring框架的轻量级J2EE架构与应用[J]. 计算机工程与应用, 2008, 44(5):5.
[6]葛萌,黄素萍,欧阳宏基.基于Spring MVC框架的Java Web应用[J].计算机与现代化,2018(08):97-101.
[7]徐雯, 高建华. 基于Spring MVC及MyBatis的Web应用框架研究[J]. 微型电脑应用, 2012, 28(7):5.
[8]姜娜, 孔浩, 张子锋. 高校业务系统中基于MyBatis实现可复用的DAO模型[J]. 昭通师范高等专科学校学报, 2012, 34(005):31-34.
[9]秦德杰.简述XML技术在数据库中的应用[J].电子技术与软件工程,2015(18):194.
[10]边清刚,潘东华.Tomcat和Apache集成支持JSP技术探讨[J].计算机应用研究,2003(06):12-14.
[11]兰旭辉,熊家军,邓刚.基于MySQL的应用程序设计[J].计算机工程与设计,2004(03):442-443+468.DOI:10.16208/j.issn1000-7024.2004.03.037.
[12]舒后, 熊一帆, 葛雪娇. 基于Bootstrap框架的响应式网页设计与实现[J]. 北京印刷学院学报, 2016, 24(2):6.
[13]董晓光, 喻涛. 使用Maven构建java项目[J]. 电子技术与软件工程, 2014(10):1.
[14]张新华,何永前.软件测试方法概述[J].科技视界,2012(04):35-37.

  • 3
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

懒羊羊^O^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值