基于ssm+redis的网络问答社区的设计与实现
2018-07-12董成光杨保华
董成光 杨保华
摘要:随着软件技术不断地发展,人与人之间也出现了各种各样的社交软件,问答社区就是其中一种,比如知乎网站,各大高校企业,政府机构都有自己相应的内部论坛来讨论各自内部的问题。该文根据知乎的业务流程模式,运行方式,架构方式,完成一个基于javaweb架构的模仿知乎的问答社区即蛤乎的设计和实现。问答社区运行java和mysql和tomcat体系来开发和实现,包括自动发送邮件,验证用户,登录,自己个人主页的提问问题,关注别人的问题,用户相互之间关注,消息推送第一时间获取关注的问题和用户的信息,发现更多新知识,查看当月本周的最新最热问题等服务。在整个系统设计中充分利用了工厂设计模式,面向接口编程,动态代理,自动自如,缓存,tomcat集群,分布式锁等,使系统更加具有耦合性,提高网站的运行速度和高并发。
关键词:问答社区;javaweb;redis;ssm;蛤乎
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2018)14-0048-04
Abstract: With the rapid development of software technology, a variety of social software have appeared, the question-answer(Q&A;) community is one of them, such as the ZHUHU website. In order to discuss their internal problem, many units have their own internal forums, such as university enterprises and government agencies. According to the business process mode, operation mode and architecture mode of the ZHUHU website, a Q &A; community HAHU based a JavaWeb architecture is designed and implemented which is similar to ZHUHU website. Java and MySQL and Tomcat system are used in HAHU, including automatic mail, user login, authentication, questions in their own personal home, attention to the problems of others, between user attention, the message push the first time to obtain the attention and user information, more new knowledge, service of viewing the latest hot issues. In order to improve the running speed and high concurrency of the web site, the factory design pattern is used in the whole design of the system, including interface oriented programming, dynamic proxy, automatic freely, cache, Tomcat cluster, distributed lock etc.
Key words:Q&A; community; javaweb; redis; ssm; HAHU
問答社区至互联网发展以来,出现了各个基于B/S架构的问答社区[1],目前问答社区的时代已经过去,好多人已经渐渐忘记问答社区,信息爆炸时代,大量的无用信息充斥在我们周围,然而人们又很难去辨别,如当今比较出名的知乎网站,就是一问答的形式出现,在这里面集合许许多多的知识和有用的知识,让我们可以更快更好的学习知识,分享知识。当今国内外知名论坛有很多,大大的吸引了很多的相关技术人才,为那些知识专门作答[2]。
本网站的开发意义在于为了更好组织之上和聚集各个散落的知识面向技术讨论的人群开所发的问答社区,目的是提高人们积极参加各个问题的讨论,提高自身知识的深度和高度,积极向身边的人分享自己的知识,也为了自己更加熟悉技术的新技术和了解其架构原理
问答社区依附知乎网站为原型,基于javaweb技术,mysql数据库tomcat,阿里云,linux等最新技术和idea进行开发[3]。
整个架构采用mvvc设计模式进行编写,平台开发采用idea+maven集成jar包来更好地进行管理,使用java语言来实现,采用三大流行开源框架spring,springmvc,mybatis,采用redis缓存,以mysql作为数据库进行数据交互[4,5]。采用tomcat8+jdk1.8作为基础开发过程中主要研究的有以下几个方面:
1)综合运用计算机网络技术、管理信息系统思想和软件工程方法,选择实现系统的技术方案,并确定其开发环境;
2)环境的搭建,安装jdk,搭建Maven仓库,配置国内仓库,tomcat的安装与配置,linux上redis的安装和启用服务;
3)spring的基本配置和基本类库使用,整合三大框架来实现系统的解耦性;
4)对数据库表的设计,字段关联等;
5) ssm+redis的整合,数据库的管理,代码自动生成,插件的运用,服务启动,打包部署等;
6)前后端分离技术会话管理,最主要的是需要管理会话状态,改变以前前后端分离就无法使用session会话的状态。
1 问答社区模块设计
需求分析不仅是软件定义时期的最后一个阶段,而且是软件开发期的第一个阶段,也是关系到软件开发成败的关键步骤。只有通过需求分析才能把软件功能和性能的总体概念描述为具体的软件需求规格说明,从而奠定软件开发的基础。研究的对象是软件项目的用户要求,必须全面理解用户的各项要求,但又不能全盘接受所有的要求。为了达到这一目的,我们必须对其中模糊的要求进行澄清,然后才能决定是否可以采纳。准确地表达被接受的用户要求,也是需求分析的另一个重要方面,只有经过确切描述的软件需求才能成为软件设计的基础。
1.1开发平台的搭建
先搭建jdk环境,先下载jdk1.8,配置系统环境,在cmd输入java –version出现jdk1.8为配置成功,下载idea 配置jdk路径,下载tomcat免安装版本,下载Maven 配置國内私服,启动idea 在pom.xml加入依赖jar包的版本。下载redis 在linux上 解压并装置 启动即可使用Mybatis-Generator自动生成mapper和实体类pojo,配置redis数据源:配置spring容器 整合Mybatis数据源加载mapper文件。问答社区采用mmvc三层架构模式体系系统义务流程处理如图1所示:
1.2 用户登录注册功能设计
数据库表设计为,用户表:username,用户名gender,性别simple_desc一句话介绍avatar_url头像路径居住地industry 所在行业career职业经历education教育经历full_desc个人简介,其他衍生属性like_count 获得点赞数collect_count,获得收藏数following_count,关注了多少人,follower_count关注者多少人,scan_count个人主页浏览次数create_time,注册时间。
用户登录注册流程:
①注册-》发送邮件-》查看邮件-》激活-》数据库更改用户激活状态-》注册完成;
②登录-》输入邮箱和密码-》登录成功-》redis保存会话session并设置过期时间,登录流程示意图如图2所示:
1.3 我的收藏模块设计
用户可以自己创建自己的收藏夹 每个收藏夹里包含自己收藏的话题。数据库表设计如下表1所示:
1.4我的提问话题模块设计
主要是让用户更加能够主动地参与话题讨论,解决自己对某些领域,或者问题不懂的地方展现给他加,这样可以让用户更好的学到自己的知识,增加与别人的沟通能力。
数据库表设计表2如下:
1.5 用户关注话题模块设计
Redishash散列-》存入(user_id,valuse); 需求分析问题可以分两种情况来看:1、看自己的关注,粉丝列表2、看别人的关注,粉丝列表看自己的关注,粉丝列表。关注与被关注图如图3所示:
1.6 话题搜索模块设计
ajax请求-》springmvc映射到对应的实体类Controller-》Service服务类方法中-》Mapper接口
实体类:Tocpc
服务类:topService;
Dao类:topicMapper
在mysql全文中搜索话题使用%号占位符搜索所有可能的结果
字段设计如下表3所示:
1.7 最新最热模块设计
最新的热门话题,首先需要做一些限制,如果一篇文章的浏览人数达到100,所以文章很有趣的文章,如果有500个主题,50个问题的有趣的文章,为了产生时间根据主题发布时间和当前时间尺度的话题进行具体计算方法:通过不断降低的话题赞美乘以一个常数,然后添加发布时间,结构是当前主题积分常数为432(一天的秒数除以主题数200)主题的每一个好评对分数432。
使用散列散列存储主题的各个字段。通过使用两个有序存储,首先命令ID的话题的成员集,释放时间得分,第二名相同的有序集合ID,并且比分是二阶组合得分,不仅可以根据发表文章的顺序展示的主题,并根据主题展示高分。为了防止用户重复同一主题,我们需要记录一个用户列表,收集已被表扬的用户,并将ID设置为搜索条件。
2 问答社区系统实现
2.1 平台的搭建
问答社区采用ssm+redis+maven架构来实现,spring作为容器,springmvc作为前端管理,mybatis作为orm数据库访问层。Maven作为jar包版本管理。Pojo管理实体类。Mapper管理数据源接口实现,mapper.xml原生动态sql的编写。使用Mybatis-generator自动生成pojo和Mapper。在pom.xml中添加如下spring依赖的jar包,在pom.xml中添加如下mybatis依赖的jar包,在pom.xml中添加如下mysql,redis依赖的jar包,在pom.xml添加springmvc依赖的jar包。
Redis服务安装如下:在linux服务器中,使用Xshell5和Xft5(Xshell是对服务器远程连接操作,Xftp是对服务器上文件进行上传和管理操作)吧下载的zip通过命令tar –zxvf 文件名称解压到指定的目录 并编译。Make install安装 安装成功后 启动服务,并通过配置文件中的daemonize yes来进行后台服务挂起。启动reids客户端 输入命令后进入 redis服务启动成功。在spring容器中配置redis服务如下:
spring容器需要整合前端控制器,这是是为了方便控制路径访问,方法映射,通过注解来完成。Spring作为一个管理bean生命周期的轻量级容器,可以整合数据源的orm框架,整合前端控制器框架。整合redis。
在web项目中,其实很重要的是web.xml文件的配置,web.xml用来初始化操作。比如说欢迎页,拦截器,定义资源加载路径,加载级别,编码格式等。在web.xml容器中声明springmvc.xml配置文件路径,这样在启动项目中会根据这个路径去加载配置文件信息。
2.2 用户管理模块实现
以用户管理模块为例,其注册与登录主页面如图4所示:
注册实现:Ajax->UserControler()->对应方法(/register)。
Pojo类:Response(包含了请求响应状态,需要返回的信息,返回的时间).
Mapper:userMapper->userMapper.xml 插入用户信息。
Resid:设置用户默认关注用戶。在Redis有序结合中添加当前用户id,关注的人,关注的用户id.设置用户被关注的人:被关注的人用户Id,被关注字段,时间,用户id.依次内推,增加两个关注用户和被关注用户。
输入每个字段-》提交到/register接口方法中,设置用户默认关注用户后 就注册完成,系统会发送一封邮件进行账号激活,登录成功界面如下图5所示:
3 结束语
本文所研究的内容来自模仿知乎问答社区,目的是通过问答社区来收集知识,分类知识,供人们讨论,学习知识的一个场所。
首先,在对问答社区业务流程进行分析,得到了关于基于ssm框架的问答社区系统的总体框架。根据知乎的流程框架和大概的需求,设计并分析了相应模;其次,选择技术方案,通过spring @ResponseBody来实现resutful风格的统一接口,利用redis完成会话统一管理和权限识别验证;最后,进行了数据库的设计,完成了整个问题社区系统蛤乎的设计。
参考文献:
[1] 谢新洲, 黄杨. 从平台到社区——网络社区问答的演变研究[J]. 出版科学, 2018(1):14-19.
[2] 刘周颖, 赵宇翔. 基于语音互动的付费知识问答社区运营模式初探——以分答和值乎为例[J]. 图书与情报, 2017(4).
[3] 吕学婷. 基于Springmvc和Mybatis框架的门户网站及其内容管理系统的设计与实现[D]. 上海:东华理工大学, 2016.
[4] 赵姝菊. 基于Java Web项目开发之JavaBean应用探究[J]. 电脑知识与技术, 2012,8(5):1094-1097.
[5] 赵成刚, 孙培芝. 基于SpringMVC和Mybatis开发框架的设计与实现[J]. 当代教育实践与教学研究:电子刊, 2017(9).