锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

基于SSM框架社交媒体实现

时间:2022-08-15 20:00:00 简易式压力变送器

本文由我的本科毕业论文修改,不是论文的完整篇幅,部分已经修改或删除。请注意,在参考中,请注意重复检查等因素,相关问题与我无关,不负责。

目录

  • 摘要
  • Abstract
  • 第一章 绪论
    • 1.1 选题背景和意义
    • 1.2 相关技术和工具
      • 1.2.1 Ajax
      • 1.2.2 jQuery
      • 1.2.3 RESTful架构
      • 1.2.4 MVC框架
      • 1.2.5 Thymeleaf模板引擎
      • 1.2.6 SSM框架
      • 1.2.7 MySQL
      • 1.2.8 Druid
      • 1.2.9 IntelliJ IDEA
    • 1.3 论文组织结构
    • 1.4 本章小结
  • 第二章 系统总体说明
    • 2.1 与开发运行有关
      • 2.1.1 开发运行环境
      • 2.1.2 使用说明
    • 2.2 系统模块及功能
    • 2.3 用例图
    • 2.4 项目代码结构
      • 2.4.1 后端代码结构
      • 2.4.2 前端代码结构
    • 2.5 本章小结
  • 第三章 详细设计系统
    • 3.1 数据库设计
      • 3.1.1 E-R图
      • 3.1.2 详细的数据库表
    • 3.2 SSM框架及Tomcat配置
    • 3.3 详细设计模块
      • 3.3.1 首页模块
      • 3.3.2 设置模块
      • 3.3.3 系统通知模块
      • 3.3.4 个人中心模块
      • 3.3.5 管理好友模块
      • 3.3.6 问答模块
      • 3.3.7 随说模块
      • 3.3.8 聊天模块
    • 3.4 本章小结
  • 第四章 性能测试
    • 4.1 登录性能测试
      • 4.1.1 低负载
      • 4.1.2 中负载
      • 4.1.3 高负载
    • 4.2 获取聊天信息性能测试
      • 4.2.1 低负载
      • 4.2.2 中负载
      • 4.2.3 高负载
    • 4.3 发布问题性能测试
      • 4.3.1 低负载
      • 4.3.2 中负载
    • 4.4 本章小结
  • 第五章 总结与展望
    • 5.1 总结
    • 5.2 展望
  • 源码

摘要

社交网络在人类社会中具有不可或缺的意义。不仅线下社交网络,线上社交网络也尤为重要,尤其是在信息和疫情时代。本社交媒体web应用名为lescha,全称为let is chat,这个名字叫我们一起聊天,方便阅读。基于系统的后端实现SSM框架(即由Spring、SpringMVC以及MyBatis组成)并使用Maven用户访问拦截作为项目管理工具,也使用模板引擎Thymeleaf页面渲染,阿里巴巴用于管理数据库连接Druid数据库连接池管理连接MySQL;利用前端页面HTML5、CSS3、JavaScript以及相关的Bootstrap5样式、jQuery库;利用前后端数据交互jQuery库的ajax方法,并使用JSON作为数据交互的格式,基本遵循了RESTful的API充分利用五种设计风格HTTP方法。

该系统的定位是简单但不简单的社交媒体,摒弃了当前社交软件多余繁琐的功能,避免同质化。其主要功能如下:1。使用电子邮件快速注册,忘记密码;2。查看和修改用户数据;3。管理朋友,包括添加、删除和修改昵称;4。查看系统信息;5。用户发布随说(类似于QQ说说,微信朋友圈),文字/图片/视频类型都可以,也可以随便评论,回复评论;6.用户发布问题,并且所有注册用户都可以查看和回答;7.分页查看随说、评论、系统消息、问答;8.朋友聊天。

除上述功能外,用户提交的数据还在前端和后端进行验证,以确保提交的数据的标准化和正确性;遵循MVC非功能设计,如系统可维护、系统可移植、代码可重用性提高等。

关键词: SSM;社交媒体;Ajax;Druid;Thymeleaf

Abstract

Social has an indispensable importance in human society, not only offline, but also online is especially crucial, especially in the current era of information and epidemic, where the two complement each other. This social media web app is called lescha, and the full name is let is chat, and it is called this for easy reading. The back-end of it is based on SSM framework (Spring SpringMVC MyBatis), and use Maven as a project management tool, which implements user access interception, and also utilizes the template engine Thymeleaf for page rendering, and uses Alibaba Druid database connection pool for managing database connections to connect to MySQL; while the front-end page implementation utilizes HTML5, CSS3, JavaScript and related Bootstrap5 style, jQuery library; in front and back-end data interaction using the jQuery library ajax method, and use JSON as the format of data interaction, basically follow the RESTful API design style, make full use of the five HTTP methods.

The positioning of this system is clean, but not simple social media, abandoning the redundant and cumbersome functions of current social software to avoid homogenization. Its functions are mainly these: 1. Use email to achieve rapid registration, forget the password; 2. View and modify user information; 3. Manage friends, including adding friend, deleting friend, and modifying nickname; 4. View the system messages; 5. Publish casual word, which similar to QQ talk, WeChat moments, text / picture video type are available, can also comment on casual word, reply to comment; 6. Release questions, and all registered users can view and answer the questions; 7. Paginate casual words, comments, system messages, questions and answers; 8. Chat with friends.

In addition to the above-mentioned functions, the data submitted by users is verified at the front-end and the back-end to ensure the standardization and correctness of the data; follow the MVC pattern to improve system maintainability, system portability, and code reusability as well as other non-functional design.

Key words: SSM; Social Media; Ajax; Druid; Thymeleaf

第一章 绪论

1.1 选题背景和意义

随着社会的发展,人类进入信息、大数据时代以来,风口的接连出现使得资本接连涌入,导致于各个公司涉及到的业务也越来越多,具体的反映到APP就是功能越来越多、越来越杂,导致应用占用的存储空间也进一步变大、启动加载的资源过多导致应用启动过慢等问题,甚至在使用过程中卡顿和杀后台的现象常常发生,使得用户使用应用体验较差。虽然导致这一问题的原因也有电子设备的关系(主要体现在设备性能、存储空间、运行内存等),但主要原因还是由于APP无节制的迭代,这一问题在社交媒体类的软件尤为显著。

例如作为社交软件的手机QQ为服务于厘米秀等功能内嵌虚幻4引擎(一款由Epic Games开发的游戏引擎),这一举动导致的问题就是应用大小暴增,在IOS中由上一版本8.8.50的491.4MB到版本8.8.55的879MB,而且作为服务于少数人的功能却要牺牲大部分用户的体验,这一举动受到许多用户的诟病;同样作为问答平台的知乎,加入直播功能以及朝着短视频平台方向的发展,APP内非重要且常用的功能不断出现,应用也变得逐渐臃肿等问题。总之,目前应用的发展基本都朝着“大”的方向进行发展。

社交作为人类社会重要组成,而在当前所处的疫情时代,居家隔离时的线上社交媒介显得尤为重要。因此,本社交媒体的设计以“小而美”作为理念重新出发,基于B/S模式进行开发。简洁而又不简单,简单而又不妥协,具有用户信息管理、好友聊天、随说发布、问答发布、评论等功能,使得社交属性更加纯粹。而作为轻量化的系统,使得用户不再过于受限,人们彼此之间的分享变得更加简单。

1.2 相关技术与工具

1.2.1 Ajax

Ajax的正式名称为Asynchronous Javascript And XML,翻译过来即是异步的JavaScript和XML,由Jesse James Garrett在2005年提出的,需要注意的是它并非是一种编程语言,而是一种集合了现有技术的方法,如集合了XMLHttpRequest、DOM、Javascript等。使用Ajax可以在页面加载完成后进行异步更新我们的网页信息,避免重新向服务器请求整个网页的信息,节省大量的网络带宽。

Ajax工作原理如图1.1所示:
图 1.1 Ajax工作原理

图 1.1 Ajax工作原理

  1. 当浏览器中某事件发生时,如页面加载、按钮点击以及其他我们自定义的事件;
  2. 由Javascript创建XMLHttpRequest对象后交给Ajax引擎;
  3. Ajax处理完成后通过http(s)请求发送到服务端的Web和XML服务器;
  4. 之后交给我们的后台处理程序进行处理;
  5. 在后台处理完毕后,将其返回到 Web和 XML服务器中进行处理;
  6. 之后通过http(s)响应给浏览器的Ajax引擎;
  7. 最后交由Javascript处理并更新DOM节点信息完成界面的更新。

在本系统中利用jQuery的ajax方法(一个为简化Ajax的使用从而对其进行封装的函数)请求页面信息、提交信息、删出记相关录,它是用户与用户、用户和服务器的交流平台,是整个系统中的一个关键环节。

1.2.2 jQuery

jQuery是于2006年1月由John Resig发布的一个主要为为简化操作DOM及其相关的而开发出的一个Javascript框架,且得到目前主流浏览器的很好的支持。其主要的功能包括:HTML元素的选取和操作、简化ajax的操作、操作CSS、使用Javascript动画、设置使用HTML事件,具有快速获取和操作DOM元素、增强事件处理和Javascript、简化开发动画等其他特点,得到大多数公司的青睐,普及率极高。

而在本系统中利用其简易操作html元素的特性,对DOM节点进行修改、删除、添加事件等操作。

1.2.3 RESTful架构

REST也就是Representational State Transfer的缩写,翻译为中文就是代表性状态转移,在2000年由Roy Thomas Fielding在他的博士论文上提出的一组软件开发架构的约束和规范,此时将符合REST相关的约束和规范的称为是RESTful架构。它的主要特点就是充分利用http(s)五种请求的方法(请求GET、提交POST、删除DELETE、全部更新PUT、部分更新PATCH)以及规定客户端请求和服务端返回的数据均已JSON格式进行交互,使请求API规范化、简洁化。

得益于SpringMVC对于RESTful架构的完美支持,使本系统可以更好的根据其相关规范和约束来进行开发。

1.2.4 MVC框架

MVC即为model(模型)、view(视图)以及controller(控制器)的缩写,是一种为了将用户界面、数据和业务逻辑解耦而开发设计出来的一种软件构建模式。如下图1.2所示,用户首先会经过控制器进行交互,所以可认为控制器是用户与服务端交互的窗口,之后经由控制器将请求的指令或者提交的数据提交到模型进行处理,根据需要由后者和数据库进行交互,此后模型再将处理好的数据反馈给视图层,此时用户便可查看相关的信息。

