基于混合推荐算法的个性化推荐系统的设计与实现

目 录
第一章 技术概览 1
1.1 B/S架构 1
1.2 SpringMVC 1
1.3 Spring 1
1.4 mybatis 2
1.5 开发工具 2
第二章 总体设计 3
2.1 系统设计概述 3
2.2 功能分析 3
2.3 系统的结构图 5
第三章 数据库设计 6
3.1 数据库需求分析 6
3.2 数据库概要设计 6
3.3 数据库表的设计 7
第四章 详细设计 13
4.1 数据库的连接 13
4.3 用户登录模块 15
4.4 用户注册模块 18
4.5 新闻模块 19
结论 24
参考文献 1
致谢 2

基于混合推荐算法的个性化推荐系统的设计与实现

摘 要:本论文主要阐述了基于Java的新闻管理系统的设计与实现过程,论文首先介绍了系统开发过程中使用的技术和开发工具,接着简单介绍了系统的功能模块分析和设计,然后介绍了数据库的需求分析和设计,最后详细介绍了系统的实现过程。
本系统分为管理员和普通用户两种角色,实现了新闻发布、新闻浏览、新闻点赞、新闻分类管理、系统日志监控、新闻搜索等功能,方便用户更好的浏览和管理新闻信息。本系统是基于B/S架构的信息管理系统,使用了SpringMVC、Mybatis、Spring框架技术,MyEclipse集成开发环境以及MySQL数据库。
关键词: 新闻管理;SpringMVC;Mybatis;Spring
中图分类号:TQ351. 2

Java-based news management system
ZHANG Yiwei (Tutor: HU Baiyan Lecturer)
(College of Computer Science And Technology, Hubei Normal University, Huangshi, 435002, China)

Abstract:This paper mainly expounds the design and implementation process of the news management system based on Java. The thesis first introduces the technology and development tools used in the system development process, then briefly introduces the analysis and design of the system’s functional modules, and then introduces the requirements of the database. Analysis and design, and finally the details of the system’s implementation process.
The system is divided into two roles: administrators and ordinary users. It implements functions such as news release, news browsing, news promotion, news classification management, system log monitoring, news search, etc. It is convenient for users to better browse and manage news information. This system is an information management system based on B/S architecture, using SpringMVC, Mybatis, Spring framework technology, MyEclipse integrated development environment and MySQL database.
Keywords: news management; SpringMVC; Mybatis; Spring

基于混合推荐算法的个性化推荐系统的设计与实现
第一章 技术概览
基于Java的新闻管理系统是B/S架构的交易平台,在开发中使用SpringMVC、Mybatis、Spring框架技术、MyEclipse集成开发环境,使用MySQL数据库进行数据的存储。下面将一一介绍相关技术。
1.1 B/S架构
B/S既是浏览器(Browser)访问服务器(Server)的结构,即由Server提供相关的服务接口,用户访问时,无需进行任何安装,即可通过电脑本身的Browser进行访问,并且后期维护相互仅需对Server进行更新即可,无需用户进行软件升级之类的。这种架构也具备低成本、高可用性等特点[1]。
1.2 SpringMVC
在众多的MVC框架中,SpringMVC是一种轻量级的框架,并且简单易用,开发效率极高,让程序员将更多的精力放在业务上。相对于SpringMVC2,SpringMVC学习成本低,扩展性好,很容易就可以开发出性能较好的系统。SpringMVC的核心类是DispatcherServlet,即前置控制器,其作用是拦截用户从浏览器发送的请求,需要在web.xml文件中配置,请求被拦截后给交给控制器来处理,具体的实现过程会在系统实现中介绍。
1.3 Spring
通俗的来说Spring并不是一个框架,更像是一组框架或者组件的集合。相当于一个很大的容器,我们通过容器开发装载组件,并以其核心IOC和DI、AOP进行管理。其与SpringMVC相对而言,其关系是父与子的关系,其有核心内容是部分是相同的,即DI和IOC等。controller通过DI的方式进行注入,同时SpringMVC使用相关配置文件进行响应管理,由于起来两者均是由同一家公司进行研发,因此有很好的兼容性。
1.4 mybatis
mybatis是另个一优秀的开源框架,在新闻管理系统中考虑过时候用JDBC直接操作数据库,但是由于了解过mybatis得优点,考虑到JDBC没有连接池,每次请求都会重新创建,并且须在代码中频繁的更改sql语句,后期优化和调整较为麻烦。最后考虑到Mybatis对于sql语句的优化,修改比较困难,最后选择了操作简单并且灵活的mybatis
1.5 开发工具
新闻管理系统是比较小型的管理系统,系统采用了本人使用最熟练的MyEclipse开发工具,静态界面使用html,系统的服务器使用是Tomcat。

  1. MyEclipse
    MyEclipse是eclipse的升级版,也就是在其的基础上加入了各个常见应用开发的组件,包括tomcat也存放其中。无需用户去查找相关常用的组件,并且能够实现代码快捷输出等操作,提高研发效率,并且其支持HTML、CSS、JS、JAVA等相关技术,并且能实现代码校验等功能[4]。
  2. Tomcat
    Tomcat是使用较为广泛的服务器,具备高效、轻量等特点,tomcat也是用Java预言编写的。Tomcat是servlet和jsp容器,当用户通过浏览器访问部署在Tomcat上的一个站点时,Tomcat会响应HTM页面请求。

