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

涉及知识

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

软件环境tomcat7

jdk7

eclipse javaee

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

效果截图

效果一:

效果二:

项目实战

新建项目

由于最近一直在学习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);

}

测试

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

源码下载

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

参考文献

java如何实现web页面聊天_Java和websocket实现网页聊天室相关推荐

  1. java web 聊天室_Java和WebSocket开发网页聊天室

    小编心语:咳咳咳,今天又是聊天室,到现在为止小编已经分享了不下两个了,这一次跟之前的又不大相同,这一次是网页聊天室,具体怎么着,还请各位看官往下看~ 一.项目简介WebSocket是HTML5一种新的 ...

  2. SpringBoot基于websocket的网页聊天

    一.入门简介 正常聊天程序需要使用消息组件ActiveMQ或者Kafka等,这里是一个Websocket入门程序. 有人有疑问这个技术有什么作用,为什么要有它? 其实我们虽然有http协议,但是它有一 ...

  3. 使用WebSocket实现网页聊天室

    使用WebSocket实现网页聊天室 一.文章导读 服务器推送你还在使用轮询吗?本文将带你领略WebSocket的魅力,轻松实现服务器推送功能.本文将以下面两方面让你理解WebSocket并应用到具体 ...

  4. 如何使用WebSocket实现网页聊天室?

    一.文章导读 服务器推送你还在使用轮询吗?本文将带你领略WebSocket的魅力,轻松实现服务器推送功能.本文将以下面两方面让你理解WebSocket并应用到具体的开发中 WebSocket概述 使用 ...

  5. Java和WebSocket开发网页聊天室

    一.项目简介 WebSocket是HTML5一种新的协议,它实现了浏览器与服务器全双工通信,这里就将使用WebSocket来开发网页聊天室,前端框架会使用AmazeUI,后台使用Java,编辑器使用U ...

  6. SSM框架+WebSocket实现网页聊天(Spring+SpringMVC+MyBatis+WebSocket)

    建站不止于增删改查,还有很多很有魅力的地方.对于通信聊天这块已经青睐好久了,前段时间在做的j2ee项目运用到Spring+SpringMVC+MyBatis的框架集合,是关于一个社交平台的网站,类似于 ...

  7. 基于WebSocket实现网页聊天室

    背景 在浏览器中通过http仅能实现单向的通信,comet可以一定程度上模拟双向通信,但效率较低,并需要服务器有较好的支持; flash中的socket和xmlsocket可以实现真正的双向通信,通过 ...

  8. java web 发送消息_java集成WebSocket向指定用户发送消息

    一.WebSocket简单介绍 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通 ...

  9. java 多人聊天_java编程实现多人聊天室功能

    导读热词 本文实例为大家分享了java实现多人聊天室的具体代码,供大家参考,具体内容如下 程序源代码及运行截图: server.java //server.java package Socket; i ...

  10. java+websocket实现网页聊天室

    核心技术websocket 前提 1.tocmat7.02版本以上 2.浏览器支持websocket通讯 3.这个是html5的功能 客户端和服务器建立连接 jsp/html页面 1.浏览器和后台服务 ...

最新文章

  1. css中的垂直居中方法
  2. NeurIPS 2020 | 清华大学提出:通用、高效的神经网络自适应推理框架
  3. Repeater 嵌套
  4. 前端构建工具gulp入门教程
  5. 更新node_kubernetes证书更新
  6. 七夕单日票房破5亿!创复工后单日票房新高
  7. 红芯事件追踪:官方致歉承认基于开源架构;创始人履历被指夸大
  8. 输出高电平程序c语言,51用c语言怎么编程检测US-100超声波测距模块echo/rx引脚输出高电平时间长度,,谁能给我个模板...
  9. Spring Web MVC 的工作流程
  10. 算法笔记_面试题_17.二分法搜索_模板及示例十几道
  11. 对《Java核心技术卷一》读者的一些建议
  12. linux 屏幕键盘onborde,电脑虚拟键盘模拟器|On-Screen Keyboard pro(电脑屏幕键盘软件)下载 V9.0.4 官方版 - 比克尔下载...
  13. ros pppoe服务器性能,ROS软路由中最详细的PPPOE服务器设置教程
  14. 我的Qt作品(16)基于机器视觉+运动控制的大视野激光切割机软件
  15. oracle新增字段排序,oracle指定排序的方法详解
  16. ubuntu显卡输出hdmi屏幕没有声音
  17. 2022IEOC全国赛专业组获奖及晋级成绩公布 全球赛期待继续辉煌
  18. C/C++ getcwd 获取项目的运行路径
  19. Java Geometry空间几何数据的处理应用
  20. 【第2篇】基础数据类型

热门文章

  1. linux给文件夹图标,Linux 如何在启动器中自定义图标
  2. c语言74hc595程序,74hc595使用方法与单片机驱动源程序
  3. Apple官方对于Http Live Streaming的常见问题回答
  4. 麒麟信安加入中国首个桌面操作系统根社区openKylin, 共擎开源未来!
  5. php怎么给图片添加文字,使用php怎么给图片添加文字水印
  6. CSS实现文本居中和块级元素居中
  7. tar命令打包并压缩指定的文件夹并且排除指定的文件
  8. WSADATA 数据结构
  9. 关于 TJA1043 休眠和唤醒一点使用方法
  10. c语言中双引号是什么作用,C语言中单引号与双引号的区别