<!DOCTYPE html>
<html>
<head>
<title>WebSockete Demo</title>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
<script type="text/javascript">
//验证浏览器是否支持WebSocket协议
if (!window.WebSocket) {
alert("WebSockeet not supported by this browser!");
}
var ws;
function display() {
ws = new WebSocket("ws://localhost:8080/examplesXml/websocket");
//监听消息
ws.onmessage = function(event) {
log(event.data);
}
//关闭WebSocket
ws.onclose = function(event) {
}
//打开WebSocket
ws.onopen = function(event) {
ws.send("Hello,Server");
}
ws.onerror = function(event) {
}
}
var log = function(s) {
if (document.readyState !== "complete") {
log.buffer.pust(s);
} else {
document.getElementById("contendId").innerHTML += (s + "\n");
}
}
function sendMsg() {
var msg = document.getElementById("messageId");
ws.send(msg.value);
}
</script>
</head>
<body onload="display();">
<div id="valueLabel"></div>
<textarea rows="20" cols="30" id="contendId"></textarea>
<br />
<input name="message" id="messageId" />
<button id="sendButton" onClick="javascript:sendMsg()">Send</button>
</body>
</html>
客户端代码-新建index.html,代码如上。
package cn.jess.websocket;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.catalina.websocket.MessageInbound;
import org.apache.catalina.websocket.StreamInbound;
import org.apache.catalina.websocket.WebSocketServlet;
import org.apache.catalina.websocket.WsOutbound;
public class EchoServlet extends WebSocketServlet {
/**
*
*/
private static final long serialVersionUID = -2581942001009336822L;
//private static final Logger log = Logger.getLogger("EchoServlet");
private static List<MessageInbound> socketList = new ArrayList<MessageInbound>();
// privat static final long ser
private static List<WebSocketMessageInbound> connsList = new ArrayList<WebSocketMessageInbound>();
protected StreamInbound createWebSocketInbound(String subProtocol,HttpServletRequest request){
return new WebSocketMessageInbound();
}
public class WebSocketMessageInbound extends MessageInbound{
protected void onClose(int status){
super.onClose(status);
socketList.remove(this);
}
protected void onOpen(WsOutbound outbound){
super.onOpen(outbound);
socketList.add(this);
}
//@Override
protected void onBinaryMessage(ByteBuffer message) throws IOException {
// TODO Auto-generated method stub
System.out.println("onBinarymessage");
}
@Override
protected void onTextMessage(CharBuffer message) throws IOException {
// TODO Auto-generated method stub
for(MessageInbound messageInbound : socketList){
CharBuffer buffer = CharBuffer.wrap(message);
WsOutbound outbound = messageInbound.getWsOutbound();
outbound.writeTextMessage(buffer);
outbound.flush();
}
}
}
}
以上是服务器端的代码。
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <display-name></display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>websocket</servlet-name> <servlet-class>cn.jess.websocket.EchoServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>websocket</servlet-name> <url-pattern>/websocket</url-pattern> </servlet-mapping> </web-app>
web.xml文件的配置。