添加依赖

        <!-- websocket -->
<dependency>
<groupId>javax.websocket</groupId>
<artifactId>javax.websocket-api</artifactId>
<version>${websocket.version}</version>
<scope>provided</scope>
</dependency>

ChatServer后台类

package edu.nf.ws.server;

import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.sql.Time;
import java.util.Date;
import java.util.Set; /**
* @Author Eric
* @Date 2018/12/5
* WebSocket服务端
*/
@ServerEndpoint("/chat/server/{userName}")
public class ChatServer {
/**
* 当有客户端连接到服务端的时候就会调用这个方法
* session代表客户端和服务端的一个连接会话对象,
* 由容器负责创建和维护
* @param session
* @param userName
*/
@OnOpen
public void onOpen(Session session,@PathParam("userName") String userName) throws UnsupportedEncodingException {
//userName=URLDecoder.decode(userName,"UTF-8");
System.out.println("有客户端连接..."+userName);
//将用户名保存到当前用户会话的属性中(有点类似作用域的概念)
session.getUserProperties().put("user",userName);
} /**
* 客户端和服务器之间通信的方法,
* 服务端每当接收客户端的消息就会调用这个方法
* 注意:必须制定一个String类型的参数,表示接收到客户的文本消息
* @param message
* @param session
*/
@OnMessage
public void onMessage(String message,Session session) throws IOException {
System.out.println("接收消息..."+message);
//将消息发给所有人
sendAllUser(message,session);
} /**
* 当客户端关闭或者断开连接时,服务端会调用此方法
*/
@OnClose
public void onClose(Session session) throws IOException {
System.out.println("客户失去连接...");
session.close();
}
private void sendAllUser(String message,Session session) throws IOException {
//获取所有人的会话对象
Set<Session> users = session.getOpenSessions();
//获取发送人
String sendUser = session.getUserProperties().get("user").toString();
//发送给所有人
for (Session user : users) {
user.getBasicRemote().sendText(getTime()+"<br/>"+sendUser+":"+message);
}
}
private Time getTime(){
//创建当前时间
Date date = new Date();
Time time = new Time(date.getTime());
return time;
}
}

html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>简易对话</title>
</head>
<body>
<div id="login_div">
用户名:<input type="text" id="userName" name="userName"/>
<input type="button" id="login" value="login"/>
</div> <div id="container" style="display: none">
<div id="content"></div>
<input type="text" id="msg" name="msg"/>
<input type="button" id="send" value="send"/>
</div>
<script src="js/jquery-3.3.1.min.js"></script>
<script>
$(function () {
var ws;
//登陆
$("#login").on("click",function () {
var userName = $("#userName").val();
//创建WebSocket对象并连接服务端
ws = new WebSocket('ws://localhost:8080/chat/server/'+userName);
//客户端打开连接时会回调此方法
/*ws.onopen = function(){
//...
}*/ //客户端关闭或断开连接时执行此方法
/*ws.onclose = function(){
//...
}*/
//接收服务端发送的信息
ws.onmessage =function (message) {
$("#content").append(message.data+"<br/>")
}
$('#login_div').css('display','none');
$('#container').css('display','block');
});
//发送信息
$("#send").on('click',function () {
var msg = $('#msg').val();
//发送消息
ws.send(msg);
});
});
</script>
</body>
</html>

