自制聊天室

本文介绍了作者使用Maven-SpringMVC框架,结合MySQL和Qt客户端开发的一款聊天软件,重点讲述用户注册、登录、好友管理和群聊功能的实现思路与数据库设计,包括好友表的设计和操作流程,如添加好友、群聊管理等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自制聊天室

程序概述

这个程序是仿照国内主流聊天APP编写的聊天软件,提供http通信服务,不做商业用途,只作为个人项目经验积累,以及供大家参考和指正。

环境及技术

  • 框架:maven-springMVC
  • 开发环境:idea
  • 数据库:MySQL(myBatis)
  • 系统:Ubuntu
  • 客户端开发:Qt
  • 日志:Log4j

提供功能

  • 用户注册,登录
  • 添加,删除好友
  • 添加,退出,移出群聊
  • 实时更新
  • 用户,群聊日志
  • 用户,群聊配置,可自定义属性(如群人数上限等)

思路

由易入难
想必很多程序都是这样子做的,因此我打算将日志和配置实现留给开发后期,先开发简易的好友及群聊处理
先思考后代码
在纸上,博客里先把思路写好,再搬到具体代码中,才能事半功倍

具体实现

数据存放

我将数据放到MySQL中,储存为:
在这里插入图片描述
(先来一张手写的草图,后续把对应图表补齐)

操作

  • 注册操作(register)
    判断用户传来的密码格式是否符合规范,判断用户是否存在,如果通过,则继续创建。

    1. 创建6位id,代码如下

          public static String createId(){
              StringBuilder builder = new StringBuilder();
              Random random = new Random();
              for(int i = 0; i < 6; i++){
                  int num = random.nextInt(10);//0-9
                  builder.append(num);
              }
              return builder.toString();
          }
      }
      

      如果该id已存在,则重新获取:

      	int id = Integer.parseInt(KeyUtils.createId());
          for(int i = 0; i < 5; i++){
              if(result != 1){
                  id = Integer.parseInt(KeyUtils.createId());
              }
              else {
                  break;
              }
          }
          while (result != 1){
              id++;
              id = id % 1000000;//999999
          }
      
    2. 执行对应sql操作:(myBatis)

      <insert id="insertUser" parameterType="com.zyj.pojo.User">
              insert into ct_infos.users (`id`, `name`, `password`,`register_date`) values (#{id}, #{name}, #{password}, now());
          </insert>
      
          <update id="createFriendTable">
              create table ct_friends.u#{id} (
                                                `id` mediumint not null primary key,
                                                `bind_date` DATE,
                                                `reception_num` mediumint not null default 0
              );
          </update>
      
          <update id="createGroupTable">
              create table ct_groups.u#{id} (
                                                 `id` mediumint not null primary key,
                                                 `bind_date` DATE,
                                                 `updating_num` mediumint not null default 0
              );
          </update>
      

    另外还需要在ct_uconfigs、ct_ulogs中创建表,暂未实现,所以不写。
    在具体项目中的大部分代码都诸如此类,就不一一列举,接下来写的都是应对操作我的思路,然后代码实现为会上传到github,供大家参考。

  • 好友相关操作

    1. 添加好友
    2. 删除好友
    3. 接受/拒绝好友申请

    首先,要明确用上了哪几个表:

    • ct_friends.uid
    • ct_umsgs.uid

    这里建表的方式可能让你感到奇怪,但我经过考虑,还是决定采用这种方式:在ct_friends库中为每一个用户建一张表,表名是u加上id,比如"u23578964",这样做可以防止重名,也便于查找。另外,直接用id作为表名绝对不行,因为id是数字,而表名不能以数字开头,然而myBatis通过了我的建表,却不让为对该表进行操作,为此为不得不删了整个库。

    1. 添加好友:
      该操作与其他好友操作一样看起来很简单,但是有一个不得不解决的问题,就是实时数据的同步问题,譬如说,用户登陆的时候可以看到好友申请,也可以看到自己的申请是否被通过,因此需要引入一个状态
简易聊天室本次实验的目的是通过以下题目掌握JSP内置对象,包括:request,response,session,application等。 (1)制作简易聊天室,能够实现简单的页面聊天功能。 (2)制作网页计数器,要求相同的窗口内刷新页面访问次数并不增加,并且用图片来显数字。1、 熟悉request、response、session、application、out等内置对象; 2、 选择制作网页计数器程序需准备数字图片;1、进入jsp子目录,编写简易聊天室的JSP程序,聊天室的需要实现的基本功能:输入昵称、聊天。 2.根据功能编写页面代码。二、网页计算器 利用内置对象application <html> <head> <base href="<%=basePath%>"> <title>My JSP 'Counter.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> 您是第位访问者! </body> </html> 简易聊天室本次实验的目的是通过以下题目掌握JSP内置对象,包括:request,response,session,application等。 (1)制作简易聊天室,能够实现简单的页面聊天功能。 (2)制作网页计数器,要求相同的窗口内刷新页面访问次数并不增加,并且用图片来显数字。1、 熟悉request、response、session、application、out等内置对象; 2、 选择制作网页计数器程序需准备数字图片;1、进入jsp子目录,编写简易聊天室的JSP程序,聊
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值