图 1.2 MVC框架示意图

通过对 MVC架构的分析,可以看出 MVC架构具有低耦合性、高重用性、高维护性等特点,而 SpringMVC正是在这种架构基础上进行开发的。

1.2.5 Thymeleaf模板引擎

模板引擎(Template Engine,在这里特指用于Web开发的Java模板引擎),主要体现在“模板”两字上,主要是为了实现用户界面与数据的分离,提高代码可复用性而开发设计出来的框架,逻辑与业务代码的分离使得开发效率大大提高,常见的模板引擎有Thymeleaf、FreeMarker、Enjoy、Velocity、JSP等。

而这个系统中使用的模板引擎是 Thymeleaf,由 Spring/Spring Boot所推荐,它可以在HTML、JavaScript、CSS、XML中,甚至可以在纯文本中插入类Java语法,使其可随后端业务数据发变化而在后端去渲染页面。而在设计之初,对于Spring/Spring Boot、HTML5有着很好的支持,且同其他模板引擎最大的区别就是可以不用去破坏原有的页面结构、可以在浏览器当中去静态运行,具有语法简单、功能强大的特点。

在本系统中利用了Thymeleaf渲染大部分的页面,例如提取并导入公共头部页面、提取并导入公共模态框、渲染问答界面等等大部分页面。

1.2.6 SSM框架

SSM框架,即Spring、SpringMVC以及MyBatis,是当前在Java EE领域中使用较多的一组框架,下面针对以上三者进行逐一介绍。

1)Spring

首先这里说明的Spring是指狭义上的Spring,也就是Spring Core,而广义上的Spring是指它的一整个框架集,包括Spring Data、Spring Cloud、Spring Security等。Spring是由Rod Johnson在2002年提出的一个为解决企业开发复杂度过高、维护成本过大、开发规范混乱的一个Java EE领域的轻量级框架。可以将其认为是一个对象管理器,Spring把对象当成是bean,而它作为bean factory生产并管理bean,具有低侵入式、开发简化等的特点,但它发展至今已经逐渐偏离开发简化这一路线,因此才诞生出了Spring Boot。总体而言,这是一个轻量级的控制反转(Inversion of Control)和面向切面编程(Aspect-Oriented Programming)的软件开发框架。

2)SpringMVC

SpringMVC也是属于Spring旗下的一个框架,它是以MVC为核心思想而设计的一个web框架,它除了拥有MVC的优点以外,同时可以和Spring无缝衔接,其核心主要是通过DispatcherServlet分发处理请求。

图 1.3 SpringMVC执行流程

3)MyBatis

MyBatis是由iBatis演化而来的一个位于Java持久层的框架,隐藏封装起了JDBC繁杂的与数据库交互的代码,同时使用XML或注解的形式来管理SQL代码,并通过Java接口的方法进行使用以及结果集的映射,且可以通过标签的形式支持动态SQL,使之具有开发效率高、结构清晰的特点。

1.2.7 MySQL

MySQL是一个由瑞典MySQL AB公司所开发的,目前是Oracle旗下的适合个人以及中小型企业所使用的开源的关系型数据库(Relational Database Management System,RDBMS),具有功能齐全、支持ACID事务、支持多种存储引擎、体积小巧等优点。

1.2.8 Druid

Druid是由阿里巴巴所开发的优秀的Java数据库连接池,目前已贡献给Apache开源。它不仅拥有比DBCP和C3P0等诸多数据库连接池的优秀性能、内置监控界面,且具有高扩展性等优点。又由于它针对MySQL进行一系列的优化,因此在本项目中使用它来管理MySQL数据库的连接。

1.2.9 IntelliJ IDEA

IntelliJ IDEA是由JetBrains所开发,主要用于Java语言的集成开发环境,相比于eclipse具有更优秀的代码管理、更精美的界面,且支持Java文档的预览、对于SSM项目的良好支持,因此使用该工具来进行开发本项目。

1.3 论文组织结构

根据项目本身的特点,将论文分为四个章节,具体如下:

第一章为绪论,阐述了选题背景和意义、系统相关技术与工具。

第二章为系统总体说明,通过对开发运行环境、二次开发或使用说明、系统模块及功能、用例图、项目的前后端代码结构进行介绍,使得对于本系统有一个较为清晰的结构认知。

第三章为系统详细设计,对于数据库、SSM框架设计以及根据八大模块并以用户界面为中心进行逐一的详细介绍。

第四章为性能测试,利用Apache JMeter对三个具有代表性的API(登录、获取聊天信息、发布问题)进行低、中、高负载的性能测试。

第五章为总结与展望,对本文进行总结,同时指出本系统的不足以及未来的改进方向。

1.4 本章小结

本章绪论首先介绍了选题背景,说明当下社交媒体过于庞大、功能过于复杂的畸形发展,并且对于用户的正常使用造成了一定的影响,针对此类问题重新开发出了一款轻量级、简洁而不简单的系统,说明了其意义。接着介绍本系统所使用的相关技术与工具,如RESTful、SSM、MVC框架等,最后再对本论文的组织结构进行介绍。

第二章 系统总体说明

2.1 开发运行相关

