创建一个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