第二章 总体设计
2.1 系统设计概述
系统设计既是对项目总体所需的功能和相关逻辑进行细节的、具体的描述和表达,之后设计出相关的模型。其所需的设计可分为总体、数据库、功能模块、相关界面设计等。
系统设计是一个将抽象的业务逻辑具体成为各个实现的功能和对象的过程。通过相关的调研,并编写设计分析的相关文档,研发者可依据前期编写好的文档进行研发,以此提高研发效率,编写出符合业务逻辑的功能代码,同时对模糊的业务进行详细分析描述。其设计同样具有固定的原则要求,具体如下:
(1)系统性。即完全一致性,相关的代码、设计文档、页面风格等均要实现统一,并且要符合标准。在本系统开发的过程中也遵循良好的代码规范,比如系统中的类名首字母都大写、变量的命名都有实际的意义、变量命名都按照驼峰命名法命名、每个方法都有重要的注释等。
(2)灵活性。需能够在各个系统、硬件等环境下运行,对硬件限制要小,并且具有良好的可扩展性和开放性。本系统利用Spring框架的依赖注入特性,灵活的解决了类与类之间的依赖关系,减少了代码之间的耦合。使用MVC框架将视图、数据和业务进行分离提高了代码的重用行。
(3)可靠性。既是保证系统具有强大的抗干扰性,同时保障其安全的运行,这也是一个系统必备的条件因素。系统使用Mybatis框架,避免了SQL语句的拼接有效的防止了SQL注入。
(4)经济性。以最小的成本满足所有的需求,以实现效益最大化。本系统的开发使用了开源框架、MyEclipse集成开发工具、MySQL数据库、Tomcat服务器,这些软件都可以免费使用,系统的开发都是由本人独立开发完成并没有经济支出,具有良好的经济可行性。
2.2 功能分析
功能分析,即通过相关的需求调研,分析其项目应具备的功能,并编写完整的需求文档。这个过程也是整个项目系统所必须进行的第一步,没有这一步后期研发和设计无法进行,并且在后期维护和版本更新中也起到至关重要的作用,本文通过具体的分析得出本项目系统应具备的功能有用户、新闻、留言等相关管理功能,同时也具有新闻的点赞、评价、预览、更新信息等功能。
1)用户注册
提供相关的注册页面窗口,供游客进行注册,以有权限访问更多的功能,比如新闻评论,在线留言,发布新闻等功能。用户在注册是必须正确填写相关信息,比如用户名不能为空,密码和确认密码必须输入一致,用户的邮箱格式需正确等,需通过各个信息的正确性校验,才可将相关数据保存到数据库,并以此确定注册的完成。
2)用户登录
本功能是提供相关的登录窗口,给在数据库中保存的用户使用,以此通过填写正确的用户名密码,即可访问系统的功能。
3)发布新闻
用户登录后,可访问此功能编写自己所要发布的信息,发布成功后需要系统管理员的审核,审核通过后在主页会进行显示。本项目的核心便是新闻模块的功能。
4)浏览新闻
游客和用户均可浏览系统中各个用户所发布的新闻。
5)用户留言
用户通过登录后,对新闻进行查看时,可发布留言,管理员进入系统后会收到留言信息。
6)动态查看
系统会记录会员所有的动态信息,例如新用户注册、新闻信息的更新和发布等操作均会保存到后台数据库,方便后期用户或者管理员查看信息的操作情况。用户在查看信息时,可以进行点击直接链接到用户的发表的动态详情界面。
7)新闻评价
用户在查看新闻时可以发表评论,用户的评论内容会显示新闻详情列表界面,用户可以查看所有的用户的评论信息。
8)点赞
点赞功能是新闻管理系统的较为新颖的功能,用户在浏览新闻时除了可以评论新闻也可以点击点赞,系统会记录每条新闻的总的点赞数和浏览数。
9)更新个人资料
用户注册后,可以进入系统访问此功能,并且对自身的信息进行更新,包括联系方式、个人密码和头像等信息。
2.3 系统的结构图
图2-1简洁明了的展示了新闻管理系统的设计思路。管理员、用户两种不同权限的账号有不能的功能模块。
在这里插入图片描述
第三章 协同过滤算法
混合推荐可使用的数据包括:
1、用户属性:用户位置、用户性别、用户年龄等属性信息;
2、项目属性:项目类别、项目添加时间、项目内容等属性信息;
3、用户操作行为:用户评分、收藏记录、浏览记录、观看时长、购买记录等操作行为;
混合推荐方法可以是先将数据进行聚类(用户聚类、项目聚类等),可进行多次聚类,聚类算法常用的有KMeans聚类、Canopy聚类、KMeans+Canopy聚类、迷糊均值聚类等聚类算法,然后找到目标用户所在的簇,用簇中的项目或者用户进行推荐,推荐可根据多种操作行为分别推荐,然后将推荐的结果进行平均加权求和,需要提前设定每种推荐算法的权重,或者分别计算不同操作行为的用户或者项目的相似度,将相似度进行加权求和,然后再进行最后的推荐,相似度的计算可采用余弦算法、修正余弦算法、person皮尔森算法、欧几里得距离公式等算法,推荐机制可采用SlopeOne、SVD等。
3.1 基于用户的协同过滤算法
根据用户的协同过滤算法的主要实现方式是,根据获取使用者的历史的一些活动统计(如使用者对职位的收集),并由此分析出使用者对某个工作类别的偏好,再根据判断用户偏好的重要程度,甚至是对某个工作类型的评价,把这种统计加以数字化,从而形成了使用者喜好的二维矩阵,同样的方法也可以用于其他应用,因此可以方便地使用找到相同的用户组,然后通过统计相似率计算用户之间的相似度,从而筛选出最相似的用户,类似用户首选且用户未收集的职位也推荐给用户[3]。然而⽤户有新⾏为,不⼀定会导致推荐结果的实时变化
在这里插入图片描述
3.2 数据库需求分析
以本项目系统的新闻管理这一核心需求做出相关分析,而这一功能所对应的管理员和用户的操作情况存在一定的差别。以此总结出具体需求如下:
因为该课题是为了实现具有个性化推荐功能的个性化新闻系统,也因为利⽤用该⽤户的历史经验⾏为给⽤户提供了有理有据的推荐解释,如此才能够使⽤户⽐比较信服,所以本系统使用了基于物品的协同过滤算法,⽤户有新⾏为,它将导致用户的推荐结果发生实时变化[5]。基于物品的协同过滤算法的基础过程包括:
(1)计算物品之间的相似度
基于余弦(Cosine-based)的计算方法,利用求二矢量间的角度余弦值来表达事物间的相似之处,方法为:其中分子是二矢量的内积,即二矢量相同距离的数字相乘。
公式 3-1
上述公式的分母是平均喜欢u项的用户数,分子是平均喜欢u项和v项的用户数。上述公式似乎非常合理,但如果V项非常流行,很多人都喜欢它,那么上面公式中的分子和分母将非常接近,w将非常接近1。也就是说,任何产品都是受欢迎的,即任何新闻都和热门新闻之间的相似度很高,这会导致ItemCF算法会总是推荐热门新闻,这并不是一个好的设计[6]。因此可以采用下面的公式:
公式 3-2
(2)按照新闻的类似情况以及在校大学生的历史情况,给大学生形成选择清单
当构建起了物品的相似度矩阵以后,我们就要面对一个问题,便是怎样在多个相同的东西中选取用户最感兴趣的东西[7]。因此,ItemCF算法采用了下列公式方法统计用户u对物品j的感兴趣程度:
公式 3-3
上式中的N(u)是在校大学生喜欢的物品集合,S(j,K)是与物体j最接近的k个物体的组合,Wji是指物体j与i的接近程度,而Rui则是指在校大学生u对物体i的趣味。对上式的通俗意思是,对在校大学生u最喜欢的物品列表中的每一种物品i,都可以通过物品相似率矩阵找出与其最接近的K个物品,令为Kij,j=1,2,3,.K,然后通过物体的相同高度Wij来显示使用者对物体j的关心情况[12]。
最后将筛选出来的物品按照用户对其感兴趣程度逆序排序,取全体列表或者列表前K个物品推荐给用户,至此ItemCF算法完成[13]。
计算新闻之间的相似度代码如下:

for(Recruit i:memberLove){
for(Recruit j:allRecruits){
if(i.getId()!=j.getId()){//去重(两集合相同的新闻去除掉)
Search searchSim = new Search();
int loveInCommon = 0;
//计算共同喜欢职位i和j的用户数
for(MemberCollect mci:i.getMemberCollect()){
for(MemberCollect mcj:j.getMemberCollect()){
if(mci.getMember().getId()==mcj.getMember().getId()){
loveInCommon++;
}}}
//新闻相似度计算
double sim = (i.getMemberCollect().size()*j.getMemberCollect().size())==0?0:(loveInCommon/Math.sqrt(i.getMemberCollect().size()*j.getMemberCollect().size()));
matrix.add(new SimValue(i, j, sim));
}}}

3.3 可行性研究
方案的可行性分析是从多角度综合考量一个方案,从三个可能的角度来考虑,以确保整个方案的平稳运行。
3.3.1经济可行性分析
个性化新闻推荐系统的经济可行性主要涉及到系统的投资与收益两个方面。从工程经济学的角度来看,需要对系统的成本和效益进行分析。
首先,个性化新闻推荐系统的成本包括开发、维护和更新等方面的费用。其中,开发费用包括软件开发人员的工资、设备购置费用等;维护费用包括服务器维护、系统运行维护等;更新费用包括系统功能升级、新闻分类算法更新等。这些成本需要在系统使用寿命内进行考虑和分摊。
其次,个性化新闻推荐系统的效益主要体现在两个方面:增加用户粘性和提高广告收入。系统通过推荐个性化新闻,提高用户的满意度和阅读体验,从而增加用户粘性,进而带来更多的用户流量和访问量。此外,系统也可以根据用户的兴趣和偏好,提供更有针对性的广告服务,提高广告的点击率和转化率,从而带来更高的广告收入。
总体来看,个性化新闻推荐系统的经济可行性比较高。虽然系统的开发和维护成本较高,但是系统可以通过提高用户粘性和广告收入来实现投资回报。此外,随着用户对个性化服务的需求不断增加,个性化新闻推荐系统的市场前景也非常广阔,可以为系统的长期发展提供支持。因此,从工程经济学的角度来看,个性化新闻推荐系统具有很高的经济可行性。
3.3.2技术上的适用性
针对目前的个性化新闻推荐系统,由于技术成熟,以及自身的能力,可以忽略新技术的应用,因此,本文提出了一种基于java+ MySQL的新技术,该技术已经在很多公司的应用中得到了证实,技术上是切实可行的。
3.3.3运行的可能性
一个软件的研发,在设计出来的时候,会不会被广泛的使用,取决于它的复杂度,以及它的总体要求。这款个性化新闻推荐系统的运行非常的简便,没有太多的接口,也没有太多的功能,只需要按下按钮就可以完成。
3.3.4应用可行性分析
个性化新闻推荐系统的应用可行性主要涉及到技术、用户和市场三个方面。需要从这三个方面进行分析和评估。
首先,从技术可行性来看,个性化新闻推荐系统的技术方案已经得到了广泛的应用和验证,主要包括机器学习、自然语言处理、数据挖掘等技术。这些技术在现有的新闻推荐系统中已经得到了充分的应用和优化,可以为新的个性化新闻推荐系统提供技术支持和保障。
其次,从用户可行性来看,个性化新闻推荐系统的应用场景非常广泛,适用于不同年龄、性别、职业等不同类型的用户。此外,随着用户对个性化服务的需求不断增加,个性化新闻推荐系统的市场前景也非常广阔。因此,用户对个性化新闻推荐系统的接受度和需求是非常高的。
最后,从市场可行性来看,个性化新闻推荐系统的市场前景非常广阔。随着互联网技术的不断发展和新闻传播方式的不断变化,个性化新闻推荐系统的需求和应用场景也在不断扩展。此外,随着新闻广告的不断增长和新闻传播方式的不断变化,个性化新闻推荐系统也可以为新闻媒体、广告主等提供更为精准的服务,从而提高市场竞争力。
总之,个性化新闻推荐系统的应用可行性非常高。系统的技术、用户和市场都具有良好的发展前景和潜力,可以为用户提供更加便捷、高效和个性化的新闻服务,同时也能够为企业和市场带来更高的收益和竞争力。
3.4系统总体设计
MVC模型的选取有利于网站的设计和开发过程。MVC模型的真正含义,是指模型,视图;控制程序,这三种方式在整个程序中都是用来进行编程的,它是整个程序设计的思想。下面将对三种模型进行更细致的说明,模型层次,它是一个面向 Javabean的模型,它的主要作用是执行不同的函数。视图层次,是一个视觉层次,它显示了一个系统的网页特效,不同的前端结构;HTML都是这个视图的一个特性。Controller级,是一个控制区,它可以截获任何来自站点的请求;在截获完成后,分配到相应的控制器进行操作,再分配到相应的方式,并实现了编码的逻辑。总之,这三种模型相互补充,提高了代码重用的效率,降低了编码的耦合性。
3.4.1系统设计结构
整个毕业设计的总体方案是 B/S架构,以 MVC为中心,前端为 vue,后台为 java架构;整体结构简单,耦合性小,便于后期维修。按照 MVC的设计方式进行了系统的功能开发。该软件以手机为基础,可以让使用者在 PC和手机上使用。同时, MVC的使用也方便了后期的维护和升级。
3.5社会需求层面的分析
个性化新闻推荐系统可以满足社会对新闻信息的个性化需求。在传统的新闻传播模式中,媒体通常采用一种广播式的方式,将同一篇新闻传递给所有的读者,无法满足不同读者的个性化需求。而个性化新闻推荐系统通过分析用户的兴趣、偏好、历史阅读记录等信息,为每个用户提供个性化的新闻推荐,满足用户的个性化需求。
此外,个性化新闻推荐系统也能够提高新闻传播的效率和精准度。传统的新闻传播模式中,媒体需要通过广告、宣传等手段来吸引用户的注意力,而个性化新闻推荐系统则能够根据用户的兴趣和偏好,直接将相关的新闻推荐给用户,提高用户的阅读体验。同时,个性化新闻推荐系统也能够更加精准地将新闻推送给目标受众,提高新闻传播的效率。
总之,个性化新闻推荐系统能够满足社会对新闻信息个性化的需求,提高新闻传播的效率和精准度,对于促进社会信息的传播和交流具有重要意义。