Servlet WebSocket的简易聊天室的更多相关文章

  1. 基于Node.js + WebSocket 的简易聊天室

    代码地址如下:http://www.demodashi.com/demo/13282.html Node.js聊天室运行说明 Node.js的本质就是运行在服务端的JavaScript.Node.js ...

  2. php+websocket搭建简易聊天室实践

    1.前言 公司游戏里面有个简单的聊天室,了解了之后才知道是node+websocket做的,想想php也来做个简单的聊天室.于是搜集各种资料看文档.找实例自己也写了个简单的聊天室. http连接分为短 ...

  3. node.js+websocket实现简易聊天室

    (文章是从我的个人主页上粘贴过来的,大家也可以访问我的主页 www.iwangzheng.com) websocket提供了一种全双工客户端服务器的异步通信方法,这种通信方法使用ws或者wss协议,可 ...

  4. node+websocket创建简易聊天室

    关于websocket的介绍太多,在这就不一一介绍了,本文主要实现通过websocket创建一个简易聊天室,就是90年代那种聊天室 服务端 1.安装ws模块,uuid模块,ws是websocket模块 ...

  5. 使用Html5下WebSocket搭建简易聊天室

    一.Html5WebSocket介绍 WebSocket protocol 是HTML5一种新的协议(protocol).它是实现了浏览器与服务器全双工通信(full-duplex). 现在,很多网站 ...

  6. WebSocket实现简易聊天室

    前台页面: <html> <head> <meta http-equiv="Content-Type" content="text/html ...

  7. 小案例-WebSocket实现简易聊天室

    前言 在详解 HTTP系列之一讲到HTTP/2.0 突破了传统的"请求-问答模式"这一局限,实现了服务器主动向客户端传送数据.而本章将通过一种在单个TCP连接上进行全双工通信的协议 ...

  8. 基于WebSocket的简易聊天室

    用的是Flash + WebSocket 哦~ Flask 之 WebSocket 一.项目结构: 二.导入模块 pip3 install gevent-websocket 三.先来看一个一对一聊天的 ...

  9. 使用go,基于martini,和websocket开发简易聊天室

    一.首先,需要了解一下websocket基本原理:here 二.go语言的websocket实现: 基于go语言的websocket也有不少,比如github.com/gorilla/websocke ...

随机推荐

  1. 打印信息,通过.jasper工具将集合输出到PDF文件 然后利用打印机打印文件

    我们上一次成功的利用iReport工具制作了一张报表,并且预览了报表最后的效果,也生成了格式为“jrpxml”.“jrxml”与“jasper”的文件.这次,我们使用jasper提供的java的api ...

  2. AngularJS——第6章 作用域

    第6章 作用域 在AngularJS中使用过滤器格式化展示数据,在"{{}}"中使用"|"来调用过滤器,使用":"传递参数. 6.1 内置过 ...

  3. (四)创建ROS程序包(就是软件包)

    你的 ROS 程序包都放到下面这个目录里, 切换到这个目录: $ cd ~/catkin_ws/src 使用下面的命令: 创建一个 ROS 程序包 名字就叫:beginner_tutorials $ ...

  4. os模块。笔记

    os 模块提供了很多允许你的程序与操作系统直接交互的功能 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 返回指定目录下的所有文件和目录名:os.listdir()  ...

  5. 关于EOF:

    请先看下面一段程序: #include"stdio.h" int main() { ],t; int i,j; while(scanf("%s",a)!=EOF ...

  6. Oracle_SQL(2) 分组与聚合函数

    一.聚合函数1.定义:对表或视图的查询时,针对多行记录只返回一个值的函数.2.用途:用于select语句,HAVING条件二.5种聚合函数1.SUM(n) 对列求和 select sum(sal) f ...

  7. (转)数组使用contains

    数组使用contains 今天发现一个怪问题,同样是.net3.5环境下的两个项目,一个里支持arr.contains("1"),一个就不支持,代码完全相同也不行.有时在不支持项目 ...

  8. MySQL优化(一) 优化关键技术

    MySql的优化是一个综合性的技术,主要包括有: (1)表的设计合理化(符合 3NF 三范式) (2)添加适当的索引(Index):索引分类:普通索引.主键索引.唯一索引.全文索引(文本).空间索引. ...

  9. 如何判断来访的IP是否是百度蜘蛛ip?

    网站日志是可以真实体现网站的状态,通过网站日志我们可以清楚的看到网站每天有多少访客,每天有多少蜘蛛来抓取网站的数据,哪些数据被蜘蛛抓取了.哪些页面在请求数据的时候发现了错误.这些都是可以通过状态码来进 ...

  10. (O)JS:执行环境、变量对象、活动对象和作用域链(原创)

    var a=1; function b(x){ var c=2; console.log(x); } b(3); ·执行环境(execution context),也称为环境.执行上下文.上下文环境. ...