目录
1.项目简介:
一个带有界面的聊天工具
2.项目背景:
平时生活中用的最多的公户就是聊天工具,在学习了Java之后,也想用Java做一个简单的微聊工具。
3.项目描述:
(1)创建 CommiUtils 类封装公共工具方法,如加载配置文件、json 序列化等; (2)创建 entity 包建立一个 user 类用来存放用户的属性; (3)创建 client:dao 层实现获取数据源,获取连接,数据的增、删、改、查等操作; vo 层是服务器与客户端传递信息的载体,存放客户端要对服务器进行的操作,发送的内容, 以及发送的目标对象;serveice 层主要是注册、登录、私聊、群聊客户端的具体实现以及 每个功能界面的展出。 (4)创建 sever 端:监听客户端的消息并予以处理
4.项目功能:
注册
登录
私聊
群聊(与之前的相比,多了创建群聊的功能)
5.使用的技术:
JDBC编程,IO操作,Swing组件实现界面展出,多线程,Socket编程
6.设计思路:
6.1首先配置pom文件
将项目中要用到的依赖配置好
如下图:
<dependencies>
<dependency>
<!--单元测试的一个库-->
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<!--阿里巴巴数据源-->
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.13</version>
</dependency>
<dependency>
<!--数据库连接池-->
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.6</version>
</dependency>
<dependency>
<!--密码加密-->
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.11</version>
</dependency>
<dependency>
<!--json序列化-->
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.0</version>
</dependency>
</dependencies>
6.2创建数据库chatroomplus,获取数据库的连接
6.3创建Commutils类:
该类用来封装工具方法,如加载配置文件,json序列化(利用第三方库GSON库,实现序列化和反序列化)等
6.4Entity层:
创建一个user类,存放属性信息(id,userName,Password,brief)
以上所有的准备工作做好,下来就是客户端和服务端的具体实现了
6.5客户端的实现:
6.5.1Dao层:
(1)注册:本来是在服务端实现,我自己在实现的时候将其在客户端实现,而注册用户相当于向数数据库中添加元素,因此就可以用到数据库中的插入语句,而用户登录则是相当于查询元素,因此相当于数据库中表的查询操作,更新用户信息自然就是数据库中表的更新了。
此模块中的设计思路:
a) 创建一个BasedDao类:
该类用来封装基础dao操作,即获取数据源,获取连接,关闭连接,关闭资源,在此获取数据源的是时候使用的是DruidDataSource,这是阿里做的一个开源的数据库与传统的DataSource相比较,它的功能更全,可以实时监控。
b) 创建一个AccountDao类:
该类是BasedDao的子类,用来实现用户注册(类似于表的插入)和用户登录(表的查询)的语句操作
6.5.2Service层:
该层主要用来实现客户端与服务端的连接管理,以及客户端界面展示的一些具体操作:
a)ConnectToServer:
该类用来实现与服务端建立连接,连接建立成功之后,通过I/O操作中的输入输出流与服务端进行通信
b) userReg:
创建UserRegGUI.form
利用Swing组件画出用户注册界面,会自动生成一个userReg类,点击建立时间监听器
点击注册按钮将信息持久化到数据库中,成功弹出提示框,具体实现步骤:
i) 获取用户输入的注册信息
ii) 将输入信息包装称为user类,保存到数据库中
iii) 调用dao 对象
客户端:将自己的信息发送给服务端,然后接受服务端发回的所有在线用户信息
服务端:读取要注册的用户名,将所有在线用户发送给客户端,将新用户的上线信息发送给所有在线用户,将用户信息保存到缓存中
注册页面展示:
c) userLogin:
创建一个userlogin.form利用Swing组件画出登录的界面,会自动生成一个userlogin类,将画出的登录界面与指定的类绑定起来,创建一个事件监听器,获取用户登录信息。
设计思路:
a) 校验用户信息,校验成功,加载用户列表
b) 与服务器建立连接,将当前用户的用户名与密码发送到服务端---->读取服务端发回的所有在线用户信息
c)用户登录失败,保留登录页面,并给出登录失败的错误信息提示,
用户登录界面:
d) privateChat:
与上述操作步骤一样,画表—>绑定类,
客户端捕获输入框的键盘输入,当捕捉待按下Enter时(e.getExtendKeyCode()==KeyEvent.VK_ENTER),将信息发送到服务端然后将自己发送的信息展示到当前私聊界面。
服务器:收到客户端的消息会拆分消息,获取发送方的用户名,消息内容,以及私聊的目标对象,然后通过MessageVo将消息内容发送给目标对象
私聊界面:
e)群聊:
创建群聊:
界面展示:
i) 将在线好友以checkBox展示到界面中,纵向展示
ii) 点击提交按钮提交信息到服务端
iii) 判断哪些好友加入群聊,
iV) 遍历组件,判断哪些好友被选中
Vi) .获取群名输入框中输入的群名称
VII) 将群名+选中好友信息发送到服务端
群聊:
客户端实现:
- 选择在现好友新建群聊,将群聊信息发送到服务端
- 点击群聊列表的标签,唤起群聊界面,并且给每个标签赋予点击事件
- 进行群聊信息的发送
- 第一次收到群消息的客户端首先将群名保存到当前客户端的群列表中,然后弹出群聊界面,读取别人发来的消息。
服务端实现:
- 接收用户的群注册信息,将群名与群成员注册到服务端缓存
- 接收用户发来的群消息,根据群名转发到响应的群中
群聊界面展示:
f)FriendList:
- 存储所有在线好友
- 存储所有的群名称以及相应的群成员
- 缓存所有群聊界面
6.5.3Vo层:
MessageVo:服务器与客户端传递信息的载体,用来存储客户端发送到服务端的内容,服务器要进行的动作,以及告知服务器将哪些信息发送给哪些用户
7.测试用例:
8测试的具体实施:
1.利用JUnit对各个功能进行单元测试;
2.利用SonarLint对代码做静态实时分析,测试代码风格的规范性;
3.对方法中的参数的合理性进行校验;
4.对模块之间的能否正常那调用做测试;