基于ssm的论坛系统的设计与实现
摘 要
早期的网络论坛系统已经诞生一段时间,随着互联网技术的发展,它已经从最初的简单电子公告板系统变成了一种丰富的论坛系统社区模型。人们通过论坛系统进行信息的获取、发布和交流已经成为一种普遍的社交方式,因为人们可以从论坛中获取一些新知识和启发,还可以发表自己的见解,和他人分享快乐。在信息化时代背景下,论坛可以提高人们工作学习的效率,为人们提供了一个学习和交流的平台,增加了社交渠道,改变了人与人之间的联系方式。本论坛系统针对的目标群体是在校大学生或者初入职场的技术人员而进行设计,意在为这些特定用户群体提供一个能畅享交流的平台。
本系统是基于B/S模式和MVC模式进行设计开发,将论坛系统业务逻辑、数据模型、数据展示进行了分离。系统采用Spring、SpringMvc、Mybatis框架进行开发,前端的页面展示使用了Bootstrap和JQuery框架还有JSP技术。数据存储使用MySQL数据库,然后采用Tomcat作为wed服务器。系统开发按照软件工程的思想进行分析设计,主要完成的功能包括帖子模块、用户模块、关注模块、收藏模块、评论模块、管理员管理模块。
本文对论坛系统需求分析、系统设计、系统实现、系统测试做了详细介绍,系统具有简单易用、界面友好以及可维护性高的特点,系统经过测试后运行良好。
关键字: 论坛系统;B/S模式;MVC模式;SSM;MySQL
The Design and Implementation of Forum System Based on ssm
Student: Teacher:
Abstract:The early Internet forum system has been born in some time. With the development of Internet technology, it has changed from the original simple electronic bulletin board system to a rich forum system community model. People use the forum system to obtain, publish and Communication has become a common way of socializing, because people can get some new knowledge and inspiration from the forum, and they can also express their opinions and share happiness with others. In the context of the information age, the forum can improve the efficiency of people’s work and study Provides a platform for people to learn and communicate, increases social channels, and changes the way people connect with each other. The target group of this forum system is designed for college students or technicians who are new to the workplace, and is intended to provide a platform for these specific user groups to enjoy communication.
This system is designed and developed based on B / S mode and MVC mode. The business logic, data model, and data display of the forum system are separated. The system is developed using Spring, SpringMvc, and Mybatis frameworks. The front-end pages to display uses Bootstrap and JQuery frameworks. There is also JSP technology, the data storage uses MySQL database, and then uses Tomcat as the wed server. The system development is analyzed and designed according to the software engineering idea. The main completed functions include post module, user module, attention module, collection module, comment module, management Management module.
This article introduces the forum system requirements analysis, system design, system implementation, and system testing in detail. The system has the characteristics of easy to use, friendly interface, and high maintainability. The system runs well after testing.
Key words:Forum System;B/S mode;MVC mode;SSM;MySQL
-
目 次
摘 要 I Abstract: II
1 绪论 1
1.1 研究背景和意义 1
1.2 国内外研究现状 1
1.3 本文主要研究内容 2
1.4 论文结构安排 2
1.5 本章小结 2 2 相关技术与开发工具介绍 3
2.1 相关技术简介 3
2.1.1 JSP和Bootstrap技术简介 3
2.1.2 B/S结构简介 3
2.1.3 MVC模式 3
2.1.4 SSM框架 4
2.2 MySQL数据库简述 4
2.3 开发工具概述 4
2.4 本章小结 5 3 系统需求分析 6
3.1 需求分析概述 6
3.2 功能性需求分析 6
3.2.1 用户模块 6
3.2.2 评论模块 7
3.2.3 收藏模块 7
3.2.4 帖子模块 7
3.2.5 关注模块 8
3.2.6 管理员管理模块 8
3.3 非功能性需求分析 9
3.3.1 系统兼容性需求 9
3.3.2 技术可行性 9
3.3.3 经济可行性 9
3.4 本章小结 10 4 系统设计 11
4.1 系统技术架构设计 11
4.2 系统整体功能结构设计 11
4.3 系统功能详细设计 12
4.3.1 用户模块功能设计 12
4.3.2 帖子模块功能设计 13
4.3.3 关注模块功能设计 14
4.3.4 收藏模块功能设计 15
4.3.5 评论模块功能设计 16
4.3.6 管理员管理系统功能设计 16
4.4 数据库设计 18
4.4.1 概念设计 18
4.4.2 逻辑设计 19
4.5 本章小结 22 5 系统实现 23
5.1 系统功能实现 23
5.1.1 用户模块功能实现 23
5.1.2 帖子模块功能实现 30
5.1.3 评论模块功能实现 36
5.1.4 关注模块功能实现 37
5.1.5 收藏模块功能实现 40
5.1.6 管理员管理系统功能实现 43
5.2 本章小结 47 6 系统测试 48
6.1 测试方法 48
6.2 系统功能性测试 48
6.2.1 帖子模块功能测试 48
6.2.2 用户模块功能测试 48
6.2.3 评论模块功能测试 49
6.2.4 关注模块功能测试 49
6.2.5 收藏模块功能测试 49
6.2.6 管理员管理系统功能测试 50
6.3 本章小结 50 7 总结与展望 51
7.1 总结 51
7.2 展望 51致 谢 52 参考文献 53
1 绪论
1.1 研究背景和意义
网络论坛系统已经产生一段时间,它最开始只是一个简单的电子公告板系统,论坛简述BBS,“Bulletin Board System”为它的英文名称,中文称之为“电子公告板”,是一款基于网络的应用软件,同时它也是一种在互联网上使用较广的信息服务系统[1]。随着时代的变迁,人们生活水平和现代互联网技术的快速发展,互联网已经普及到人们的日常学习、工作和生活当中,而过去很多网站系统内容都要用户注册登录后才能查阅,随着现在网络技术的进步,只需要打开相关网站系统,就可以浏览相关信息,给人们带来了很多的方便,人们通过网络可以分享自己的感想、知识、结交朋友,而网络社交平台多种多样,已经成为人们日常生活中必不可少的一部分,而论坛系统就是其中一种,论坛系统已经变得越来越普及,人们通过论坛系统进行信息的获取、发布和交流已经成为一种普遍的社交方式,因为人们可以从论坛中获取一些新知识和启发,还可以发表自己的见解,和他人分享快乐[2]。在信息化快速普及的时代背景下,论坛能够为人们提高工作学习的效率,我国目前知名的论坛系统有开源中国、知乎、CSDN、新浪等大型论坛,国外也有Facebook、twitter等广受群众喜爱的论坛,论坛为人们搭建了一个学习与交流的平台,增加了社交渠道,改变了人与人之间的联系方式。
本课题设计实现的论坛系统主要面向用户群体是在校大学生或者初入职场的技术人员,论坛群体有针对性,不像其他大型论坛一样涉及用户领域广泛,通过论坛浏览他人发表的文章可以从中获取一些感悟,使用户能共享信息,互相学习相关知识,分享学习心得和见解;其次系统采用软件工程的开发理念和流程来进行系统开发,让系统拥有可扩展性强、系统可复用性高、后期维护简单的特性。因此,设计和实现这样一个论坛系统是必要的。
1.2 国内外研究现状
国外的论坛系统诞生时间比较早,它可以追溯至20世纪80年代初,当时是由一位美国人开发的公告板程序,利用其自身的消息互传功能,让消息传递成为一种可能,当时需要彼此约定时间来通过邮件进行消息的传递,那是最早的论坛系统原型,当时的论坛系统只是用来发布信息,进行简单的单一话题交流,以及用来提出问题、解决问题[3]。随着互联网技术的发展,目前产生了诸如Facebook、twitter等论坛交流系统,国外的BBS论坛注重的是发表帖子的作者和回复帖子的读者关于某些事情的见解想法,对于国内的BBS,比较看重的是彼此在论坛上进行交流的方式[4]。目前国外对论坛系统的研究暂时是对人际关系等方面进行研究;国内大陆最早的论坛网站是北京长城站,它建于1991年,在当时互联网尚未普及人们的情况下,每天的访问量很低,只有十几个人[5]。现在国内的论坛系统,已经从最初的单一发帖交流功能随着互联网Web2.0技术的出现和推广,快速发展演变成具有多元化的功能论坛系统,社区论坛互动不断推出新的方式,当下除了论坛系统外,还有多元化的信息传输平台,比如QQ、微信、微博等平台,目前国内论坛系统除了一些综合类的论坛外还出现了各大高校的论坛,例如水木清华、北大未名、北邮人论坛等,信息化时代背景下,论坛系统已经逐渐成为目前互联网重要的应用之一[6]。国内目前对论坛系统的研究体现在研究论坛系统的发展历史、操作应用、研究论坛系统主要面对的用户群体、以及研究论坛系统对人们生活和日常交流所产生的改变[7]。
1.3 本文主要研究内容
本文研究的内容是开发出一个方便在校大学生或者初入职场的技术人员进行学习和交流的论坛系统平台,系统采用B/S模式实现,其优点是通用性强,比较简单,能让用户在浏览器和服务器之间可以进行动态的交互。本文主要介绍了该论坛系统分析、设计、实现的整个过程,需要完成的论坛系统包含前台用户系统和后台管理系统,其中前台用户系统功能包括用户模块、帖子模块、关注模块、评论模块、收藏模块,后台管理系统功能包括板块管理、帖子管理、用户管理。研究内容主要按照软件工程开发思想,进行系统需求分析,介绍了系统的功能需求、系统数据库设计、系统结构设计、系统编码实现、系统测试。
1.4 论文结构安排
本课题论文总体分为七章,主要介绍了系统的开发背景、采用的技术、需求分析、系统设计和实现、系统测试、最后进行了总结。结构以及内容具体安排如下:
第一章绪论,描述了课题的研究背景和意义、国内外研究现状、本课题的研究内容、介绍了论文的结构。
第二章相关技术和开发工具介绍,主要简述了开发论坛系统中使用到的关键技术以及开发过程用到的开发工具。
第三章系统需求分析,主要简述了系统的整体需求和功能性需求分析。
第四章系统设计,主要进行系统的功能模块设计和系统数据库设计。
第五章系统实现,主要简述系统主要功能模块实现过程。
第六章系统测试,对系统进行功能性测试。
第七章总结与展望,对本次系统开发进行总结,并做出对系统的未来展望。
1.5 本章小结
本章主要介绍了论坛系统的研究背景和研究现状,并介绍了论坛系统的主要目标和拟解决的问题,然后对论文主要研究的内容和组织结构进行了整体概述。
2 相关技术与开发工具介绍
2.1 相关技术简介
本节主要对开发论坛系统使用到的技术进行介绍,主要介绍B/S体系结构、MVC模式、以及SSM框架,还介绍了用于存储数据的MySQL数据库,并对开发工具进行简单描述。
2.1.1 JSP和Bootstrap技术简介
JSP是Java Server Page的缩写,它是基于Java Servlet和整个Java体系的动态网页开发技术,由HTML代码和嵌入的JAVA代码构成,利用该技术可以构建安全、跨平台的动态网站,它以Java技术为基础,然后做了许多改变,拥有动态页面和静态页面分离、无需依赖硬件平台以及编译后运行的优点。它能让动态网站的网页代码编写变得更加容易、在功能方面更强、可扩展性更好,然后能支持可重用的组件,比如JavaBean组件,可以利用这些组件去执行应用程序中复杂的处理,由于是基于Java技术的,所以能进行移植和重用,并且一次编写,能多处运行。同时拥有丰富的标签库,利用这些标签可以对JavaBean组件进行访问和实例化[8]。
Bootstrap技术它是由Twitter设计并开发的一种网页开发框架,它其中包括了HTML、CSS等技术。这个框架的设计目的是用来解决不同设备下的兼容问题,利用其开发的网页能适应不同的设备,从而让网页开发变得简单,基于这个框架下开发的网页具有可维护性,它还提供了多样性的开发模块,能更好的帮助开发人员做好网页开发工作,因此选择该框架作为论坛系统的网页开发框架能提高开发效率和减少工作量[9]。
2.1.2 B/S结构简介
B/S体系结构,它是一种浏览器服务器结构,由C/S结构演变而来,它无需客户端程序,这能降低软件开发成本,通过浏览器向wed服务器进行数据请求,主要的业务逻辑都在wed服务器端进行实现,wed服务器处理用户的访问请求,然后操作数据库取出相关数据,再把结果返回给用户端浏览器进行回显[10]。这种结构的优点就是能让用户随时进行软件操作,用户端只需要安装有浏览器就可以访问系统网站数据并获取相关结果,给用户的交互体验良好,通过这种结构的使用能减轻软件开发人员的压力,它具有易扩展、维护简单、分布性的优点,对用户端的硬件配置要求不高。B/S结构示意图如图2-1所示:
图2-1 B/S结构示意图
2.1.3 MVC模式
MVC是Model、View、Controller三个单词的缩写,它是一种设计模式,由模型、视图、控制器组成,其中模型用来存储数据以及处理用户的业务逻辑请求,模型能为多个视图提供数据,它的代码只需要编写一次就能被多个视图重用,这样可以减少代码的重复性。控制器则用来进行请求和数据的转发,它接收请求后再把请求转发给相关模型进行处理,并把处理后的相关结果返回给相关视图进行显示,视图是用来向控制器提交请求数据以及进行结果显示的,这三个部分用低耦合的方式进行共同工作,以便提高应用程序的扩展性和维护性。MVC模式具有快速部署、较低的生命周期成本,低耦合以及高可用等特点,因此,采用MVC模式进行论坛系统的开发,能够提升开发效率以及方便后期的测试[11]。
2.1.4 SSM框架
SSM框架是一种轻量级的开发框架,由Spring、SpringMVC、MyBatis三个框架组成,它是一种典型的MVC框架[12],其中Spring框架通过注解和映射来管理SpringMVC和MyBatis框架,它提供面向切面编程和控制反转机制,以及能整合多种持久化框架,整合了视图层、业务层、持久层的资源,能够为企业级应用开发提供更多的可能;而SpringMVC框架是基于MVC思想的应用框架,它是Spring的一个子框架,用来控制业务之间的跳转,很好的将模型、视图、控制器进行分离,其包含有多种视图技术,主要由DispatcherServlet、处理器映射、控制器、视图解析器、视图组成;然后Mybatis框架是持久层框架,通过配置文件与数据库进行映射,对数据写入或取出,它包含DAO组件和SQL Map组件两大类,其中DAO组件把应用程序的数据访问层和持久层的表示方式和位置进行抽象化,让其分离应用程序的业务逻辑,而SQL Map组件通过XML配置文件或者注解的方式把JavaBean、XML、Map映射成SQL语句,然后通过执行SQL语句把结果映射成Java对象并返回,SQL Map组件能很大程度上减少了访问数据库的代码[13]。
2.2 MySQL数据库简述
MySQL数据库是一种开源免费且属于轻量级的关系型数据库,它具有体积小、速度快、成本低的特点,能够很好的应用于中小型网站开发中,并且还为多种编程语言提供了API,很多中小型网站在满足其性能的前提下为了减少开发成本,都会选择MySQL数据库进行数据存储,在安全方面,它允许用户进行系统的权限设置,并且采用了线程技术,能让系统运行速度更快,因此综合这些特点,在进行论坛系统开发时采用MySQL数据库进行数据存储是一个好的选择[14]。
2.3 开发工具概述
在开发工具选择方面,后台功能开发依然是选择目前较为广泛使用的Eclipse,它相比MyEclipse的好处是它属于免费的,而且占用内存相对小一些,MyEclipse大多数现在都会收费其破解版也是十分难找,并且MyEclipse是封装好了的,比较笨重不利于学习者学习掌握,Eclipse与MyEclipse两者的功能并没有太大区别,综合考虑后选择Eclipse作为后台开发工具;而在前台开发方面选择的工具是HBuilder,这款工具因为其良好的界面以及操作,在编码方面能进行提示,并且支持随时预览网页效果,因其能给网页开发人员带来良好的体验并能提高工作效率,所以它也是目前较为受欢迎的网页开发工具,因此在前台网页开发方面选择它作为开发工具。
2.4 本章小结
本章主要介绍了开发论坛系统所采用的相关技术,包括前台和后台开发技术,并对用来储存数据的关系型数据库MySQL进行了介绍,还对开发工具进行了简要描述,基于这些技术的了解和描述,对接下来的需求分析阶段以及后续系统设计和实现方面起到很大的帮助。,
3 系统需求分析
3.1 需求分析概述
需求分析包括功能性需求和非功能性需求分析,它在软件开发过程中是最重要的一个环节,只有需求分析清楚了,后续的开发过程才会顺利进行,在需求分析阶段,主要是通过前期调研和用户咨询沟通,得到将要开发的软件需求功能,然后分析出软件需要解决的问题,因此这个阶段是系统设计的重要基础和条件。本章通过前期网上的相关论坛系统资料调查收集和向相关论坛用户群体进行询问,得出将要开发的论坛系统的基本功能要求,然后通过用例图分析介绍对系统功能性需求进行了说明,同时还分析介绍了系统的非功能性需求。
3.2 功能性需求分析
通过前期的调查分析,了解到使用本系统的主要角色有游客、注册用户、管理员,其中游客只具备有贴子浏览和查看他人动态的权限,可通过注册成为论坛用户,然后得出本论坛系统应该要包含用户系统和管理员管理系统这两大子系统,其中用户系统需要完成的功能包括用户模块、评论模块、帖子模块、收藏模块、关注模块;而管理员管理系统则应该完成的功能包括板块管理、帖子管理、用户管理三大模块。
3.2.1 用户模块
用户模块主要包括的功能有用户注册、登录、退出、个人主页信息查看、他人主页信息查看、个人资料编辑、基本信息设置;其中登录、退出等功能必须要在用户注册的前提下才能进行操作,注册需要输入用户名、密码、邮箱信息,个人主页查看包括动态、回复、评论、收藏、关注信息查看,他人主页查看只能查看他人动态,个人资料编辑包括用户头像和姓名等信息的修改,基本信息设置主要是用户名和密码以及邮箱的修改。用户模块用例图如图3-1所示:
图3-1 用户模块用例图
3.2.2 评论模块
评论模块主要功能有发表评论、查看评论、删除评论,其中发表和删除评论的前提是用户已经登录,查看评论包含自己所发帖子评论和他人帖子下的评论。评论模块用例图如图3-2所示:
图3-2 评论模块用例图
3.2.3 收藏模块
收藏模块主要包括功能有帖子收藏、取消收藏、查看收藏信息,这些操作的前提都是要先登录系统才能进行,收藏模块用例图如图3-3所示:
图3-3 收藏模块用例图
3.2.4 帖子模块
帖子模块需要完成的功能包括帖子浏览、搜索、发表、删除、修改,其中首页所有帖子浏览和搜索无需登录就可以进行操作,搜索帖子实现通过帖子标题进行模糊查询,而帖子发表、删除、修改需要先登录系统后才能进行,帖子发表可以为帖子增加配图,一条完整的帖子包括帖子标题、所属板块、发表时间、帖子内容、配图等信息,可以修改个人帖子以及删除所发表的帖子,删除所发表的帖子会把帖子的评论和收藏信息进行删除,帖子模块用例图如图3-4所示:
图3-4 帖子模块用例图
3.2.5 关注模块
关注模块功能包括关注他人、取消关注、查看关注信息,这些功能的前提是用户注册并登录到系统,其中当用户是自己时,不能关注自己,只能关注他人,关注模块用例图如图3-5所示:
图3-5 关注模块用例图
3.2.6 管理员管理模块
管理员管理主要包括用户管理、帖子管理、板块管理功能,其中用户管理主要包括查看和删除功能、帖子管理主要是进行审核和查看、板块管理包括新增板块、删除板块、修改板块、查看板块功能,这些功能的操作前提是需要使用管理员账号进入到后台管理界面才能进行操作。管理员管理模块用例图如图3-6所示:
图3-6 管理员管理模块用例图
3.3 非功能性需求分析
3.3.1 系统兼容性需求
系统兼容性需求是指系统能够在目前主流的浏览器上都能稳定运行,视觉上的差异没有太大变化,通过前期调研,为了能让系统兼容目前主流的浏览器,给用户更好的体验,系统在设计实现过程中通过前端的页面设计和优化来让系统兼容IE、谷歌、火狐等浏览器,保证在视觉上差异不大。
3.3.2 技术可行性
随着互联网技术的发展,目前有很多成熟的开发技术可以进行论坛系统的开发,从硬件上来说,大容量高速的硬盘以及网络速度的提高,目前的硬件水平是能够满足开发和用户需求的,这为软件开发提供了基础保障。从软件方面来说,开发该系统所需的编程语言环境和数据库技术都已经很成熟,能够为大量的存储数据提供支撑,该系统采用Spring、SpringMvc、MyBatis框架进行后台开发,减少了很多重复性工作,其中SpringMvc框架很好的将模型、视图、控制器进行分离,减少代码耦合、提高代码复用性,而Spring框架通过注解和映射对SpringMvc、MyBatis框架进行了很好的管理,然后使用MyBatis框架进行数据持久化操作,减少开发人员的工作量。所以在这些软硬件技术的支持下,这些条件是能够满足本论坛系统开发的。
3.3.3 经济可行性
通过前期的调查分析,开发本系统所需的参考资料以及软硬件资源都是可以能够获取的,参考资料可以通过书籍或者是网络工具获取,软硬件资源同样不需要花费很多经济成本,而对于用户来说,用户只需要在自己本地安装有wed浏览器就可以进行对论坛系统的访问,然后可以进行登录、发帖等操作。因此开发该系统的经济成本很低,所以综合来看,开发该系统是可行的。
3.4 本章小结
本章通过对系统进行功能性需求分析和非功能性需求分析,来完成整个论坛系统的需求分析。功能性需求分析通过对系统的各个功能模块进行分析讨论,然后通过系统功能模块用例图进行描述。非功能性需求分析从经济可行性、技术可行性以及系统兼容性这三方面来对系统进行一个详细介绍描述,最后完成了论坛系统的整体需求分析,为后续的系统设计提供了良好的基础。
4 系统设计
4.1 系统技术架构设计
本系统基于B/S体系结构和MVC编程思想进行设计开发,前端采用JSP、JQuery、BootStrap技术进行开发,后台使用Java编程语言,基于SSM框架进行开发,系统分为三层体系结构,上层是表现层,中间层是业务逻辑层,底层是持久层,以TomCat8.5作为wed服务器,采用MySQL作为数据存储的数据库,Eclipse作为主要开发工具,通过浏览器和服务器进行数据交换,从而实现动态页面显示。系统架构图如图4-1所示:
图4-1 系统架构图
4.2 系统整体功能结构设计
本论坛系统完成的功能包含用户系统和管理员管理系统这两大子系统,其中用户系统需要完成的功能包括用户模块、评论模块、帖子模块、收藏模块、关注模块;而管理员管理系统则应该完成的功能包括板块管理、帖子管理、用户管理三大模块。用户系统功能结构图如图4-2所示:
图4-1 用户系统功能结构图
管理员管理系统功能结构图如图4-2所示:
图4-2 管理员管理系统功能结构图
4.3 系统功能详细设计
本节主要对系统功能模块详细设计过程进行描述,主要有前台用户系统中的用户模块、帖子模块、关注模块、收藏模块、评论模块以及后台管理系统中的管理员管理模块设计,下面通过流程图对每个功能模块进行分析设计。
4.3.1 用户模块功能设计
用户模块需要完成的功能有用户注册、登录、退出、个人主页信息查看、他人主页信息查看、个人资料编辑、基本信息设置;其中登录、退出等功能必须要在用户注册的前提下才能进行操作,注册需要输入用户名、密码、邮箱信息,注册用户会进行验证,不允许注册已有的用户名,个人主页信息查看包含有动态、关注信息、收藏信息等内容,个人资料编辑可以修改用户头像、简介等信息,基本信息设置可以修改密码等信息;用户模块主要参与者是游客和已注册用户,用户模块功能流程图如图4-3所示:
图4-3 用户模块功能流程图
4.3.2 帖子模块功能设计
帖子模块需要完成的功能包括帖子浏览、搜索、发表、删除、修改,其中首页所有的帖子浏览和搜索无需登录在主界面就可以进行操作,主界面的搜索帖子功能实现通过帖子标题进行模糊查询,而帖子发表、删除、修改需要先登录系统后才能进行,帖子发表可以添加配图、选择所属板块等信息操作,帖子删除会删除该帖子下的所有评论和收藏信息,帖子修改可以更新帖子标题和所属板块等信息,帖子模块主要用于用户对帖子进行一系列操作,帖子功能流程图如图4-4所示:
图4-4 帖子功能流程图
4.3.3 关注模块功能设计
关注模块功能包括关注他人、取消关注、查看关注信息,这些功能的前提是用户注册并登录到系统,其中当登录用户是发帖人时,不能关注自己,只能关注他人,关注他人和取消关注他人都会更新个人主页的关注列表,在个人主页的关注列表中可以看到被关注者有多少人关注,还可以查看有多少人关注自己,还可以点击被关注者头像查看他人主页信息,关注模块功能流程图如图4-5所示:
图4-5 关注功能流程图
4.3.4 收藏模块功能设计
收藏模块主要包括完成帖子收藏、取消收藏、查看收藏信息三个子功能,这些操作的前提都是要先登录系统才能进行,收藏模块功能流程图如图4-6所示:
图4-6 收藏模块功能流程图
4.3.5 评论模块功能设计
评论模块主要完成发表评论、查看评论、删除评论三个子功能,其中发表评论的前提是用户已经登录,删除评论也是在登录后才能进行操作。评论模块功能流程图如图4-7所示:
图4-7 评论模块功能流程图
4.3.6 管理员管理系统功能设计
管理员管理系统主要完成用户管理、帖子管理、板块管理功能这些功能的操作前提是需要使用管理员账号进入到后台管理界面才能进行操作。管理系统管理员登录流程图如图4-8所示:
图4-8 管理系统管理员登录流程图
用户管理主要完成用户信息查看和删除用户功能,其中删除用户会给予相关提示询问是否删除,删除后更新用列表。用户管理流程图如图4-9所示
图4-9 用户管理流程图
帖子管理包含帖子查看和审核,审核通过更新状态来实现。帖子管理流程图如图4-10所示:
图4-10 帖子管理流程图
板块管理包含新增、修改、删除、查看四个子功能模块,其中删除板块操作会给予提示询问,是否确定删除,如果确定就删除该板块,取消就返回板块列表。板块管理流程图如图4-11所示:
图4-11 板块管理流程图
4.4 数据库设计
数据库是整个论坛系统的基础,负责存储系统的所有数据,合理的数据库设计能够保证系统稳定正常运行,数据库设计包含概念设计和逻辑设计,其中概念设计是根据系统结构需求分析出相关的实体,并通过E-R图来构建好实体间的联系,而逻辑设计是把概念设计转换为相应的数据模型表结构[15]。
4.4.1 概念设计
依据系统的需求分析和功能设计,分析出系统组成的实体有用户、帖子、管理员、收藏、关注、板块、评论、头像。这些实体之间的联系为:一个用户对应一个头像,一个头像对应一个用户,一个用户可以发表多条帖子,一条帖子对应一个用户,一个用户可以发表多条评论,一条评论对应一个用户,一个用户可以关注多个用户,一个用户可以被多个用户关注,一个用户可以收藏多条帖子,一条帖子可以被多个用户收藏,一条帖子可以有多条评论,一条评论对应一条帖子,一个板块可以有多条帖子,一条帖子对应一个板块,管理员管理多条帖子、多个用户、多个板块。
系统E-R图如图4-12所示:
图4-12 系统E-R图
4.4.2 逻辑设计
按照前面分析出的系统实体之间的E-R图关系,可以把实体E-R图转换成对应的数据库表,本系统共涉及到8张表,分别是用户信息表(user)、帖子信息表(article)、评论信息表(comment)、板块信息表(plate)、用户头像信息表(via)、关注信息表(attention)、收藏信息表(collect)、管理员信息表(admin)。数据库表结构设计如下:
(1)用户信息表(user)主要由用户id、姓名、年龄、性别、密码、邮箱、住址、简介、注册时间这些字段组成,一条记录表示一个用户的信息。具体表结构如表4-1所示:
表4-1 用户信息表(user)
字段名 数据类型 是否允许为空 说明 备注
userid int(11) 否 用户id 主键
username Varchar(45) 否 用户姓名
age int(11) 是 用户年龄
password varchar(45) 是 密码
sex varchar(255) 是 性别
email varchar(45) 是 邮箱
family varchar(45) 是 住址
intro varchar(255) 是 简介
time timestamp 否 注册时间
(2)帖子信息表(article)主要由帖子编号、标题、内容、配图、板块名、发表时间、发帖人id、发帖人姓名、审核状态(0为待审核,1为通过审核,2为未通过审核,默认为0)这些字段组成,一条记录表示一条帖子信息。具体表结构如表4-2所示:
表4-2 帖子信息表(article)
字段名 数据类型 是否允许为空 说明 备注
fid int(11) 否 帖子id 主键
titles varchar(100) 否 帖子标题
fcontent varchar(2000) 否 帖子内容
photo varchar(255) 是 帖子配图
bname varchar(255) 否 所属板块名
time timestamp 否 发帖时间
userid int(11) 否 发帖人id 外键
username varchar(45) 否 发帖人姓名
status int(11) 否 帖子审核状态(0为待审核,1为通过审核,2为未通过审核,默认为0)
(3)评论信息表(comment)主要由评论编号、内容、评论者id、被评论帖子编号、评论时间这些字段组成,一条记录表示一条评论信息。具体表结构如表4-3所示:
表4-3 评论信息表(comment)
字段名 数据类型 是否允许为空 说明 备注
pid int(11) 否 评论id 主键
pcontent varchar(400) 否 评论内容
userid int(11) 否 评论者id 外键
fid int(11) 否 被评论帖子id 外键
time timestamp 否 评论时间
(4)板块信息表(plate)主要由板块编号、名称、创建时间这些字段组成,一条记录表示一个板块信息。具体表结构如表4-4所示:
表4-4 板块信息表(plate)
字段名 数据类型 是否允许为空 说明 备注
bid int(11) 否 板块id 主键
bname varchar(255) 否 板块名字
btime timestamp 否 板块创建时间
(5)收藏信息表(collect)主要由收藏编号、收藏者id、被收藏帖子id这些字段组成,一条记录表示一个用户对一条帖子的收藏信息,具体表结构如表4-5所示:
表4-5 收藏信息表(collect)
字段名 数据类型 是否允许为空 说明 备注
sid int(11) 否 收藏id 主键
userid int(11) 否 收藏者id 外键
fid int(11) 否 被收藏帖子id 外键
(6)关注信息表(attention)主要由关注编号、关注者id、被关注者id这些字段组成,一条记录表示一个用户对另一个用户的关注信息,具体表结构如表4-6所示:
表4-6 关注信息表(attention)
字段名 数据类型 是否允许为空 说明 备注
gid int(11) 否 关注id 主键
userid int(11) 否 主动关注者的id 外键
beuserid int(11) 否 被动关注者的id 外键
(7)用户头像信息表(via)主要由用户id、用户头像这些字段组成,一条记录表示一个用户的头像信息。具体表结构如表4-7所示:
表4-7 用户头像信息表(via)
字段名 数据类型 是否允许为空 说明 备注
userid int(11) 否 用户id 主键 外键
photo varchar(255) 否 用户头像
(8)管理员信息表(admin)主要由管理员编号、管理员姓名、管理员密码、管理员注册时间这些字段组成,一条记录表示一个管理员的信息。具体表结构如表4-8所示:
表4-8 管理员信息表(admin)
字段名 数据类型 是否允许为空 说明 备注
aid int(11) 否 管理员id 主键
aname varchar(255) 否 管理员名称
apassword varchar(255) 否 管理员密码
atime timestamp 否 注册时间
4.5 本章小结
本章通过对论坛系统技术架构、整体功能结构设计、系统功能详细设计以及数据库设计来完成整个系统设计,其中功能详细设计通过系统功能流程图进行描述,而数据库设计通过系统E-R图和数据库表来进行分析描述,系统设计能够为接下来的系统功能实现提供良好的基础。
5 系统实现
5.1 系统功能实现
系统实现主要是按照前期的系统详细设计来进行编码实现,主要介绍每个功能模块的具体实现过程设计,包含有贴子模块、用户模块、评论模块、关注模块、收藏模块、管理员管理这些功能模块。
5.1.1 用户模块功能实现
用户登录功能通过使用已经注册过的账号进行登录,登录界面如图5-1所示:
图5-1 登录界面
首先输入账号信息后,点击登录向UserController的getLoginAjax()方法提交post请求,并向该方法传递name(用户名)、password(登录密码)作为参数,封装在user中;getLoginAjax ()方法在收到请求后,调用UserService的getUser()方法,该方法再调用UserMapper的selectByUser()方法查询用户表user,在UserController中判断数据库查询结果,然后把查询结果返回给前台作出对应页面变化。主要代码如下:
user.setName(request.getParameter(“name”));
user.setPassword(request.getParameter(“password”));
//按用户名密码查询
List listUser = userService.getUser(user);
if (!listUser.toString().equals(“[]”)) {
int userid = listUser.get(0).getUserid();//获取第一个用户的id
String name = listUser.get(0).getName();
String password = listUser.get(0).getPassword();
String email = listUser.get(0).getEmail();
map.put(“userid”, userid);
map.put(“username”, name);
map.put(“password”, password);
map.put(“email”, email);
return “OK”;//返回json数据
用户注册功能通过登录界面的注册链接进行点击触发注册模态框来到注册界面,然后输入相关信息进行注册后获得登录进入系统的普通用户权限,注册界面如图5-2所示:
图5-2 用户注册界面
首先注册界面输入完信息后点击注册按钮,向UserController的setSignUp()方法提交post请求,并向该方法传递name(用户名)、password(登录密码)、email(邮箱)作为参数,封装在user中。setSignUp()方法在接收请求后,首先调用UserService的getUserName方法查询判断该用户名是否已经注册存在,若存在则把查询结果返回给前台并提示用户,若不存在则再调用UserService的setUser()方法,该方法再调用UserMapper的insert()方法向用户表user中新增一条记录,将操作结果返回给前台,若注册成功前台页面自动登录账号,否则提示用户注册失败的相关提示信息。主要代码如下:
user.setName(request.getParameter(“name”));
user.setPassword(request.getParameter(“pass”));
user.setEmail(request.getParameter(“email”));
//判断该用户是否已经存在
if (userService.getUserName(user).toString().equals(“[]”)&&request.getParameter(“name”)!=“”) {
//注册到系统
userService.setUser(user);
//按用户名查询
List listUser = userService.getUserName(user);
int userid = listUser.get(0).getUserid();
String name = user.getName();
String password = user.getPassword();
String email = user.getEmail();
map.put(“userid”, userid);
map.put(“username”, name);
map.put(“password”, password);
map.put(“email”, email);
return “OK”; }
查看个人主页信息通过点击首页登录显示的用户名,然后点击选择我的主页,向UserController的getMyself()方法提交post请求,getMyself()方法在session域里获取读取用户的userid,会将userid作为参数调用UserService的getUserId()方法进行处理,然后返回一个User对象,将结果返回给前台页面,展示出个人信息。个人主页界面如图5-3所示:
图5-3 个人主页界面
主要代码如下:
//获取当前会话的用户id
int userid=(int) session.getAttribute(“userid”);
/按userid查询用户信息/
List myListUser = userService.getUserId(userid);
if (myListUser.get(0).getSex() == null) {
myListUser.get(0).setSex(“保密”); }
if (myListUser.get(0).getIntro() == null) {
myListUser.get(0).setIntro(“无”); }
map.put(“myListUser”, myListUser.get(0));
编辑个人资料包含两方面,一方面是对头像进行修改,另一方面是对年龄、性别、家庭住址、个人简介方面信息修改,在登录状态下进入到我的主页界面中就可以进行相关操作;首先点击编辑资料按钮,在编辑界面进行个人信息更新后,点击保存按钮后向UserController的updateUser()方法提交post请求,并向该方法传递age(用户年龄)、sex(用户性别)、family(家庭住址)、intro(个人简介)作为参数,封装在user中,updateUser()方法在收到请求后,从session域中获取当前登录用户的userid,将参数设置到User对象中并调用UserService的updateUser()方法进行处理,然后将操作结果返回给前台页面作出相应信息变化。编辑个人资料界面如图5-4所示:
图5-4 编辑个人资料界面
主要代码如下:
@RequestMapping(“/updateUser”)
public ModelAndView UpdateUser(User user) {
userService.updateUser(user);
//重定向到getMyself这个方法
return new ModelAndView(“redirect:/userController/getMyself”); }
编辑头像操作,在个人主页中点击头像即可来到更新头像界面,然后重新选择头像,点击保存后,向ViaController的setUserPhoto方法提交post请求,并把头像作为文件的形式上传,setUserPhoto收到请求后,先是封装上传的文件路径,并定义新文件名来避免重复,同时获取上传文件的原始文件名,从session域中获取当前登录用户的userid,将参数设置到Via对象中,然后判断用户是否上传过头像,通过userid作为参数去调用ViaService的getVia方法进行查询,并返回相关查询结果,如果未上传过头像则进行新增操作,Via对象作为参数调用ViaService的setUserPhoto方法去处理;如果已经上传过头像,则进行更新操作,首先获取要删除用户对应的头像的文件名,然后删除原有用户头像,接着就是把Via对象作为参数调用ViaService的updateVia方法进行相关操作。编辑头像界面如图5-5所示:
图5-5 编辑头像界面
主要代码如下:
String filePath = PathUtil.getCommonPath()+PathUtil.getUserPath();
//用于存放新生成的文件名字(不重复)
String newFileName = null;
//只有登录的时候才能进入该页面,故不用判断是否登录,获取用户id,更新Via对象信息
int userid=(int) session.getAttribute(“userid”);
Via via=new Via();
via.setUserid(userid);
// 获取上传图片的文件名及其后缀(获取原始图片的拓展名)
String fileName = file.getOriginalFilename();
//如果该用户还没有上传过头像,则进行新增操作
if (viaService.getVia(userid)==null) {
//选择了头像的情况下
if(!fileName.equals(“”)) {
/*生成新的文件名字(不重复),表示通用唯一标识符(UUID)的类,UUID表示一个128位的值
获取伪随机生成的UUID的静态工厂。 */
newFileName = UUID.randomUUID() + fileName;
// 封装上传文件位置的全路径
File targetFile = new File(filePath, newFileName);
// 把本地文件上传到封装上传文件位置
file.transferTo(targetFile);
via.setPhoto(newFileName);
// 将via保存到数据库
viaService.setUserPhoto(via); }
//如果该用户上传过头像,则进行修改操作
} else {
//选择了头像的情况下
if(!fileName.equals(“”)) {
// 获取要删除用户对应的头像的文件名(通过userid获取头像信息)
String fileNameNew = viaService.getVia(userid).getPhoto();
// 头像上传文件位置的全路径
File targetFile = new File(filePath, fileNameNew);
//删除用户对应的头像图片(实际删除)
targetFile.delete();
//生成新的文件名字(不重复)
newFileName = UUID.randomUUID() + fileName;
// 封装上传文件位置的全路径
targetFile = new File(filePath, newFileName);
// 把本地文件上传到封装上传文件位置
file.transferTo(targetFile);
via.setPhoto(newFileName);
// 将via保存到数据库(修改)
viaService.updateVia(via); }
基本信息设置,点击登录后的用户名选择设置,然后会来到基本信息设置界面,可以进行用户名、密码、邮箱信息的修改,基本信息设置界面如图5-6所示:
图5-6 基本信息设置界面
首先在信息设置界面更新完信息后点击保存按钮后,向UserController的updateUserSetup方法提交post请求,并把用户名(username)、密码(password)、邮箱(email)作为参数传递,封装在User对象中,然后在该方法中获取User对象中的用户名、密码、邮箱并与session域里的用户名、密码、邮箱进行比较,然后通过Article对象修改当前用户所发帖子的用户名和用户id,接着判断是否更改过相关信息,然后把User对象作为参数,通过调用UserService中的updateUserSetup方法,来更新user表信息;然后通过调用ArticleService中的updateArticleSetup方法进行article表中的username修改,主要代码如下:
boolean name=user.getName().equals(session.getAttribute(“username”));
boolean password=user.getPassword().equals(session.getAttribute(“password”));
boolean email=user.getEmail().equals(session.getAttribute(“email”));
//修改当前用户所发帖子的用户名和用户id 同步信息
Article article = new Article();
article.setUserid(user.getUserid());
article.setUsername(user.getName());
if(name && password && email) {
System.out.println(“用户没改动任何信息,不做数据库修改工作。”);
}else{
//1 修改user表
userService.updateUserSetup(user);
//2 修改article表中的username 保证信息同步
articleService.updateArticleSetup(article);
map.put(“username”, user.getName());
map.put(“password”, user.getPassword());
map.put(“email”, user.getEmail()); }
查看他人主页在首页进行帖子浏览时,通过点击用户头像或者名字就可以进行他人主页信息查看,首先在首页点击用户名或者头像时,通过获取userid作为参数,传递给UserController中的getOthers方法,然后判断是不是当前登录用户,如果是的话就跳转到个人主页,不是则通过userid查询用户信息。他人主页界面如图5-7所示:
图5.7 他人主页界面
主要代码如下所示:
//如果该用户是登录用户,则回到“个人主页”
if(session.getAttribute(“userid”)!=null && session.getAttribute(“userid”).equals(userid)) {
return “redirect:/userController/getMyself”;
}else {
//按userid查询用户信息
List othersListUser = userService.getUserId(userid);
//判断个人信息 性别、简介
if (othersListUser.get(0).getSex() == null) {
othersListUser.get(0).setSex(“保密”); }
if (othersListUser.get(0).getIntro() == null) {
othersListUser.get(0).setIntro(“无”); }
map.put(“othersListUser”, othersListUser.get(0));
5.1.2 帖子模块功能实现
帖子搜索主要是在首页顶部进行搜索,通过帖子标题关键字来实现,在搜索框输入相关字段后,点击搜索按钮,向Common中的getArticleTitle方法发起post请求,在该方法中,通过获取articleTitle关键字来作为参数传递给ArticleController中的方法进行查询,主要代码如下:
articleController.getArticleTitle(request.getParameter(“articleTitle”), map);
帖子查看只需要访问系统首页,无需登录就可以对论坛发表的所有帖子进行浏览,首先访问系统首页,然后向Common中的getAll方法发起请求,该方法会通过调用ArticleController的getArticle方法把相关帖子信息查询下来,主要代码如下:
List
map.put(“listArticle”, listArticle);
帖子查看界面如图5-8所示: