基于SpringBoot 的智超社区的设计与实现
2023-09-11韦潇婧王兆驿谢青松路康伟乔雨
韦潇婧,王兆驿,谢青松,路康伟,乔雨
(南京工业大学浦江学院 计算机与通信工程学院,江苏南京,211200)
0 引言
随着网络技术和信息社会的飞速发展,信息分享平台已成为人们上网查看信息、交流观点必不可少的工具之一,比较突出的代表有知乎、B 站等平台[1]。人们可以在论坛里自由地交流与分享,表达内心的想法,彰显自己的个性,结交志趣相投的朋友。人们也可以在社区上提出问题,以寻求别人的帮助[2]。通过这样即时互动的方式,提问者可以解决问题,而回答者则可以在交流中成长自己。然而,现有的平台均需要商业化的盈利来产生附属的价值,这些商业化的行为,如向用户推送广告、诱导用户点击引流卡片等给用户的使用体验带来了极大的影响[3];因此,本平台期望在提供相关信息交流功能的同时,从系统的界面、操作等方面提升用户的体验。
1 需求分析
■1.1 需求获取的方法
(1)访谈:用户访谈是指分析人员按照一定准则事先准备好一系列问题,通过用户对问题的回答来获取有关目标软件方面的内容。本项目是通过对潜在用户进行面对面访谈,收集用户在社区信息共享方面的需求以及对用户日常社交的行为喜好进行分析[4]。
(2)问卷调查:在进行用户访谈时,由于很多关键人员的时间有限,不易安排过多的时间或者项目涉及的客户面较广。因此,就需要借助用户调查的方法,通过精心设计要问的问题,然后下发到相关的人员手中,让他们填写,再从所填写的内容中获取系统的需求信息,这样就可以克服上述的问题[5]。
■1.2 系统中的数据流
用户登录时系统将根据用户信息表对用户输入的账户密码进行检索匹配,匹配成功即登录成功;用户进行发帖时,通过文本框编辑帖子,提交帖子后,帖子的内容将被写入数据库表中即帖子发布完成。其他用户此时通过对更新后用户信息表的检索可以看到新发布的帖子。用户登录/发帖功能数据流图1 所示。
图1 用户登录/发帖功能数据流图
当用户查看帖子时,系统将检索帖子信息表;当用户对帖子进行评论时,评论数会发生改变,此时评论表更改;当用户对帖子进行点赞时,点赞数改变,帖子信息表也发生更改;当两者任一发生改变时都会通知用户。其数据流图如图2 所示。
图2 用户评论回复功能数据流图
在用户登录成功后,点击个人中心界面将会进入修改密码界面,输入原密码后通过比对用户数据库,比对正确则输入新密码,错误则提示。进行一次原密码与新密码是否一致的校验后将新密码写入数据库。修改密码功能数据流图如图3 所示。
图3 用户修改密码功能数据流图
在用户输入对应信息后,点击注册按钮。在通过校验后数据库将写入新的用户信息。在登录页面输入刚注册的用户信息对更新后的用户数据库进行检索,检索成功后将跳转到用户页面,其数据流图如图4 所示。
图4 用户注册功能数据流图
2 系统功能设计
■2.1 系统的主要功能
校园论坛系统主要包含四个模块,分别是:用户模块、发帖模块、点赞评论模块、系统模块。各模块的具体功能如下:
登录模块:包括登录功能,支持GitHub API,即通过GitHub 账号登录,若没有GitHub 账号,则可以注册本地账号(本地账号和GitHub 账号不互通且暂时无法绑定);用户基本信息的修改;查看个人中心数据;对自己的评论或者发帖进行修改,删除或者隐藏功能;设置个人空间访问。
发帖模块:包括用户发表帖子功能,可以图文并茂式文字图片穿插进行写作;查看他人所发布帖子的具体内容;对自己所发布的帖子进行内容的修改,并且可以删除自己所发布的帖子。
点赞评论模块:包括对帖子或者评论进行点赞功能;对帖子或评论进行回复功能;其他用对自己的发帖进行点赞、评论、收藏时,系统将会有消息提示。
系统模块:主要包括热门评论功能;对与该问题相关的问题进行推荐;发帖者可以设置自己的发帖是否需要付费浏览,进行积分累计,开启会员模式。
■2.2 系统的数据模型
建立系统的数据模型,即抽象出实体之间的关系,构建E-R(实体-联系)图。本项目根据前文描述的基本功能模块,建立了本系统的数据模型,如图5 所示。
图5 数据模型E-R 图
■2.3 数据库表清单
根据E-R 模型,设计了本系统的数据库表,具体如表1 ~表5 所示。
表1 user表
user 表包 含id、account_id、name、token、gmt_create 等字段。它主要用于存放GitHub 用户的各类信息,其中通过id 字段与其他表建立联系,其具体如表1 所示。
question 表包 含id、title、creator、comment_count、gmt_create、gmt_modified 等字段。它主要用于存放帖子的各类信息,其中通过creater 字段与user 表建立联系,其具体如表2 所示。
表2 question表
comment 表包 含id、parent_id、type、commentator、gmt_create 等字段。它主要用于存放评论的各类信息,其中通过commentator 字段与user 表建立联系,其具体如表3 所示。
表3 comment表
notification 表包 含id、notifiler、type、receiver、outerid、gmt_create、status 等字段。它主要用于存放通知的各类信息,其中通过notifiler 字段与user 表建立联系,其具体如表4 所示。
表4 notification表
local_user 表包 含user_id、username、password、nickname 等字段。它主要用于存放本地用户的各类信息,其中通过user_id 字段与user 表建立联系,其具体如表5 所示。
表5 local_user表
3 功能模块设计与实现
基于Springboot+Bootstrap 的信息分享平台,利用Bootstrap+Thymeleaf+jquery 构建前端页面,后端实现第三方授权登录、拦截验证、cookie 缓存,使用Mybatis 生成mysql 的数据库映射,实现用户发帖、评论、回复、话题搜索等功能,最后上传项目至github 并部署到云主机运行。
■3.1 登录注册功能
用户通过输入账号密码进行登录,从页面接收参数username, paassword, repsssword, nickname, 通 过 调用addLocalUser 方法给localuser 对象赋值实现注册。该功能核心实现代码为:
@PostMapping(” /RegisterUser” )
String token = UUID.randomUUID().toString();
LocalUser localUser=localUserService.addLocalUser(username, password, nickname, token);
localUserMapper.register(localUser);
request.getSession().setAttribute(” localUser” ,localUser);
response.addCookie(new Cookie(” token” , token));
return ” redirect:/” ; }
■3.2 分类功能
游客可以点击分类的标签进入自己感兴趣的标签下浏览文章。页面传递tag 参数给list 列表,用list 方法首先对字符串进行分离操作,形成字符数组tags,把tags 存入pagination 返回页面。该功能通过给typename 赋值为数据库里存放的文章类别名的数据,typeid 为文章类别的对应编号,通过文章类别名以及编号来确定该文章的类别,如果点击某个类别,主界面会显示该类别的相关文章信息。实现代码为:
@GetMapping(” /” )
public String index(Model model,
@RequestParam(name = ” tag” , required = false)String tag,
@RequestParam(name = ” sort” , required = false)String sort) {
PaginationDTO pagination = questionService.list(search, tag, sort, page, size);
model.addAttribute(” paginations” , pagination);
model.addAttribute(” search” , search);
model.addAttribute(” tag” , tag);
model.addAttribute(” sort” , sort);
return ” index” ;}
■3.3 发帖功能
用户点击发帖按钮进入发帖界面,输入内容。页面传递teitle, description, tag,id 通过StringUtils.isBlank 做校验,给question 对象传入值返回首页。该功能由Post 方式提交form 表单实现。实现代码为:
if (StringUtils.isBlank(title)) {
model.addAttribute(” error” , ” 标题不能为空” );
return ” publish” ;}
User user = (User) request.getSession().getAttribute(” user” );
LocalUser localUser = (LocalUser) request.getSession().getAttribute(” localUser” );
if (user == null&&localUser==null) {
model.addAttribute(” error” , ” 用户未登录” );
return ” publish” ;}
Question question = new Question();
question.setTitle(title);
question.setDescription(description);
question.setTag(tag); question.setCreator((user!=null?user.getId():localUser.getUserId()));
question.setId(id);
questionService.UpQuestionOrInQuestion(question);
return ” redirect:/” ;}
4 结论
本文详细叙述了基于SpringBoot+Bootstrap 技术的智超社区的设计与实现,从系统的需求分析到总体设计再到测试验收阶段,该系统具有了BBS 论坛所具备的提问、点赞、评论、回复等功能。本系统综合运用SpringBoot 框架以及Bootstrap 框架实现开发以节省开发时间,并通过一些插件实现UI 设计,做到界面的干净、简洁、美观。能够为社区用户们的交流提供良好的交流体验。