第四章 数据库设计
数据库设计是依据前期的需求分析和业务逻辑确定的,一般情况下是各个对象的表结构进行逻辑关联设计,确定好其相关关系、分类信息等。依据DBMS功能为基础,同时借助相关工具设计出符合需求关系的数据模型,并且其需要具有读写高效、冗余少、安全可靠等特点。
4.1 数据库需求分析
以本项目系统的新闻管理这一核心需求做出相关分析,而这一功能所对应的管理员和用户的操作情况存在一定的差别。以此总结出具体需求如下:
管理员对新闻进行审核和后期的维护,判断其是否存在违反政治的内容等,而用户需要进行相关新闻的预览和查阅,因此需要一定的栏目对新闻进行管理,即需要栏目表。同时需对新闻信息进行数据管理,即新闻表。另外的则是系统的基础功能表,包括用户、角色、日志等表,以保存系统的基本数据。用户可以评论新闻信息,每个新闻对应多个评论,所以需要评论表存放用户的评论信息;用户可以点赞新闻信息,需要新闻点赞表记录用户的点赞信息。在系统中管理员可以设置系统的信息,需要系统设置表记录相同的设置信息,比如系统的log信息等。
本系统依据上述分析,设计相关实体包括:图片、分页、用户、角色、新闻、评价、点赞等实体信息。
4.2 数据库概要设计
以数据分析为依据,自低向上构建整体结构,同时做出视图设计,并将其集成,之后通过对其结构进行分析和调优,以此得出结果。
设计的方法通常使用E-R模型。而其包含的元素包括实体、属性和对应关系。通常情况下,将其通过E-R图的形式进行展现,其中实体的表示操作中涉及到的相关事务,而属性是其具体的特征描述。并根据它们之间的逻辑关联,确定整体数据库构造的E-R图。