2.1.1 开发运行环境

  1. 操作系统:Windows 11 家庭中文版,版本号为22000.652;

  2. 集成开发环境:IntelliJ IDEA 2021.3.2 (Ultimate Edition);

  3. 项目管理工具:Maven,apache-maven-3.8.4;

  4. web服务器:Tomcat,apache-tomcat-9.0.50;

  5. 开发语言:Java,Java1.8.0_291;

  6. 数据库:MySQL,mysql-5.7.34-winx64。

2.1.2 使用说明

  1. 将本项目文件夹基于SSM框架社交媒体实现打开为IntelliJ IDEA项目;

  2. 安装并配置好Maven、Tomcat、Java、MySQL,建议使用以上开发运行环境中说明的版本,否则容易引发相关异常甚至错误;

  3. 执行该项目文件夹下的src/main/resources/database.sql数据库文件生成数据库表;

  4. 修改src/main/resources/database.properties文件中的jdbc.url、jdbc.name、jdbc.password的字段值,三者分别对应数据库的连接字符串、用户名、密码,其中数据库连接字符串需要注意的是端口号,如果没有修改过默认端口号就是3306;

  5. 本系统注册、忘记密码时需要使用邮箱来进行确认,所以这里需要修改src/main/java/pers/zhz/utils/Utils.java文件的send163Mail方法中的sender、senderName、senderPwd变量值,分别对应您的邮箱、邮件发送名、邮箱授权码。这里还需要注意的是,如果您的邮箱如果不是163邮箱,则还需要修改里面标注的SMTP服务器地址,也有可能需要添加相应的字段,具体得根据您的邮箱服务商的要求来进行相应的修改。

  6. 本项目的默认本地登录地址为localhost:8080,如果端口更改或者是非本地登录使用时还需要对src/main/java/pers/zhz/service/impl/NoLoginServiceImpl.java文件下的用户注册userRegister和忘记密码forgetPwd方法中的两处邮件内容mailContent变量进行相应端口号或服务器的地址更改,如图2.1所示的内容。

    图 2.1 邮件内容

2.2 系统模块及功能

图 2.2 系统模块及功能

上图2.1展示了整体的一个系统模块及功能,整体分为八大模块。

1)首页模块

其中包含了对用户进行访问拦截,设置未登录禁止访问的403、请求未发现的404自定义错误页面;利用邮箱验证来进行快速注册、忘记密码;登录并退出登录。

2)设置模块

此模块用于修改用户本人的头像、用户名等其他资料信息,当取消修改时会从缓存中读取相关信息填回而非向服务器请求,并且在提交修改的资料时会与缓存中的进行对比,避免重复提交,浪费带宽。

3)系统通知模块

包含各类消息通知、删除消息以及回复添加好友,同时除了对消息进行分页以外,对于回复添加好友的同时也会对消息进行验证是否重复回复。

4)个人中心模块

用户查看本人的资料、发布的随说以及发布的问答。

5)管理好友模块

该模块包含修改好友昵称、将好友添加至聊天列表并跳转至聊天界面、删除好友、查看(非)好友资料、查看(非)好友发布的随说、查看(非)好友发布的问题。

6)问答模块

发布、查看、搜素发布的问题,并可对发布的问题进行回答、查看详情、回复回答,并支持分页查看。

7)随说模块

随说意为随心说,类似于QQ的说说、微信的朋友圈,可以发布文字、图片、视频的内容,可以对其进行点赞、评论,同时依然支持随说、随说评论进行分页查看。

8)聊天模块

该模块提供和好友进行聊天的功能,同时支持按最新消息对好友聊天列表进行实时排序;上滑加载更多好友聊天消息。

除了以上说明的,对于数据、请求参数、提交的数据均在前后端进行了验证,并对于程序进行严格的逻辑测试并修改等,确保能够安全、稳定、正常的使用。

2.3 用例图

下图2.3为本系统的用例图,用于直观展示不同角色之间、不同功能之间的逻辑关系。

图 2.3 系统用例图

参与者用户可分为两大类,游客(未登录或者未注册的)、已注册登录用户,而后者又根据相互间是否为好友分为已注册登录用户的好友、已注册登录用户的非好友。

首先用户作为未登录时的游客身份,可进行登录、注册、忘记密码,除此以外的请求会进行拦截并返回403错误界面。

而作为已注册登录的用户时,可以查看其他已注册用户的资料、查看和修改本人资料、查看系统消息、搜素用户、发布和查看随说、发布回答以及搜素问题、查看所有注册用户发布的问题(详细)、回复问题的回答、退出登录。

作为已注册登录用户的好友时,除了继承注册登录用户的以外,还可进行修改好友昵称、同好友聊天、删除该好友、点赞评论本人以及好友的随说、回复随说评论、查看本人及好友随说的详细内容。

最后,作为已注册登录用户的非好友,除了同样作为继承者拥有注册登录用户相关的用例,还可进行添加好友。

2.4 项目代码结构

2.4.1 后端代码结构

如下图2.4所示的为本项目后端部分的代码结构,对应项目文件路径src/main下的文件。pers.zhz.controller包对应的为控制器相关的代码,用于接收来自前端用户的请求,并对于前端提交的数据进行验证。代码结构按照八大模块进行划分的,自上而下分别对应的是随说相关控制器、聊天相关控制器、管理好友相关控制器、未登录相关控制器、个人中心相关控制器、问答相关控制器、设置相关控制器、系统消息相关控制器。

