基于Jsp和MySql实现的社交平台
1 简介
本程序是一个简单的社交网络程序,实现了一个社交网络的基本功能:
-
用户的注册,登录检查
-
允许用户查询自己的好友,允许用户 post 自己的状态,查看和回复用户的状态
-
用户登录页面主页时,每隔 30 秒钟,如果用户的好友有更新的状态,自动更新最新的用户好友状态
-
支持查看好友的好友信息
-
有多种个性化的头像可供选择
为了体现对数据库管理系统的应用,本程序中尽可能使用 SQL 语句完成核心功能。
2 数据库设计
2.1 实体–关系图 (E-R 图)
2.2 数据库表结构
数据库分为 4 个表:
-
account :用户账户表
-
friends :好友列表
-
statement :用户发表的状态
-
comment :用户对好友状态的评论
account 表记录用户的基本信息:
friends 记录用户所关注的好友列表:
statement 记录用户发表的状态:
comment 记录用户对好友状态的评论:
3 主要功能
3.1 用户注册和登录
用户注册就是在 account 表中增加一条记录. 在增加记录之前首先检查用户名是否有重复:
sql
SELECT * FROM `account` WHERE user_id = user_id LIMIT 1;
然后再插入新用户的记录:
sql
NSERT INTO
`account` (user_id, password, user_name, sex, birth_year, birth_month)
VALUES (user_id, password, user_name, sex, birth_year, birth_month);
用户登录就是检查输入的用户名和密码是否与数据库中的记录匹配,从数据库中查询该用户对应的密码:
sql
SELECT password FROM `account` WHERE user_id = user_id LIMIT 1;
然后再检查是否和用户输入的密码匹配。
3.2 关注好友和取消关注
关注好友功能分为两步:按名称搜索好友,添加好友。
按名称搜索好友使用了数据库的模糊查找功能:
sql
SELECT * FROM `account`
WHERE user_name like %search_name%
AND user_id != user_id -- 排除自己
AND user_id NOT IN ( -- 排除已关注好友
SELECT friend_id FROM `friends` WHERE user_id = user_id);
添加关注好友就是在 friends 表中添加一条记录:
sql
INSERT INTO `friends` VALUES (user_id, friend_id);
取消关注好友与之相反,删除 friends 表中的相应记录:
sql
DELETE FROM `friends`
WHERE user_id = user_id AND friend_id = friend_id;
3.3 发布、查看和回复状态
发布状态就是在 statement 表中添加一条记录:
sql
INSERT INTO `statement` (user_id, post_time, content)
VALUES (user_id, post_time, content);
回复状态就是在 comment 表中添加一条记录:
sql
INSERT INTO `comment` (user_id, statement_id, post_time, content)
VALUES (user_id, statement_id, post_time, content);
查看状态时, 要同时拉取状态和回复. 由于网页中回复显示在相应评论的下方, 我们需要分别查询每一条状态的回复, 而不是把它们一股脑地读出来:
sql
SELECT a.user_id as user_id, user_name, avatar_index,
statement_id, post_time, content
FROM `account` as a, `statement` as b
WHERE a.user_id = b.user_id AND b.user_id = friend_id
ORDER BY post_time DESC LIMIT 10;
sql
SELECT a.user_id as user_id, user_name, avatar_index,
comment_id, post_time, content
FROM `account` as a, `comment` as b
WHERE a.user_id = b.user_id AND b.statement_id = statement_id
ORDER BY post_time;
3.4 主页自动更新状态
主页上不仅要显示自己的状态, 还要显示关注的好友的状态:
sql
SELECT a.user_id as user_id, user_name, avatar_index,
statement_id, post_time, content
FROM `account` as a, `statement` as b
WHERE a.user_id = b.user_id
AND (b.user_id = user_id
OR b.user_id IN (
SELECT friend_id FROM `friends` WHERE user_id = user_id))
ORDER BY post_time DESC LIMIT 10;
主页状态的自动更新通过 JavaScript 定时器实现:
sql
function myrefresh() {
window.location.reload();
}
setTimeout('myrefresh()', 30000); // 指定 30 秒刷新一次
3.5 好友的好友信息
查询好友中有多少好友也在关注:
sql
SELECT * FROM `account`
WHERE user_id IN (
SELECT a.friend_id FROM `friends` as a,`friends` as b
WHERE a.user_id = user_id
AND b.friend_id = friend_id
AND a.friend_id = b.user_id);
3.6 头像切换
头像切换涉及数据库的更新操作:
sql
UPDATE `account`
SET avatar_index = new_index
WHERE user_id = user_id;
4 部署环境
本程序部署在一台 Linux 虚拟机上. 该虚拟机的硬件配置如下:
服务器上的软件版本如下:
本程序的部署采用了 Web 服务器和应用服务器分离的策略:
-
Nginx 作为Web 服务器,工作在反向代理模式,将客户端的 HTTPS 请求做 SSL 卸载,把HTTP 请求转发给 Tomcat 应用服务器
-
Tomcat 作为应用服务器,专门处理JSP 和 Servlet 部分
5 其他特性
5.1 用 Git 管理开发流程
在本程序的开发过程中,我们使用 Git 进行版本管理,Git 为开发过程带来了许多好处:
-
完善的协作开发功能,可以很好地处理开发过程中的文件冲突
-
完整的历史版本记录,程序出问题时可以方便地切换回旧版本
-
利用 Git hook 功能,我们实现了代码提交之后的自动部署,保证服务器上随时运行最新版本的程序,方便开发调试
5.2 Emoji 表情支持
我们的程序支持 emoji 表情,虽然不支持上传图片功能,但 emoji 表情同样能带来令人惊艳的表现能力。
在 MySQL 和 MariaDB 中,支持 emoji 表情的关键是所有程序都要使用支持 Unicode 扩展平面的编码。MySQL 和 MariaDB 默认使用的编码被称作“utf8”,但它并不等同于标准的 UTF-8 编码,它只支持 1 到 3 字节的 UTF-8 字符。要使用 emoji 表情,必须把 MySQL 和 MariaDB 的编码设置为 “utf8mb4”,以支持 4 字节的 UTF-8 字符 (大多数 emoji 表情都被编码为 4 字节 UTF-8 字符)。
5.3 HTTPS 和 HTTP/2 支持
分离的 Web 服务器和应用服务器为我们带来了许多新的可能性,其中之一就是对 HTTP 协议提供更完整的支持。
HTTPS 提供了卓越的安全性,并且为我们减少了很多额外的工作。例如,由于 HTTPS 本身就使用加密传输,我们的网页和服务器交互的信息就不用再考虑加密的问题了。
HTTP/2 协议优化了高延迟网络下的访问速度,Tomcat 8 的默认 Web 服务器并不支持这一功能,我们的测试结果表明,通过 nginx 反向代理开启 HTTP/2支持之后,页面加载时间比直接用 Tomcat 8 的默认 Web 服务器减少了 40% 左右。
5.4 IPv6 网络支持
我们的服务器对 IPv4 和 IPv6 访问提供了同等的支持,通过启用 IPv6 支持,我们的程序能够运行在更多的网络环境下,并且对校园网用户提供免费高速的优质体验。
参考文献
- 基于云计算模式的社会服务管理信息化平台项目设计与建设(吉林大学·杨刚)
- 基于SSH架构的个人空间交友网站的设计与实现(北京邮电大学·隋昕航)
- 基于SSH框架的博客用户分享平台的设计与实现(河北工业大学·刘磊)
- 基于HTML5的多媒体资源交互SNS平台的实现(曲阜师范大学·陈丹)
- 基于B/S模式的社交网络系统的设计与实现(解放军信息工程大学·周杨)
- 基于HTML5的多媒体资源交互SNS平台的实现(曲阜师范大学·陈丹)
- 基于移动平台的SNS系统的设计与实现(电子科技大学·高原)
- 基于SSH架构的个人空间交友网站的设计与实现(北京邮电大学·隋昕航)
- 基于JSP的雄霸天下游戏网的后台操作系统的开发设计(电子科技大学·张璇)
- 基于JS的社交软件的设计与实现(西安电子科技大学·李盼)
- 基于web的信息共享系统的设计与实现(华中科技大学·保罗)
- 基于云计算模式的社会服务管理信息化平台项目设计与建设(吉林大学·杨刚)
- 大学生活动信息交流平台的设计与实现(厦门大学·刘越洋)
- 基于B/S模式的社交网络系统的设计与实现(解放军信息工程大学·周杨)
- 基于B/S架构的酷跑社区系统的设计与实现(内蒙古大学·张晓乐)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:毕设工厂 ,原文地址:https://m.bishedaima.com/yuanma/35386.html