<!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文件的配置。