往下的interceptor为拦截器;listener为监听器相关的,该监听器是为了解决关闭tomcat所引发的相关错误;mapper文件夹下的文件为MyBatis相关操作数据库的代码,而impl文件夹下的xml文件对应相关的SQL映射文件,自上而下的顺序同以上说明controller相关的。

图 2.4 项目后端代码结构

紧接着的pojo(Plain Ordinary Java Object,简单的Java对象)为对应数据库各个表的实体类;service为服务层相关的,用于调用mapper操作数据库并进行相应的处理,service.impl的为service下的接口相关的对应实现类,各个模块代码文件相关的顺序同上;utils为工具类,包含根据HttpServletRequest对象获取IP地址、生成简单文本邮件并发送的。

resources目录下的主要是配置相关的文件,applicationContext.xml为本SSM项目的总配置文件,在这里负责引入文件spring-mvc.xml和spring-mybatis.xml;database.properties是配置连接MySQL数据的以及Druid数据库连接池的;database.sql为建立数据库及数据表的SQL代码;environment.properties旨在说明本项目的开发运行环境的,并不具备任何功能,可删除;log4j.properties是为输出日志的配置文件;mybatis-config.xml为MyBatis配置输出日志以及驼峰-下划线命名互相转换的配置文件;而后面的两个文件spring-mvc.xml和spring-mybatis.xml分别是SpringMVC和MyBatis整合Spring的配置文件。

最后,在项目文件夹的根目录下pom.xml文件为Maven的配置文件。

2.4.2 前端代码结构

图 2.5 项目前端代码结构

上图2.5展示了本项目的前端代码结构,该部分对应项目文件夹根目录下的webapp文件夹。该文件夹下的static目录为存放静态文件的,其中的css样式文件夹中分为存放通用的bootstrap样式文件的文件夹、403以及404错误界面的error文件夹、存放本项目本人所写的各个css文件;img文件夹下的为.html中使用的svg类型的图片;而js文件夹下保存了各个Javascript相关的文件,有上至下分别对应bootstrap、jQuery、本人所写的关于本项目的以及other文件夹下保存的页面动态背景相关;plugins保存的为第三方分页插件jq-paginator的相关文件。

而在webapp下的userData文件夹,保存了用户发布随说的图片(视频)、用户头像;WEB-INF的templates存放着.html文件,common文件夹里面的为通用的.html模板文件,分别是公共头部、模态框,其它的自上往下分别是403错误、404错误、casualWord随说casualWordDetail随说详细、chat聊天、forgetPwd忘记密码、friend好友管理、index主页(登录)、modifyProfile修改本人资料、modifyPwd修改本人登录密码、myCasualWord我的随说、myProfile我的资料、notUserFriendCasualWord非本人好友随说、notUserFriendProfile非本人好友资料、qAndA问答、qAndADetail问答详细、register注册、systemMessage系统消息、userFriendCasualWord本人好友随说、userFriendProfile本人好友资料、userQAndA用户问答;而在最后的web.xml为web服务器tomcat的配置文件。

2.5 本章小结

通过本章,使得用户对于本系统有了一个整体上的结构认知。本章在开头说明了系统开发运行环境,操作系统、集成开发环境、项目管理工具、web服务器、开发语言以及数据库,紧接着针对项目部署或者二次开发说明需要进行修改的参数或配置。而系统模块及功能说明了项目的八大模块,以及针对于该模块所包含的功能,并通过用例图展示了系统不同角色之间关系、不同功能之间的逻辑关系。最后在项目代码结构上,通过对于前后端的代码文件分别进行说明,使得开发者在后期的优化或二次开发上可以迅速找到相对应的优化开发位置。

第三章 系统详细设计

3.1 数据库设计

3.1.1 E-R图

因为有太多的实体和相应的属性,所以在此将E-R图划分为两个相关的区域,见下面的图3.1和3.2。

图 3.1 E-R图1

图 3.2 E-R图2

3.1.2 数据库表详细

本小节针对数据库、数据库表的所有相关信息进行说明。该数据库lescha的基字符集为utf8,而对应的数据库排序规则为utf8_general_ci,且数据库表均采用支持事务的InnoDB存储引擎以及utf8编码。

图 3.3 数据库表组成

如上图3.3所示,数据库名为lescha,共有十一个数据表,分别是用户表user、用户确认注册激活码和修改密码表confirm_register_and_forget_pwd、用户好友表user_friend、系统消息表system_message、随说表casual_word、随说点赞表casual_word_like、随说评论表casual_word_omment、用户聊天列表表user_chat_list、用户聊天消息表user_chat_message、问答-问题表q_and_a_question、问答-回答表q_and_a_answer。

数据库表字段的外键约束在数据库表外进行规定,各个数据库表的详细信息如下:

