聊天室
开发环境与技术栈
- Windows/Mac/Linux
- Maven
- Servlet
- MySQL
- Jackson
- WebSocket
项目功能
- 用户登录、注册
- 显示频道列表
- 用户发送消息、群聊功能
- 历史消息功能
- 关注/取消关注频道功能(不实现)
- 增加、删除频道功能(不实现)
项目演示
用户登录
显示频道列表
用户发送消息
- sjc发送消息
聊天信息窗口
- tz2发送消息
聊天信息窗口:
历史消息功能
- 用户tz2退出登录,用户sjc发送消息
- 用户tz2登录,进入频道显示历史信息
创建数据库及表
- user表----用户
- channel表----频道
- message表----信息
create database chatroom;
use chatroom;
drop table if exists user;
create table user(
userId int primary key auto_increment,
name varchar(50) unique ,
password varchar(50),
nickName varchar(50),
lastLogout datetime -- 表示上次退出的时间,同来实现历史记录功能
);
drop table if exists channel;
create table channel (
channelId int primary key auto_increment,
channelName varchar(50)
);
drop table if exists message;
create table message (
messageId int primary key auto_increment,
userId int, -- 谁发送的消息.
channelId int,
context text, -- 消息正文
sendTime datetime -- 消息的发送时间.
);
初始化数据
user表:
前后端接口约定
1.用户注册
POST/register
{
"name":"xxx",
"password":"xxx",
"nickName":"xxx"
}
HTTP/1.1 200 OK
{
"ok":"1",
"reason":"xxxx"
}
2.登录
POST/login
{
"name":"xxx",
"password":"xxx",
}
{
"OK":"1",
"reason":"xxxx",
"userId":"1",
"name":"xxx",
"nickName":"xxxx"
}
3.检测登录状态
GET/login
Cookie:JSESSIONID=xxxxxx
HTTP/1.1 200 OK
{
"OK":"1",
"reason":"xxxx",
"userId":"1",
"name":"xxx",
"nickName":"xxxx"
}
4.新增频道
POST/channel
{
"channelName":"xxx"
}
HTTP/1.1 200 OK
{
"ok":"1",
"reason":"xxxx"
}
5.获取频道列表
GET/channel
HTTP/1.1 200 OK
{
{
"channelId":"1",
"channelName":"xxxx"
}
{
"channelId":"2",
"channelName":"xxxx"
}
}
6.删除频道
DELETE/channel?channelId=1
HTTP/1.1 200 OK
{
"ok":"1",
"reason":"xxxx"
}
7.建立WebSocke连接
每个登录中的用户,都需要有自己的连接,把连接之间使用userId来区分
this.websocket = new WebSocket("ws://127.0.0.1:8080/chatroom/message/" + this.user.userId);
配置项目
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance