java如何实现web页面聊天_Java和websocket实现网页聊天室

article/2025/9/24 8:14:05

WebSocket protocol 是HTML5一种新的协议,它实现了浏览器与服务器全双工通信(full-duplex)。接下来将实现一个websocket的网页聊天室的demo,前端框架会使用amazeUI,后台使用Java,网页编辑器使用UMEditor。

涉及知识

网页前端(HTML+CSS+JS)和Java

软件环境tomcat7

jdk7

eclipse javaee

现代浏览器(推荐chrome或者firefox)

效果截图

效果一:

2fd60ade9fd612ea76646cc0bf368381.png

效果二:

943a11fd89f77214816297bc6d9fe69d.png

项目实战

新建项目

由于最近一直在学习maven,所以我就用maven新建了个webapp项目,pom.xml的依赖如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

junit

junit

4.4

commons-beanutils

commons-beanutils

1.9.2

org.apache.commons

commons-collections4

4.0

commons-logging

commons-logging

1.2

net.sf.json-lib

json-lib

2.4

jdk15

依赖添加完成后,把项目发布到tomcat上,一个空白的项目就建好了。

前台代码

在这介绍一下amazeUI,我摘了一段官网上的介绍:Amaze UI 以移动优先(Mobile first)为理念,从小屏逐步扩展到大屏,最终实现所有屏幕适配,适应移动互联潮流。

首先从AmazeUI官网下载压缩包,然后解压把assets文件夹拷贝到src/main/webapp目录下,这样我们就能使用AmazeUI了。

UMEditor,它是一个富文本在线编辑器,能让我们的消息内容多姿多彩。

从UEditer官网下载Mini版的JSP版本压缩包,解压后把整个目录拷贝到src/main/webapp目录下,接下来就可以编写前端代码了,代码如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

chatroom

.title {

text-align: center;

}

.chat-content-container {

height: 29rem;

overflow-y: scroll;

border: 1px solid silver;

}

聊天室

Send

$(function(){

// 初始化消息输入框

var um = UM.getEditor('myEditor');

// 使昵称框获取焦点

$('#nickname')[0].focus();

});

后台代码

前台的页面我们已经有了,现在还需要实现服务器段的代码。

值得注意的是,从JavaEE 7开始就统一了WebSocket的API,所以如果是之前的java版本可能需要第三方的jar包才能实现websocket,当然也可以自己实现一个(通往大神的必经之路)。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50package com.hzhyiyy.chat;

import java.text.SimpleDateFormat;

import java.util.Date;

import javax.websocket.OnClose;

import javax.websocket.OnError;

import javax.websocket.OnMessage;

import javax.websocket.OnOpen;

import javax.websocket.Session;

import javax.websocket.server.ServerEndpoint;

import net.sf.json.JSONObject;

/**

* @author hzhy Mar 31, 2015

* todo : 聊天服务器

*/

@ServerEndpoint("/chatroom")

public class ChatServer{

private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

/**

* todo : 初始化一个会话

* @param session

*/

@OnOpen

public void onOpen(Session session){

}

@OnMessage

public void onMessage(String message, Session session){

//将消息格式化成json

JSONObject jsonObj = JSONObject.fromObject(message);

//在消息中添加发送时间

jsonObj.put("date", DATE_FORMAT.format(new Date()));

//遍历所有的消息

//在消息中添加是否是当前会话的标志

jsonObj.put("isSelf", openSession.equals(session));

//发送json格式的消息

openSession.getAsyncRemote().sendText(jsonObj.toString());

}

}

/**

* todo : 关闭一个会话时的操作

*/

@OnClose

public void onClose(){

}

/**

* todo : 处理错误

*/

@OnError

public void onError(Throwable t){

}

}

前后台交互

前台页面和后台处理都做完了,现在需要如何做到前后台交互,这就用到了websocket了。仙说一说这一个过程:新建一个WebSocket对象,然后就可以和服务器端进行交互,从浏览器发送消息给服务器端,同时要验证输入框的内容是否为空,然后接受服务端发送的消息,把它们动态地添加到聊天内容框中。

1

2

3

4// 初始化消息输入框

var um = UM.getEditor('myEditor');

// 使昵称框获取焦点

$('#nickname')[0].focus();

之后添加如下代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53// 新建WebSocket对象,最后的/chatroom跟服务器端的@ServerEndpoint("/chatroom")对应

var socket = new WebSocket('ws://${pageContext.request.getServerName()}:${pageContext.request.getServerPort()}${pageContext.request.contextPath}/chatroom');

// 处理服务器端发送的数据

socket.onmessage = function(event){

addMessage(event.data);

};

// 点击Send按钮时的操作

$('#send').on('click', function(){

var nickname = $('#nickname').val();

if (!um.hasContents()) { // 判断消息输入框是否为空

// 消息输入框获取焦点

um.focus();

// 添加抖动效果

$('.edui-container').addClass('am-animation-shake');

setTimeout("$('.edui-container').removeClass('am-animation-shake')", 1000);

} else if (nickname == '') { // 判断昵称框是否为空

//昵称框获取焦点

$('#nickname')[0].focus();

// 添加抖动效果

$('#message-input-nickname').addClass('am-animation-shake');

setTimeout("$('#message-input-nickname').removeClass('am-animation-shake')", 1000);

} else {

// 发送消息

socket.send(JSON.stringify({

content : um.getContent(),

nickname : nickname

}));

// 清空消息输入框

um.setContent('');

// 消息输入框获取焦点

um.focus();

}

});

// 把消息添加到聊天内容中

function addMessage(message){

message = JSON.parse(message);

var messageItem = '

'

+ ''

+ '

'

+ ''

+ message.nickname + ' ' + message.date

+ '

'

+ '

' + message.content

+ '

';

$(messageItem).appendTo('#message-list');

// 把滚动条滚动到底部

$(".chat-content-container").scrollTop($(".chat-content-container")[0].scrollHeight);

}

测试

到这里简单的网页聊天室就做完了,接下来就可以测试了,你可以开几个浏览器自己测试,也可以邀请局域网的小伙伴一起试一试。

源码下载

如有不理解的小伙伴可以自行下载源码(需要自己新建项目)

参考文献


http://chatgpt.dhexx.cn/article/PgOVFOsm.shtml

相关文章

vue + element-ui 聊天_vue网页版聊天Vue+ElementUI仿微信界面聊天实例

vue+vuex+vue-cli+vue-router+element-ui+swiper等技术开发仿微信pc端界面聊天应用,实现了发送消息+表情(动图gif)、图片/视频预览、右键长按菜单、红包/朋友圈、截图发送等功能。 技术栈 vue版本:Vue2.5.6状态管理:Vuex页面路由:Vue-routericonfont图标:阿里巴巴字体图标…

2023 人工智能在线聊天机器人网页HTML源码

测试了一下就是对接的外部接口,无加密有能力的可以二开。使用教程,上传主机,服务器后解压使用,当然了,电脑解压后点击index.html也能用。

网页进行QQ聊天简单应用

