java编写websocket_WebSocket的简单实现&jsp

创建一个web项目

导入依赖:

4.0.0

com.chu

webSocket

1.0-SNAPSHOT

war

javax.servlet

javax.servlet-api

3.1.0

javax.websocket

javax.websocket-api

1.1

provided

com.fasterxml.jackson.core

jackson-databind

2.7.4

controller层代码:

packagecom.chu.controller;importcom.fasterxml.jackson.databind.ObjectMapper;import javax.websocket.*;importjavax.websocket.server.PathParam;importjavax.websocket.server.ServerEndpoint;importjava.io.IOException;importjava.util.HashMap;importjava.util.Map;/*小楚想要发送信息给小赵

这个信息会先存储在服务器

再由服务器发送给小赵*/@ServerEndpoint("/chat/{name}")public classChatSocket {//定义一个Map集合,用来存放登陆到服务器的客户名称和Session

private static Map mapMessage = new HashMap<>();//首先,方法名称可以自定义//*形参---name---Session

@OnOpen//会话开始

public void onOpen(@PathParam("name")String name, Session session){

System.out.println("onOpen....."+name);//key-----name value-----session

mapMessage.put(name,session);

}//客户机信息处理 * 形参---Session session ---String message

@OnMessagepublic voidonMessage(Session session,String message){

System.out.println("onMessage....."+message);//服务端给客户端发消息,走的不是HTTP 而是直接推送过去了//获取JSON对象

ObjectMapper mapper = newObjectMapper();try{//获取JSON格式的信息

Map map = mapper.readValue(message, Map.class);//获取需要发送的信息:content

String content = map.get("content");//获取接收信息者:小赵

String receive = map.get("receive");//从事先定义好的Map中获取小赵的Session

Session receiveSession =mapMessage.get(receive);//如果小赵的Session为null

if(receiveSession==null){//响应:对方不在线

session.getAsyncRemote().sendText("对方不在线");

}else{//否则将接收到的信息发送给小赵

receiveSession.getAsyncRemote().sendText(content);

}

}catch(IOException e) {

e.printStackTrace();

}

}//会话结束

@OnClosepublic voidonClose(Session session){

System.out.println("onClose....."+session);

}//会话出现异常

@OnErrorpublic voidonError(Session session,Throwable e){try{

e.printStackTrace();

session.close();

}catch(IOException ex) {

ex.printStackTrace();

}

}

}

jsp代码:

1

2

3

4 发送者

5

6 接收者

7

8 信息

9

10

11

12

13

14

15

16

17 varws;18 //注册按钮

19 functionreg() {20 //注册路径 加上自己的用户名

21 ws = new WebSocket("ws://localhost:8080/chat/"+document.getElementById("sendOut").value)22 //接收服务器信息并显示

23 ws.onmessage = function(msg) {24 //接收服务器信息

25 var message =msg.data26 //获取展示信息的位置

27 var former = document.getElementById("list")28 former.innerHTML=former.innerHTML+"...他说"+message29 }30 }31 functionsendmsg() {32 //获取接收者

33 var receive = document.getElementById("receive").value34 //获取发送的内容

35 var content = document.getElementById("content").value36 //以JSON的方式发送到服务器

37 ws.send('{"receive":"'+receive+'","content":"'+content+'"}')38 //获取展示信息的位置

39 var former = document.getElementById("list")40 former.innerHTML=former.innerHTML+"...你说"+content41 }42

43

44

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值