表 3.1 数据库表user
字段名 数据类型 主键 唯一 描述
id bigint 自增,用户账号/表id
username nvarchar(11) 用户名
is_active bit 是否在线,0下线,1在线
state bit 是否已激活,0未激活,1已激活
email varchar(30) 邮箱
password varchar(32) 密码
phone_number varchar(11) 手机号码
sex bit 性别,0女1男
head_portrait nvarchar(255) 头像名称
register_time datetime 注册时间
birthday date 生日
hometown nvarchar(20) 家乡
introduce nvarchar(150) 个人简介
表 3.2 数据库表confirm_register_and_forget_pwd
字段名 数据类型 主键 唯一 描述
id bigint 自增,表id
user_id bigint 用户账号
state bit 是否有效,0无效,1有效
flag bit 注册还是修改密码,0注册,1修改密码
code char(32) 注册激活码/修改密码确认码
new_password char(32) 新密码
表 3.3 数据库表user_friend
字段名 数据类型 主键 唯一 描述
id bigint 自增,表id
friend_id bigint 好友id
user_id bigint 该表所属的用户id
friend_nickname nvarchar(11) 备注好友昵称,默认为好友的账户名
表 3.4 数据库表system_messsge
字段名 数据类型 主键 唯一 描述
id bigint 自增,表id
send_time datetime 消息发送时间
sender_id bigint 发送者id
receiver_id bigint 接收者id
content nvarchar(100) 消息内容
message_type tinyint 消息类型,0请求添加好友;1同意添加好友;2拒绝添加好友;3删除好友;4点赞随说;5取消点赞随说;6评论本人的随说;7回复本人的评论;8回复本人的问题;9回复本人的回答
casual_word_id bigint 消息相关随说id
question_id bigint 消息相关问题id
is_effective bit 是否生效,1生效,0失效,默认生效
表 3.5 数据库表casual_word
字段名 数据类型 主键 唯一 描述
id bigint 自增,表id
user_id bigint 发布者id
publish_time datetime 随说发布时间
content nvarchar(5000) 文字内容,该字段和图/视频字段至少有一个不为空
picture_or_video varchar(40) 图/视频文件名
表 3.6 数据库表casual_word_like
字段名 数据类型 主键 唯一 描述
id bigint 自增,表id
casual_word_id bigint 点赞的随说id
like_user_id bigint 点赞者id
like_time datetime 点赞随说时间
表 3.7 数据库表casual_word_comment
字段名 数据类型 主键 唯一 描述
id bigint 自增,表id
casual_word_id bigint 评论的随说id
commenter_id bigint 评论者id
comment_time datetime 评论时间
content nvarchar(100) 评论内容
reply_comment_id bigint 回复的评论id
表 3.8 数据库表user_chat_list
字段名 数据类型 主键 唯一 描述
id bigint 自增,表id
create_time datetime(3) 创建时间
user_id bigint 所属用户账号
friend_id bigint 用户好友的账号
表 3.9 数据库表user_chat_message
字段名 数据类型 主键 唯一 描述
id bigint 自增,表id
content nvarchar(1000) 消息内容
receive_state bit 接收状态,0未接收,1接收
send_time datetime(3) 消息发送时间
sender_id bigint 发送者账号
receiver_id bigint 接收者账号
表 3.10 数据库表q_and_a_question
字段名 数据类型 主键 唯一 描述
id bigint 自增,表id
questioner_id bigint 提问者id
question_time datetime 提问时间
content nvarchar(5000) 提问内容
表 3.11 数据库表q_and_a_answer
字段名 数据类型 主键 唯一 描述
id bigint 自增,表id
question_id bigint 问答-问题id
responder_id bigint 回复者id
response_time datetime 回答时间
content nvarchar(100) 回复的内容
reply_answer_id bigint 回复的问题-回答id

3.2 SSM框架及Tomcat配置

SSM框架相关的配置文件均在src/main/resources目录下以及处理拦截的配置类src/main/java/pers/zhz/interceptor/UserInterceptor.java,而web服务器Tomcat的配置文件web.xml位于webapp/WEB-INF目录下以及监听器包的文件DriverMangerListener.java。

1)applicationContext.xml

该文件为SSM框架的起点配置文件,在这里该文件通过import标签的resource属性引入Spring整合SpringMVC的配置文件spring-mvc.xml和Spring整合MyBatis的配置文件spring-mybatis.xml。

2)database.properties

该文件为连接MySQL数据库配置了驱动类名、连接字符串、数据库账号、数据库密码,同时为Druid数据库连接池配置了初始连接数、最小连接数、连接等待超时时间、配置监控统计拦截的filters等属性。

3)log4j.properties

该文件为log4j日志提供了相关配置。规定了输出文件最小级别为debug,对于其他日志级别如stdout、info、warn、error均作了相关规定,例如设置了日志文件输出位置、日志文件名、根据日期和类型对日志文件进行分类等。

4)mybatis-config.xml

此文件为MyBatis的文件,该文件通过logImpl、mapUnderscoreToCamelCase分别设置Mybatis操作数据库的相关详细信息在控制台输出、启用数据库字段下划线映射到java对象的驼峰式命名;最后通过typeAliases标签自动为pers.zhz.pojo包下的实体类设置别名,这里使用使用实体类的类名(小写开头)作为别名,避免过多重复代码。

5)spring-mvc.xml和UserInterceptor.java

该文件Spring整合SpringMVC的配置文件。该文件主要就是进行开启SpringMVC注解驱动;静态资源默认servlet配置;配置Thymeleaf的模板引擎、模板解析器以及视图解析器;扫描指定包下的注解将其加入到Spring容器,在这里就是扫描service以及controller包下的注解;配置拦截器,限制游客的访问权限、并配置哪些请求路径不通过拦截器的处理,并在此处通过bean标签指定了处理拦截的类UserInterceptor,该类通过重写preHandle方法,验证了是否存在相应的session来决定是否放行,并输出到日志;最后再配置上传文件(上传的文件有用户的头像、随说的配图/视频)的编码为UTF-8,避免出现乱码。

6)spring-mybatis.xml

spring-mybatis.xml为Spring整合MyBatis的配置文件。首先是关联数据库配置文件database.properties;通过bean的属性注入将数据库配置文件中的所有属性注入;定义sqlSessionFactory的bean,同样通过属性注入的方式将上面的配置的数据库bean、mapper的xml文件位置以及MyBatis配置文件的位置mybatis-config.xml注入该bean;紧接着将上面配置的sqlSessionFactory的bean注入,以及将所有mapper接口的位置以包的形式通过属性注入;最后利用上面配置的数据源为数据库事务管理器进行配置。

7)web.xml和DriverMangerListener.java

web.xml文件配置的基本都是一些web服务器通用的配置。首先会利用spring的web过滤器进行乱码过滤,同样使用的utf-8的编码方式,避免中文乱码;之后通过servlet-mapping配置不拦截的静态资源,这里的配置和Spring整合SpringMVC的配置文件spring-mvc.xml中的静态资源默认servlet配置配合使用;然后为SpringMVC配置它的核心DispatcherServlet,在这里也指出SSM的总配置文件applicationContext.xml的位置;接下来配置监听器DriverMangerListener,该监听器是用来解决Tomcat关闭时出现的可能引起内存泄漏的问题;最后再对session的过期时间、403和404界面进行配置。

3.3 模块详细设计

本节主要通过根据八大各个模块,以用户界面为起点逐个分析说明其背后的执行流程的方式来对详细设计进行讲解。以下说明数据验证时均在前端用户界面以及后端机型验证,且数据的请求、提交均采用jQuery的ajax方法,数据格式默认使用JSON,除非提交的数据包含图片文件而无法使用JSON进而去使用FormData的形式。

3.3.1 首页模块

该模块主要是包含作为未登录的游客便可访问的资源路径,例如登录、注册、忘记密码、错误界面,对应的源代码文件为以NoLogin开头的controller、service以及mapper。

首先,当用户未登录的情况下,访问了除静态资源、该模块的控制器以外的资源时,通过在拦截器部分对session进行验证,发现没有时会返回403禁止访问的错误界面,如下图3.4所示。

图 3.4 403错误界面

此时用户可点击此处的链接请求路径返回到如下图3.5所示的登录(首页)界面进行登录,窗口大小调整时会实时调整组件的位置使之居中。
图 3.5 登录(首页)

登录、注册、忘记密码界面均可点击进行相互跳转,由于一开始没有账号,所以这里点击注册链接跳转到图3.6所示的注册界面进行注册。
图 3.6 注册界面

输入用户名、邮箱、密码后,点击注册,此时会在前端对于输入的信息进行验证是否符合规范,如验证用户名的长度是否在指定范围内、利用正则表达式验证邮箱格式是否正确、是否缺项、两次输入的密码是否符合规范,如果不符合相应的条件,则会弹出提示通用的通知模态框提示错误的信息,点击界面任意位置可关闭,该模态框通过Thymeleaf的th:replace语法对每个界面进行引入使用。
图 3.7 注册提示错误信息

提交的注册信息通过前后端数据格式认证之后,便进入服务层进行处理,首先会验证用户名、邮箱是否出现了重复,若重复则告知返回重复的提示信息,并让用户修改后提交;对密码进行MD5加密后、生成UUID作为唯一标识码用作邮箱验证后同其他数据存储进数据库,同时给用户提交的邮箱发送信息,操作完成之后提示用户,用户关闭提示框后自动跳转至登录界面。此时用户需前往邮箱进行确认注册,点击邮箱里面的的链接使该账号生效、使该链接失效,否则无法登录使用,重复点击会返回链接失效的错误信息。
图 3.8 注册邮箱信息

使用忘记密码时,输入需要修改的账户的邮箱、新密码进行操作,同样会进行数据的验证,生成标识码用户邮箱的验证操作,点击发送到邮箱的链接完成密码的修改,后台会根据标识码判断是属于修改密码还是注册的提取相应的信息进行处理。
图 3.9 忘记密码界面

注册成功后便可输入用户名、密码进行登录,同样进行数据验证,登录、注册、忘记密码均设置了
键盘监听时间,按下回车提交信息。用户名、密码验证通过之后将用户状态设为在线并进入聊天界面,否则提示相关错误信息,如账号密码错误,或者说明账号未激活,提示前往邮箱进行激活的操作。在登录进入之后,若访问并未存在的请求,则会转发并返回如图3.10的404错误界面。
图 3.10 404错误界面

3.3.2 设置模块

登录后可通过任意界面的公共头部(同样由th:replace引入)跳转至设置页面进行用户资料以及密码的修改,设置模块的修改资料页面如图3.11所示。

图 3.11 修改资料页面

该页面和数据由Thymeleaf进行渲染、加载,性别为空时男女都不会被选,但选择并提交之后不能置空,而生日为空时回显示为9999/12/31,同时在页面加载完成后对于原始请求的数据使用全局变量进行保存,使得在修改数据时取消修改不经过服务器便可恢复、提交修改的信息时可对比原始数据,只提交变更的数据。