在网页上唤醒QQ聊天 ---- 网页上用到在线客服之类的解决方案 想在网页上做一个在线客服的功能,其实可以用腾讯提供的方法,只要打开链接就能进行QQ聊天 ◆腾讯提供的代码为:(腾讯官方链接: http://is.qq.com/webprese…

多语言国际版在线聊天室/匿名在线聊天室/语音聊天室/网页APP聊天室

私人聊天消息/一对一聊天 私人或一对一聊天功能可供用户无缝聊天。他们可以使用此功能私下分享任何他们想要的东西。管理员可以通过管理仪表板轻松管理私人聊天。 多语言支持 QuChat带有一个内置的语言和翻译管理器。您可以有效地添加自己的语言和翻译。QuChat可以翻译成任何…

html网页直播实时聊天,一分钟实现网页多人聊天室【Socket.IO】

socket.io是个基于node.js的快平台实时通讯框架。只用不到10行代码,就可以搭建一个简单的多人实时聊天室。 先来看看运行后的效果: socket.io多人聊天室 只要简单几步,就可以实现。在这里我们使用本机作为服务端。 安装node.js 由于socket.io使用node.js为服务端,所以必须安…

如何实现网页视频聊天?

在网页里实现文字聊天是比较容易的,但若要实现视频聊天,就比较麻烦了。这里,我们将实现一个简单的网页版视频聊天Demo,可以支持所有类型的浏览器。 本Demo除了视频聊天功能外,还包含以下功能: 1.上下线通知…

qq不加好友实现网页在线聊天(qq在线客服)

需求 再网页中添加自己的qq,方便别人联系你,但是有的时候仅仅是询问一些问题,并不需要加好友,那么此时使用qq官方的推广工具就非常方便了。 官网地址:qq推广 开通免费推广功能后,就可以直接通过点击网页上…

php源码 网页聊天_php即时在线网页聊天源码-响应式设计自适应手机端

基于PHP WebSocket即时通讯开发的在线聊天源码,使用高效优雅的 Laravel 框架进行非通讯部分开发。前台与后台自适应PC与移动端,支持一对多交流,可以自由创建新的房间与解散创建的房间,集成签到功能,等级功能&#xff0…

【亲测可运营】PHP匿名在线聊天室/语音聊天室/多国语言版在线聊天室

简介 PHP匿名在线聊天室源码/自定义群组聊天系统/可设置密码支持自适应多端访问运营版,一款支持多国语言的在线群聊系统源码,可以新建一个群组,然后设置密码,或者公开访问都可以,聊天都是匿名的,方式还是不…

Java网页版仿QQ实现在线聊天功能

疫情期间,整天闷在家里又不能聚会,大把的空余时间差点让我发霉,后来有个客户发来新年祝贺,让我突然想起了一件事情,就是他曾经提起过,要是在后台管理系统里面整合个聊天功能该多好啊,有了这个念…

基于PHP的在线聊天室(网页版)

前言 此项目免费分享(群文件中获取) 交流群:758350964(已满) 交流群2:511496356 一 项目介绍 基于PHP的在线聊天室(网页版) 技术栈 phpmysqlbootstrap 可搭建在phpstudy下快速部署 二 主要功能 1 注册/登录 2 聊天功能 3 撤回功能 4 查看群成员 三…

网页版聊天服务器,网页版在线聊天室

引言 实现网页版的在线聊天室的方法有很多,在没有来到HTML5之前,常见的有:定时轮询、长连接+长轮询、基于第三方插件(如FLASH的Socket),而如果是HTML5,则比较简单,可以直接使用WebSocket,当然HTML5目前在PC端并没有被所有浏览器支持,所以我的这个聊天室仍是基于长连接+…

网页版QQ、MSN等等聊天工具web版大全

首发地址 http://www.178good.cn/178/Html/?209.html 相关网址:聊天工具大全 http://www.178good.cn/178good/soft/liaotian.html MM是个十足的聊天迷,走到哪里聊到哪里。不光酷爱聊天,并且诸如MSN、Yahoo Messenger、Google Talk等即时通讯软件(IM)上都有很多的好友。…

网页版网络聊天室设计与实现(Java+SSH+MySQL)

目 录 摘 要 I Abstract II 第1章 绪论 1 1.1选题背景及意义 1 1.2国内外研究现状 2 1.2.1 国内研究现状 2 1.2.2 国外研究现状 2 1.3主要研究成果与趋势 3 1.4研究主要内容 4 第2章 开发技术工具概述 5 2.1 JSP技术 5 2.2 SSH框架 6 2.3 Servlet技术 7 2.4 MyEclipse开发工具 …

贝叶斯法则(公式)

转自:MBA智库 侵权删 文章目录 概念贝叶斯法则(公式)原理贝叶斯法则实例 概念 什么是贝叶斯法则   贝叶斯的统计学中有一个基本的工具叫贝叶斯法则、也称为贝叶斯公式, 尽管它是一个数学公式,但其原理毋需数字也可…

贝叶斯公式的理解与推导(简单版本)

院子里面有条狗,过去几十年中,平均100天狗会叫50天,平均100天被偷盗一次,偷盗时有90%概率狗会叫,请问当狗叫的时候,是小偷入侵的概率有多大? 分析: 狗叫为独立事件A,偷盗…

贝叶斯公式简单解释及其运用

简介 贝叶斯定理是18世纪英国数学家托马斯贝叶斯(Thomas Bayes)提出得重要概率论理论。以下摘一段 wikipedia 上的简介: 所谓的贝叶斯定理源于他生前为解决一个“逆概”问题写的一篇文章,而这篇文章是在他死后才由他的一位朋友发…

贝叶斯公式推导及意义

条件概率公式 设A,B是两个事件,且P(B)>0,则在事件B发生的条件下,事件A发生的条件概率(conditional probability)为: P(A|B)P(AB)/P(B)乘法公式 1.由条件概率公式得: P(AB)P(A|B)P(B)P(B|A)P(A) 上式即为乘法公…

浅谈全概率公式和贝叶斯公式

一、条件概率公式 举个例子,比如让你背对着一个人,让你猜猜背后这个人是女孩的概率是多少?直接猜测,肯定是只有50%的概率,假如现在告诉你背后这个人是个长头发,那么女的概…

贝叶斯公式基本推导

基础知识: ①条件概率 :P(B|A) P(AB) / P(A) 其中P(AB) P(A∩B) 即事件A 和事件B同时发生的概率 由上式变形可知 P(AB) P(A) * P(B|A)。 ②全概率公式 : 在计算一个比较复杂事件的概率时,我们总是希望从已知的简单地…