4.3 数据库表的设计表3-1 日志类型表
列名 数据类型 长度 标识 主键 允许空 说明
id int 11 是 是 否 主键
create_time datetime 是 创建时间
name varchar 50 是 名称
log varchar 255 是 描述
status int 11 是 状态
update_time datetime 是 更新时间
表3-2 日志表
列名 数据类型 长度 标识 主键 允许空 说明
id int 11 是 是 否 主键
create_time datetime 是 创建时间
member_id int 11 是 用户
action_id int 11 是 日志类型
remark varchar 1000 是 备注
type tinyint 2 是 类型
foreign_id int 11 是 外键
表3-3 tbl_archive 新闻表
列名 数据类型 长度 标识 主键 允许空 说明
archive_id int 11 是 是 否 主键
post_type int 11 是 类型
title varchar 255 是 标题
member_id int 11 是 发布用户
create_time datetime 是 发布时间
description varchar 255 是 描述
view_count int 11 是 浏览量
pub_time datetime 是 发布时间
update_time datetime 是 更新时间
thumbnail varchar 255 是 缩略图
check_admin int 11 是 审核状态
content text 是 内容
favor int 11 是 喜欢数量
表3-4 tbl_archive_favor新闻点赞表
列名 数据类型 长度 标识 主键 允许空 说明
id int 11 是 是 否 主键
create_time datetime 是 创建时间
archive_id int 11 是 新闻id
member_id int 11 是 用户id
表3-5 tbl_article 新闻分类关系表
列名 数据类型 长度 标识 主键 允许空 说明
collect_time datetime 是 时间
cate_id int 11 是 分类id
archive_id int 11 是 新闻表
status int 11 是 状态
表3-6 tbl_article_cate 栏目
列名 数据类型 长度 标识 主键 允许空 说明
id int 11 是 是 否 主键
name varchar 30 是 名称
status int 1 是 状态
sort int 11 是 排序
表3-7 tbl_article_comment 新闻评论
列名 数据类型 长度 标识 主键 允许空 说明
id int 11 是 是 否 主键
create_time datetime 是 创建时间
article_id int 11 是 新闻id
member_id int 11 是 用户id
content text 是 内容
表3-8 tbl_config 配置
列名 数据类型 长度 标识 主键 允许空 说明
jkey varchar 100 是 否 配置参数
jvalue varchar 255 是 值
description varchar 255 是 描述
表3-9 tbl_group
列名 数据类型 长度 标识 主键 允许空 说明
id int 11 是 是 否 主键
create_time datetime 是
name varchar 50 是
logo varchar 255 是
creator int 11 是
managers varchar 200 是
tags varchar 100 是
introduce varchar 255 是
can_post int 11 是
topic_review int 11 是
status int 11 是
表3-10 tbl_group_fans
列名 数据类型 长度 标识 主键 允许空 说明
create_time datetime 是
group_id int 11 是
member_id int 11 是
表3-11 tbl_group_topic
列名 数据类型 长度 标识 主键 允许空 说明
id int 11 是 是 否 主键
collect_time datetime 是
group_id int 11 是
archive_id int 11 是
status int 11 是
is_essence int 11 是
is_top int 11 是
表3-12 tbl_group_topic_comment
列名 数据类型 长度 标识 主键 允许空 说明
id int 11 是 是 否 主键
create_time datetime 是
group_topic_id int 11 是
member_id int 11 是
content text 是
表3-13 tbl_member
列名 数据类型 长度 标识 主键 允许空 说明
id int 11 是 是 否 主键
name varchar 50 是 姓名
email varchar 50 是 邮箱
phone varchar 11 是 电话
password varchar 32 是 密码
sex varchar 2 是 性别
avatar varchar 255 是 头像
birthday varchar 10 是 生日
qq varchar 15 是 QQ
wechat varchar 20 是 微信
website varchar 50 是 个人网站
introduce varchar 255 是 个人说明
follows int 11 是 关注
fans int 11 是 粉丝
表3-14 tbl_member_fans 粉丝关系表
列名 数据类型 长度 标识 主键 允许空 说明
id int 11 是 是 否 主键
create_time datetime 是 创建时间
follow_who int 11 是 被关注用户
who_follow int 11 是 关注者
表3-15 tbl_memgroup
列名 数据类型 长度 标识 主键 允许空 说明
id int 11 是 是 否 主键
isadmin int 1 是
name varchar 50 是
fid int 11 是
rankid int 11 是
表3-16 tbl_picture 图片表
列名 数据类型 长度 标识 主键 允许空 说明
picture_id int 11 是 是 否 主键
create_time datetime 是 创建时间
type int 11 否 类型
foreign_id int 11 是 外键
path varchar 255 否 路径
thumbnail_path varchar 255 是 路径
md5 varchar 32 否 加密信息
width int 11 是 宽
height int 11 是 长
表3-17 tbl_weibo
列名 数据类型 长度 标识 主键 允许空 说明
id int 11 是 是 否 主键
create_time datetime 否
member_id int 11 否
type int 11 是
content varchar 1000 是
favor int 11 是
status tinyint 11 是
表3-18 tbl_weibo_comment
列名 数据类型 长度 标识 主键 允许空 说明
id int 11 是 是 否 主键
create_time datetime 否
member_id int 11 否
weibo_id int 11 否
comment_id int 11 是
content varchar 1000 是
status int 11 是
表3-19 tbl_weibo_favor
列名 数据类型 长度 标识 主键 允许空 说明
id int 11 是 是 否 主键
create_time datetime 是 创建时间
weibo_id int 11 是
member_id int 11 是

