Прежде всего, я хотел бы объявить вам: JDK 7 требуется, Tomcat должен поддержать версию WebSocket
1.Initservlet
Этот класс в основном используется для инициализации репозитория MAP, который строит будущее хранилище информации пользователя идентификации, используйте его метод инициализации для инициализации репозитория и использования его статического метода GetSocketList для получения соответствующей информации идентификации пользователя.
WebSocket, я думаю, что MessageInbound используется для идентификации информации входа в систему, используйте ее, чтобы найти соответствующего человека и протолкнуть сообщения. Каждый логин будет генерировать сообщение об сообщении.
Здесь HashMap <String, MessageInbound>: String сохраняет идентификатор входа в систему пользовательского сеанса, а MessageInbound хранит информацию о личности, необходимой для нажатия. Вышесказанное личное устное понимание.
пакетный розетка; Импорт java.nio.charbuffer; импортировать java.util.arraylist; импортировать java.util.hashmap; импортировать java.util.list; Импорт javax.servlet.servletconfig; Импорт javax.servlet.servletexception; Импорт javax.servlet.http.httpservlet; Импорт org.apache.catalina.websocket.messageinbound; Public Class Initservlet расширяет httpservlet {private static final long long serialversionuid = -l; // частный статический список <somerleInbound> socketList; Частный статический Hashmap <String, MessageInbound> SocketList; public void init (конфигурация ServletConfig) Throws ServletException {// initServlet.socketList = new ArrayList <shrioveInbound> (); Initservlet.socketlist = new HashMap <String, messageInbound> (); super.init (config); System.out.println ("Server Start ============="); } public static hashmap <string, messageInbound> getSocketList () {return initServlet.socketList; } /* public static list <sesscessInbound> getSocketList () {return initservlet.socketlist; } */} 2.mywebsocketservlet
WebSocket используется для установления сервлета подключения. При установлении соединения сначала получите имид пользователя в входе в систему и передайте пользовательский идентификатор при вызове конструктора MyMessageInbound.
пакетный розетка; импортировать java.io.ioexception; Импорт java.io.printwriter; Импорт java.nio.charbuffer; Импорт javax.servlet.servletexception; Импорт javax.servlet.http.httpservlet; Импорт javax.servlet.http.httpservletrequest; Импорт javax.servlet.http.httpservletresponse; Импорт org.apache.catalina.websocket.streaminbound; Импорт org.apache.catalina.websocket.websocketservlet; / ** * * @ClassName: MyWebSocketServlet * @Description: Создано при создании соединения * @author mangues * @date - */ public class mywebsocketservlet extends websocketservlet {public String getUser (httpservletrequest) {String username = (String) request.getSession (). if (username == null) {return null; } вернуть имя пользователя; // return (string) request.getAttribute ("user"); } @Override Protected StreamBound CreateEwebSocketInbound (String arg, httpservletrequest запрос) {System.out.println ("#############"); вернуть новый mymessageinbound (this.getUser (запрос)); }} 3. Метод ONOPEN вызывает репозиторий идентификации карты INITSERVLET.
Поместите пользовательский идентификатор пользователя и информацию о идентификации WebSocket, соответствующую регистраному сообщению пользователя (UserId можно использовать для поиска идентификации, необходимой для нажатия MessageInbound)
OnTextMessage: используется для получения сообщений и отправки сообщений
пакетный розетка; импортировать java.io.ioexception; Импорт java.nio.bytebuffer; Импорт java.nio.charbuffer; импортировать java.util.hashmap; Импорт org.apache.catalina.websocket.messageinbound; Импорт org.apache.catalina.websocket.wsoutbound; Импорт util.messageutil; открытый класс mymessageinbound Extends MessageInbound {Private String name; public mymessageinbound () {super (); } public mymessageInbound (string name) {super (); this.name = name; } @Override Protected void onBinaryMessage (bytebuffer arg) бросает ioException {// todo автоматическое сгенерированное метод} @Override Protected void OntextMessage (charbuffer msg) бросает ioexception {// map после сообщения пользователем hashmap <string> messagemap = gate. // Обработка класса сообщений // UPLINE Collection Class Class Map HashMap <String, MessageInbound> userMSGMAP = initServlet.getSocketList (); String fromname = messagemap.get ("fromName"); // Сообщение происходит от userid string toname = messagemap.get ("toname"); // Сообщение отправляется на пользователь пользователь // Получить usermessageinbound messageinbound = usermsgmap.get (toname); // Сообщение, отправленное пользователю на складе if (messageInbound! = Null) {// Если сообщение существует для пользователя, выполните операцию wsoutbound outbound = messageInbound.getWsoutBound (); String content = messagemap.get ("content"); // Получить строку содержимого сообщения msgcontentstring = fromName + "" + content; // Создание отправленного сообщения // Отправить контент charbuffer tomsg = charbuffer.wrap (msgcontentstring.tochararray ()); outbound.writetextmessage (tomsg); // outbound.flush (); } /* for (messageInbound messageInbound: initservlet.getSocketList ()) {charbuffer buffer = charbuffer.wrap (msg); Wsoutbound outbound = messageInbound.getWsoutBound (); outbound.writetextmessage (буфер); outbound.flush (); } */} @Override Protected void onclose (int status) {initservlet.getSocketList (). Remove (this); Super.onclose (статус); } @Override Protected void OnoPen (wsoutbound outbound) {super.onopen (outbound); // Вошли в if (name! = Null) {initservlet.getSocketList (). PUT (имя, это); } // initServlet.getSocketList (). Add (this); }} 4. Класс обработки сообщений, обработка сообщений, отправленных фронтальным
Утилит пакета; Импорт java.nio.charbuffer; импортировать java.util.hashmap; / ** * * @classname: messageUtil * @description: класс обработки сообщений * @author mangues * @date - */ public class messageutil {public static hashmap <строка, строка> getMessage (charbuffer msg) {hashmap <String, String> map = new Hashmap <String> () (); String m [] = msgstring.split (","); map.put ("fromName", m []); map.put ("toname", m []); map.put ("content", m []); карта возврата; }} 5. Веб -конфигурация
<? xml version = "1.0" Encoding = "utf-8"?> <web-app arser = "3.0" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns: xsi = "http://www.w3.org/2001/xmlschema electsmance "/www.w3. xsi: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <servlet> <servlet-name> mywebsocket </servlet-name>> <Servlet-class> socket.mywebsocketservlet </servlet-class> </servlet> <servlet-mapping> <servlet-name> mywebsocket </servlet-name> <url-pattern>*. Do </url-pattern> </servlet-mapping> <servlet> <serlet-name> initservlet </servlet-name> <servlet-class> verlet-class-class> </servlet-class> </servlet-class-class> </servlet-class-class> </servlet-class-class-class> <Load-on-startup> 1 </load-on-startup> </servlet> <Welcome-file-list> <selcopply-file> index.jsp </wervedied-file> </welcelporting-file-list> </web-app>
6. Front-Cond, для удобства я напрямую использовал два JSP и использовал <%session.setattribute («Пользователь», «Xiao Ming»)%> для указания входа в систему.
Нет существенной разницы между двумя JSP, он просто используется для того, чтобы указать, что два разных человека входят в систему. Вы можете открыть различные JSP в одном и том же браузере для чата.
А. минимизировать
<%@ page language = "java" contentType = "text/html; charset = utf-" pageencoding = "utf-"%> <! doctype html> <html> <Head> <meta http-equiv = "content-type" content = "text/html; charse = utf-"> type = "text/javascript" src = "js/jquery ... min.js"> </script> <%session.setattribute ("user", "минимизировать");%> <script type = "text/javascript"> var ws = null; function startWebSocket () {if ('webSocket' в Window) ws = new WebSocket ("ws: // localhost: /websocket/mywebsocket.do"); иначе if ('mozwebsocket' в окне) ws = new mozwebsocket ("ws: // localhost: /websocket/mywebsocket.do"); иначе оповещение («не поддержка»); ws.onmessage = function (evt) {//alert(evt.data); console.log (evt); $ ("#xiaoxi"). val (evt.data); }; ws.onclose = function (evt) {// alert ("close"); document.getElementbyId ('denglu'). innerhtml = "offline"; }; ws.onopen = function (evt) {// alert ("open"); document.getElementbyId ('denglu'). innerhtml = "онлайн"; document.getElementbyId ('username'). innerhtml = 'minimize'; }; } function sendmsg () {var fromname = "Minimize"; var toname = document.getElementbyId ('name'). value; // Отправить кому var content = document.getElementbyid ('wrisemsg'). Value; // отправлять контент ws.send (fromname+","+toname+","+content); } </script> </head> <body onload="startWebSocket();"> <p>Chat function implementation</p> Login status: <span id="denglu" style="color:red;">Log in</span> <br> Login person: <span id="userName"></span> <br> <br> <br> Who to send to: <input type="text" id="name" value = "xiao ming"> </input> <br> Отправить контент: <input type = "text" id = "writemsg"> </input> <br> box чата: <textArea row = "" cols = "" readonly id = "xiaoxi"> </textarea> <br> <input = "value =" sendms = "sendmsg ()"> </input = "value =" onclick = "sendmsg ()" </br> </input = "value =" send "onclick =" endmsg () </br> </input = "value =" onclick = "endmsg ()" </br> </input = "advic </html> Б. Сяо Мин
<%@ page language = "java" contentType = "text/html; charset = utf-8" pageencoding = "utf-8"%> <! doctype html> <html> <Head> <meta http-equiv = "content-type" content = "html; warse = utf-equiv =" type = "text/javascript" src = "js/jquery 2.1.1.min.js"> </script> <%session.setattribut Websocket ("ws: // localhost: 8080/websocket/mywebsocket.do"); else if ('mozwebsocket' в окне) ws = new mozwebsocket ("ws: // localhost: 8080/websocket/mywebsocket.do"); иначе оповещение («не поддержка»); ws.onmessage = function (evt) {console.log (evt); //alert(evt.data); $ ("#xiaoxi"). val (evt.data); }; ws.onclose = function (evt) {// alert ("close"); document.getElementbyId ('denglu'). innerhtml = "offline"; }; ws.onopen = function (evt) {// alert ("open"); document.getElementbyId ('denglu'). innerhtml = "онлайн"; document.getElementbyId ('username'). innerhtml = "xiao ming"; };} функция sendmsg () {var fromname = "xiao ming"; var toname = document.getElementbyId ('name'). value; // Отправить кому var content = document.getElementbyid ('wrisemsg'). Value; // Отправить контент ws.send (fromName+","+toname+","+content);} </script> </head> <body onload = "startWebSocket ();"> <p> Реализация функции чата id = "username"> </span> <br> <br> <br> pend to: <input type = "text" id = "name" value = "minimize"> </input> <br> Отправить контент: <input type = "text" id = "wrisemsg"> </input> <br> chate box: <textarea nop = "13" cols = "100" readonly id id id id id id id = "fusteaea> <//broxeea <//broseaeea </brouse. type = "button" value = "send" onclick = "sendmsg ()"> </input> </body> </html>Выше приведено соответствующие знания об использовании Javaweb WebSocket для реализации простого примера функции чата одноранговым. Я надеюсь, что это будет полезно для всех. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит всем вовремя. Большое спасибо за вашу поддержку сайту wulin.com!