初始进入该页面是输入框均为不可编辑,点击修改之后变成可编辑,同时将不可用的取消、提交按钮变成可用,修改变成不可用,点击取消则反之,并且数据输入框回恢复成原始的数据。修改状态下同样可通过点击头像进行修改头像,点击时进入呼出选择图像的文件,限制选择的文件类型为.png或.jpg类型的图片以及最大为5MB。

提交修改的数据时进行验证,如果什么都不做更改时会提示信息未更改,否则提交到后台进行处理。处理完成后返回信息,其中state为1表示修改成功;2为用户名已被占用;3为邮箱已被占用;4为是手机号已被占用;5为用户名和邮箱已被占用;6为用户名和手机号已被占用;7为邮箱和手机号已被占用;8为用户名、手机号、邮箱均已被占用;其他则为修改出错。

点击修改密码进入修改密码界面,如图3.12所示,这里的修改密码并不会用到邮箱验证,因为此时已经通过现在的密码登录进来。而点击公共头部的头像呼出下拉列表的退出时,将返回首页并设置用户状态为下线。

图 3.12 修改密码界面

3.3.3 系统通知模块

如图3.13所示,该界面同样由Thymeleaf进行渲染,请求该页面时返回系统消息相关字段,以及用于分页相关的当前页码、总共页数、当前请求路径。

图 3.13 系统消息界面

消息以List的形式,并根据消息发送时间进行降序排序的方式进行渲染,同时按照每页十条是消息进行分页,当访问请求/systemMessage时会转发到/systemMessage/1,代表访问第一页的。而消息又被分为十种:0请求添加好友;1同意添加好友;2拒绝添加好友;3删除好友;4点赞随说;5取消点赞随说;6评论本人的随说;7回复本人的评论;8回复本人的问题;9回复本人的回答,会根据指定序号进行渲染。

消息从后端获取的时间表达类型为时间戳,在页面被加载完成时会根据html的标签class属性进行修改,当天的消息则显示时间,否则显示日期,类似于此的时间处理有随说、随说评论、问题、问题回答、聊天列表相关,但有一点不同的是聊天列表的时间并不是通过class属性来进行修改的,但时间处理方式是一样的。同时支持删除系统消息,并且可以根据相应的用户账号、随说id、问答id直接点击跳转到用户资料界面、随说详细界面、问题详细界面。而对于添加好友类型的系统消息,如上图3.13所示的消息,在回复同意添加/拒绝添加时会通知添加的发起方,再次点击则会提示该消息已失效。

3.3.4 个人中心模块

该模块负责展示本人的资料、随说、问答。

首先是展示个人资料的页面,这里的处理同设置模块的资料展示基本相同,如图3.14所示。

图 3.14 我的资料界面

图3.15展示的是我的随说界面,同样是将JSONObject放入List交由Thymeleaf渲染,根据发布时间进行降序排序。而显示的时间也就是随说的发布时间,对于时间的处理同上、分页与系统通知相同:同一天则显示时间,否则显示日期;而对于分页,每二十条随说(问题)为一页,只有超过二十条才会显示分页。同时该界面可以对随说进行点赞、评论、查看详细信息。
图 3.15 我的随说界面

图3.16展示的是我的问答界面,该界面同我的随说界面的大体结构相同,只不过问答只有文本类型的,且没有点赞的功能,在该页面同样可进行回答问题、进入到问题详细页面。
图 3.16 我的问答界面

3.3.5 管理好友模块

该模块包含查看好友资料、(非)好友随说、(非)好友问答,搜素并添加好友、修改昵称、将好友加入聊天列表的功能。

图3.17好友界面提供了展示了好友列表、搜素添加好友的功能。

图 3.17 好友界面

点击左侧的好友则可进入相应的好友界面,如图3.18所示的。
图 3.18 好友资料界面

点击修改昵称时好友昵称变成可编辑,同时取消修改和确认修改按钮可见、修改昵称按钮不可见,昵称修改完成后变成图3.18的初始状态,而点击取消修改时昵称会通过缓存恢复成原来的;而当点击发送消息时,后台判断该好友是否在本人的好友聊天列表,如果不在则添加到聊天列表,否则将该好友所在的本人的聊天列表的时间修改为当前时间,接着跳转至聊天界面;当删除好友时呼出确认删除对话框,确认删除之后会将好友移除出好友列表以及删除相关聊天记录,考虑到随说(问答)之间的回复关系,因此并不会删除相关评论(回答)。而对于该模块的好友随说界面以及好友问答基本同我的随说以及我的问界面,这里就不再说明,都是展示当前显示资料的用户发布的随说以及问题,如图3.19和3.20所示。
图 3.19 好友随说界面

图 3.20 好友问答界面

而在图3.17的好友界面搜素用户是根据用户名来进行搜素的,可以搜素全部用户,当搜素本人时会跳转到图3.14的我的资料界面;而搜素的用户是本人的好友时,则会跳转到图3.18的好友资料用户界面;搜素的用户不是本人的好友时会跳转至下图3.21所示的非好友资料界面。
图 3.21 非好友资料界面

该界面除了展示好友的资料以外,同时可以进行添加好友,并且会对相关逻辑进行验证,如:重复点击时会提示等待对方的回

相关文章