第五章 详细设计
5.1 数据库的连接
本系统设计主要包括数据库和前台软件。首先是将第三章中所描述的各个表结构在MySql中进行构建,以保证系统数据的存储。
而项目的启动及操作均要连接数据库才可进行,本文采用的是第一章中所描述的三个框架进行研发,即SpringMVC、Spring和Mybatis,简称SSM。选用此框架的原因主要有两个,第一个是三个框架具有很好的兼容性,同时是轻量级,并且可依据Spring和Mybatis对软件和数据库的操作;第二个是降低代码冗余,方便快捷开发。在SSM框架中,是以DI的方式来对数据库连接进行划分,主要包含JdbcTemplate、MybatisTemplate、SessionFactory三种,本项目在运行过程的操作数据有限,同时均是CRUD等基本操作,因此选用MybatisTemplate方式,而这种方式的优点是无需对MybatisDaoSupport类继承。具体配置连接如下:

d r i v e r C l a s s < / v a l u e > < / p r o p e r t y > < p r o p e r t y n a m e = " j d b c U r l " > < v a l u e > {driverClass}</value></property> <property name="jdbcUrl"><value> driverClass</value></property><propertyname="jdbcUrl"><value>{jdbcUrl}
u s e r < / v a l u e > < / p r o p e r t y > < p r o p e r t y n a m e = " p a s s w o r d " > < v a l u e > {user}</value></property> <property name="password"><value> user</value></property><propertyname="password"><value>{password}


上述配置内容包括驱动类、数据库URL、权限用户名和密码等,并且把相关连接信息保存在jdbc.properties中,以方便后期更改。之后需对spring的上下文配置到properties中,即PropertyPlaceholderConfigurer实例。之后在XML文件中以${key}的行驶读取对应的值,其中key是指所要取出值的属性名,并且以此进行配置文件的管理,即可更改系统的相关信息,而无需更改xml文件。
使用spring的DI和相关文件注入MybatisTemplate,之后设置会话工厂sessionFactory和show_sql等相关数据,同时进行映射路径的设置。最后通过MybatisTemplate的Dao实现注入。即:



以此实现了整体数据库的连接配置,并后期系统的研发过程中,可以对Dao层处理实现对数据库的相关操作。
4.2 首页模块
1)设计思路
考虑到系统的特点主要是以新闻浏览和新闻发布为主的平台,并且参考其他新闻网站的首页,将本系统的首页分为上中下三个布局,首页上部分是系统的登录、注册、退出等通用的系统功能导航以及系统中新闻类别导航,方便用户按类别搜索相关的新闻,同时为用户提供了搜索入口,用户可以输入新闻的名称进行模糊查询,这些是网站的头部。首页的中部是网站的最新的新闻、帖子和留言信息。首页的中间的右边是娱乐八卦发布界面,用户可以发布信息,但仅限于注册登录的会员用户,网站的游客不能再网站发表任何信息。
2)技术分析:
将编写完成的项目放入tomcat中,同时修改相关配置,之后进行启动后访问,即访问地址http://localhost:8080/,实现系统首页的加载,在首页的加载过程中通ajax发送了加载新闻、新闻分类和系统留言等信息。首先AJAX会向服务器发送请求获取所有的新闻分类信息,这个请求会被拦截并交给WeiboController.java文件中的list()方法处理,此方法查询出所有的新闻分类和分类下的新闻返回给前台,主要代码如下:
Page page = new Page(request);
Member loginMember = MemberUtil.getLoginMember(request);
int loginMemberId = loginMember == null ? 0 : loginMember.getId();
ResponseModel responseModel = weiboService.listByPage(page,0,loginMemberId,key);
model.addAttribute(“model”,responseModel);
List hotList = weiboService.hotList(loginMemberId);
model.addAttribute(“hotList”,hotList);
return MEMBER_FTL_PATH + “list”;
系统首页如图4-1所示:在这里插入图片描述
5.3 用户登录模块
登录是访问系统和核心基础功能,在系统的权限控制过程中,以此作为第一个判断门槛,系统的主要功能,包括新闻发布、审核、评论点赞均需要通过登录才可进行。
1)设计思路
本文所设计的角色主要有两种,即管理员和用户。为了促进社会主义和谐社会,保证其发布信息的正直正确性,登录需做帐号验证,同时管理员需对发布的信息做出评审和查看,判断其内容是否存在敏感词等,并根据其次数判断其目的性,以此对其帐号做出进一步的注销或警告的处理。同时依据角色进行权限的分配,并根据其权限使用其相关功能,本文是以管理员作为最高权限。
最后,登录界面是关乎整体美观性和体验度的评价,同时其也是使用和查看最为频繁的页面,因此需对其进行美观设计,采用Photoshop对其进行详细设计。
2) 技术分析
将编写完成的项目放入tomcat中,同时修改相关配置,之后进行启动后访问,即访问地址http://localhost:8080/,访问登录界面,在用户执行登录操作之前系统已经做了其他的请求处理,比如加载系统中的新闻分类和新闻信息并显示到页面中,游客就可以在不登录系统的情况下浏览系统的新闻信息,用户如果不想发布新闻可以直接关闭网页,新闻加载将会在后面介绍。用户打开系统首页后可以点“登录”,“登录”是一个指向登录页面的链接,点击就可以跳转到登录界面,“发布新闻”是一个添加新闻的连接,但是需要对用户的session做出是否过时。
在登录页面输入账户名密码,单击“登录”后即将登录请求发送到后台进行账号信息的判断,实现的方法是利用UserLoginInterceptor进行登录请求的拦截,并根据配置信息将请求交给LoginAction.java文件中的login()方法进项处理,此方法调用服务层的函数,将账户名密码与数据库中所保存的用户进行对照,如果有此账户信息,就返回匹配成功的个数,然后在评断查询该用户的状态字段,如果账户被注销则提示用户不能登录;如果账号没有被注销则用户登录成功并跳转到相应的界面;如果没有数据匹配就返回空值并提示用户"用户名或密码不存在"。
Map<String,String> config = configService.getConfigToMap();
String password = member.getPassword();
member.setPassword(Md5Util.getMD5Code(member.getPassword()));
Member findMember = memberDao.login(member);
if(findMember != null){
if(findMember.getStatus() == -1){
return new ResponseModel(-1,“该账户已被禁用”);
}
return new ResponseModel(3,“登录成功”,request.getServletContext().getContextPath()+“/member/”);
}
actionLogService.save(IpUtil.getIpAddress(request),0,ActionUtil.MEMBER_LOGIN_ERROR,“登录用户名:”+member.getName()+“,登录密码:”+password);
return new ResponseModel(-1,“用户名或密码错误”);
}
登录界面。如图4-2:在这里插入图片描述
4.4 用户注册模块
此功能是4.3功能的前提,也是项目的基本功能之一,游客仅有部分查看所发布出去的信息权限,而用户可以操作系统的功能。在注册是填写相关账户名和密码,并且以此最为登录的凭据,同时也是系统中的身份标识。
1)设计思路
通过此功能后的游客均会变成会员,并且具有相关的权限,而其输入的信息会保存到数据库中,由系统统一管理,注册时,需填写账户名密码等基本信息,同时还有邮箱、联系方式等,而其他不必要信息可在后期登录后填写,如性别、爱好等。注册完成后,可访问系统并操作相关功能。
2)技术分析
将编写完成的项目放入tomcat中,同时修改相关配置,之后进行启动后访问,即访问地址http://localhost:8080/,进入首页。用户首次访问系统时,可点击右上角“注册”按钮跳转至注册界面,也可以通过弹出来的登录窗口中的注册按钮访问。注册时填写的相关信息会在前台通过js校验后,再提交到后台进行二次校验,以保证信息的可靠性。而校验的内容主要包括用户名是否重复、密码与确认密码输入是否相同等等校验,同时保存时通过MD5加密,以防止被查看和盗取,加大其安全性。相关代码如下:
if(memberDao.findByName(member.getName()) != null){
return new ResponseModel(-1,“该用户名已被注册。”);
}
member.setRegip(IpUtil.getIpAddress(request));
member.setPassword(Md5Util.getMD5Code(member.getPassword()));
member.setAvatar(Const.DEFAULT_AVATAR);
if(memberDao.register(member) == 1){
actionLogService.save(member.getRegip(),member.getId(),ActionUtil.MEMBER_REG);
return new ResponseModel(2,“注册成功。”,request.getServletContext().getContextPath()+“/member/login”);
}
return new Response
在这里插入图片描述
4.5 新闻模块
新闻模块是新闻管理系统中最主要的模块,主要涉及新闻的发布,管理员可以修改系统的新闻,也可以删除,用户发布的新闻需要管理员审核通过后才能够在网站中显示。
1)设计思路
本系统是新闻管理系统,系统的中每个会员都可以发布自己的新闻,在网站的页面的上部提供发布新闻的链接,用户在登录状态下才能发布新闻,为了安全和个人利益,用户发布的新闻需要和用户的信息相关联,即新闻信息包含用户的id,用于区分新闻的所有者,方便记录用户日志。为了防止用户发布非法的新闻或者虚假的新闻,用户发布的新闻需要管理员审核通过才能显示在页面中。为了方便新闻管理,本系统将新闻进行分类管理,即用户在添加新闻时需要选择新闻的类别,这样可以类别搜索到新闻的信息。
为方面用户快速查找新闻,系统必须具备模糊搜索的功能,在网站的前台页面提供了用户搜索新闻的入口。用户可以直接输入新闻名称搜索,可以在某个类别下搜索新闻,也可以按照价格范围搜索新闻。
2)技术分析
用户发布新闻必须在登录的状态下,系统判断session是空提示用户登录,不为空可以打开发布新闻的链接,用户打开新闻添加页面时,系统会将新闻的所有分类加载到页面并显示在下拉框中,用户添加新闻时需要选择新闻的分类。
在新闻加载页面用户需要输入新闻的信息,新闻的信息是必填项,用户不填写系统发出提示信息。
为了用户更直观的看到新闻的外观,用户可以上传新闻的图片信息,用户上传的图片被保存在服务器中,
用户填写完合法的数据后系统会处理新闻添加的请求,将用户的新闻保存到新闻表中,审核状态为未审核,系统以自增字段作为新闻的编号,并将用户的id一起保存到新闻表中,新闻发布的主要代码如下:
return new ResponseModel(-2);
}
if(articleCate.getFid() == null){
articleCate.setFid(0);
}
if(articleCate.getFid() != 0){
ArticleCate fatherArticleCate = articleCateService.findById(articleCate.getFid());
if(fatherArticleCate == null){
return new ResponseModel(-1,“父级栏目不存在。”);
}
if(fatherArticleCate.getFid() != 0){
return new ResponseModel(-1,“只有顶级栏目才可以添加下级栏目”);
}
}
articleCateService.save(articleCate);
return new ResponseModel(3,“保存成功”);
添加成功后的新闻只能在用户的后台看到,网站的前台没有显示,管理员登录系统后可以审核新闻,审核通过后才能够显示在前台。如果新闻信息合法,管理员点击“通过”按钮审核成功,此过程就是将新闻的审核状态字段修改为2,通过审核后新闻就可以在前台显示。新闻审核主要代码如下:
if(member.getId().intValue() == groupTopic.getMember().getId().intValue() || member.getIsAdmin() == 1 ||
isManager || member.getId().intValue() == group.getCreator().intValue()){
if(groupTopicDao.audit(id) == 1){
return new ResponseModel(1,“审核成功”);
}else {
return new ResponseModel(-1,“审核失败”);
}
}
return new ResponseModel(-1,“权限不足”);
系统的前台为用户提供了新闻搜索的功能,包括所有新闻查询、类别查询、价格区间查询和关键词加类别的组合搜索。查询所有新闻就是通过sql语句查询新闻表中的所有的数据,再将数据加载到前台页面。
新闻查询的主要代码如下:
String hql=“from Product where stock>0 and state=”+Product.STATIC_PASS;
if(title!=null&&!“”.equals(title)){
hql+=" and title like ‘%“+title.trim()+”%’“;}
if(maxPrice!=null&&!”“.equals(maxPrice)){
hql+=” and newPrice <=“+maxPrice.trim();}
hql+=” order by createTime desc";
新闻页面显示如图4-4所示:在这里插入图片描述
4.6 用户中心模块
用户中心模块是对用户工作台的展示,如当前时间、新闻总署、评论总数、分录目录数等指标的展示,公告的展示。在这里插入图片描述
4.7 新闻管理模块
撰写新闻,如图是对新闻的主题、标题描述、新闻分类,新闻具体文图的内容。在这里插入图片描述
新闻的管理,对新闻的标题,作者,评论,浏览量的查询,可以编辑,查看,删除,如图。在这里插入图片描述
结论
本次系统的设计和研发,使得我更加明白了整体项目的研发过程,其步骤主要是线进行项目的需求分析,之后根据其业务逻辑做出功能分析,之后便是整体系统、数据库和详细设计,同时也了解到了后期功能的测试方法。并且在整体的毕设过程中,通过研究MySql和SSM框架的知识,使得我将所学的内容实用,同时个巩固了我的知识,同时也有了进一步的扩展。
在整个系统进行研发的前期,需对整体进行了解,以此才会知道设计的内容。从文献查找、设计、代码编写,再到系统测试,整个研发的过程中尽管遇到些许坎坷,但最终依靠这自己查阅相关资料和老师的辛勤教导、同学们的热心帮助,最终完成了整体项目的研发,这种体验和感受是前所为由的。
由于个人学识和技术的有限,本文所研发的系统与市场上类似的比较也颇有不足,但其核心的新闻和用户管理等基本内容均以完成,尽管对于在线交流的功能没能完成存在遗憾,这也是目前的一个小缺陷。
整个毕设过程中,让我感触最深的是学习能力和bug的处理方式。当出现bug时,应逐步排查,判断其出现的位置,之后对其进行解决。倘若问题太大时,可将其拆分成多个小问题,逐步解决。并且要学会使用百度等大神器,网上的资源有着大部分前辈的经验,并且每个人的编程逻辑和习惯都存在一定的差别,或许自己遇到的问题,别人早就遇到过,并且站在别人的角度上,或许更容易找出问题。在这个毕设中,我知道了自己哪方面的不足,并且在以后也会继续努力。
参考文献
[01] 刘娜.基于JavaWeb校园网上商店的设计与实现.长沙:湖南大学出版社,2013
[02] 阎宏.Java与模式.北京:电子工业出版社,2013
[03] 闫术卓.SpringMVC2技术详解:基于webwork核心的MVC开发与实践.北京:电子工业出版社,2012
[04] 孙鑫.Servlet/JSP深入详解—基于Tomcat的Web开发.北京:电子工业出版社,2011
[05] 王珊,萨师煊.数据库系统概论.北京:高等教育出版社,2010
[06] 石志国,崔林.动态网站编程[M].北京:清华大学出版社,2010.
[07] 范立锋,林果园.JavaWeb程序设计教程[M].北京:人民邮电出版社,2012
[08] 安志远.数据库系统原理及应用实训教程.北京:中国水利水电社,2010
[09] 肖金秀,冯沃辉.动态网页培训教程.北京:冶金工业出版,2013
[10] 孙卫琴.Tomcat与Java Web开发技术详解.北京:电子工业出版,2012
[11] Bruce Eckel.Thinking in Java.北京:机械工业出版社,2012
[12] DavidSchvltz.AnIntroductiontoHTMLandJavaScript[M] .London:Springer London Ltd,2013
[13] 耿祥义,张跃平.Java面向对象程序设计.北京:清华大学出版社,2012
[14] [美] Rashim Mogha,V.V.Preetham.Java Web服务编程[M].北京:清华大学出版社,2012

致谢
在过去的这两个多月里,幸运的完成了整个毕设,在这次的毕设过程中,由衷的感谢老师和同学们帮助,同时也感谢整个学习过程中教育我的老师,如果没有他们的帮助,相信我会在这个设计与研发的过程中走上许多的弯路,甚至后期也不能完成,因此非常的感谢老师们的教导。在未来我会更加努力的学习,信息管理技术是门很庞大的是科学技术,我的学习历程还很漫长,程序员的日子还比较久,我会一直努力学习的。

  • 16
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值