Zunächst möchte ich Ihnen erklären: JDK 7 ist erforderlich, Tomcat muss die WebSocket -Version unterstützen
1.Initservlet
Diese Klasse wird hauptsächlich zum Initialisieren des MAP -Repositorys verwendet, das den zukünftigen Speicher von Benutzeridentitätsinformationen erstellt, die Initialisierungsmethode init verwendet, um das Repository zu initialisieren, und die statische Methode GetOcketList verwenden, um die entsprechenden Informationen zu Benutzeridentität zu erhalten.
WebSocket, ich denke, MessageInbound wird verwendet, um die Informationen des Login zu identifizieren, sie zu finden, um die entsprechende Person zu finden und Nachrichten zu pushen. Jedes Login erzeugt eine MessageInbound.
Hier speichert HashMap <String, MessageInbound>: String die Anmelde -ID der Benutzersitzung und speichert die für das Drücken erforderlichen Identitätsinformationen. Das obige ist ein persönliches mündliches Verständnis.
Packungsfassette; Import Java.nio.CharBuffer; Import Java.util.ArrayList; import Java.util.hashMap; importieren java.util.list; importieren javax.servlet.servletConfig; importieren javax.servlet.servletException; import Javax.servlet.http.httpServlet; import org.apache.catalina.websocket.messageInbound; public class InitServlet erweitert httpServlet {private statische endgültige long serialversionuid = -l; // private statische Liste <StacesInbound> SocketList; private statische Hashmap <String, MessageInbound> Socketlist; public void init (servletConfig config) löst ServletException {// InitServlet.socketList = new ArrayList <MessageInbound> () aus; InitServlet.SocketList = New HashMap <String, MessageInbound> (); Super.init (config); System.out.println ("Server start ==========="); } public static HashMap <String, messageInbound> getocketList () {return InitServlet.socketList; } /* public static list <StousInbound> getocketList () {return InitServlet.socketList; } */} 2.MyWebsocketServlet
Das WebSocket wird verwendet, um ein Verbindungsservlet herzustellen. Wenn Sie eine Verbindung herstellen, erhalten Sie zunächst die BenutzerID der Anmeldung in der Sitzung und übergeben Sie die BenutzerID, wenn Sie den MyMessageInbound -Konstruktor aufrufen.
Packungsfassette; importieren java.io.ioException; Import Java.io.printwriter; Import Java.nio.CharBuffer; importieren javax.servlet.servletException; import Javax.servlet.http.httpServlet; importieren javax.servlet.http.httpServletRequest; importieren javax.servlet.http.httpServletResponse; import org.apache.catalina.websocket.streaminbound; import org.apache.catalina.websocket.websocketServlet; / ** * * @className: MyWebSocketServlet * @Description: Erstellt beim Aufbau einer Verbindung if (userername == null) {return null; } Rückgabe -Benutzername; // return (string) request.getAttribute ("user"); } @Override protected StreamInbound createWebSocketInbound(String arg, HttpServletRequest request) { System.out.println("#############"); Neue MyMessageInbound zurückgeben (this.getUser (Anfrage)); }} 3. Die Onopen -Methode ruft das MAP -Identitäts -Repository des InitServlet auf.
Setzen Sie die Benutzer-Benutzer-ID- und die WebSocket-Identitätsinformationen, die dem angemeldeten Benutzer-Nachrichten entsprechend sind, ein (BenutzerID können verwendet werden, um die Identität zu finden, die zum Drücken von MessageInbound erforderlich ist).
OnTextMessage: Wird verwendet, um Nachrichten zu erhalten und Nachrichten zu senden
Packungsfassette; importieren java.io.ioException; Import Java.nio.ByTebuffer; Import Java.nio.CharBuffer; import Java.util.hashMap; import org.apache.catalina.websocket.messageInbound; import org.apache.catalina.websocket.wsoutbound; Import util.messageUtil; öffentliche Klasse MYMessageInbound erweitert MessageInbound {private String -Name; public myMessageInBound () {Super (); } public myMessageInbound (String -Name) {Super (); this.name = name; } @Override Protected void OnBinaryMessage (bytebuffer arg) löst IOException aus {// todo automatisch generierte Methode Stub} @Override Protected void OnTextMessage (Charbuffer msg) Throws IOException {// meldung nach der von der Benutzer hashmap <string, String, Zeichenfolge, Messagemap = Messagil. // Nachrichtenklasse verarbeiten // UPLINE Benutzersammlung Klasse MAP HashMap <String, messageInbound> usermsgmap = InitServlet.getSocketList (); String fromname = messAGemap.get ("fromName"); // Die Nachricht stammt aus der userID -String toname = messaGemap.get ("toname"); // Die Nachricht wird an die Benutzer -ID des Benutzers gesendet // Die UsMessageInbound -messageInbound = usermsgmap.get (Toname) erhalten; // Die messageInbound an den Benutzer im Lagerhaus gesendet if (messageInbound! String content = MessAgemap.get ("Inhalt"); // Messing Inhaltsstring -String -msgContentString = Fromname + "" + Inhalt; // Die gesendete Nachricht konstruieren // Senden Sie den Inhalt Charbuffer tomsg = charBuffer.wrap (msgContentString.toCharArray ()); Outbound.WritETextMessage (Tomsg); // outbound.flush (); } /* für (messageInbound -messageInbound: InitServlet.getSocketList ()) {Charbuffer Buffer = charBuffer.Wrap (msg); WSoutBound Outbound = messageInbound.getWSoutBound (); outbound.WritETextMessage (Puffer); outbound.flush (); } */} @Override Protected void onclose (int status) {InitServlet.getSocketList (). REMET (this); Super.onclose (Status); } @Override protected void onopen (wSoutBound Outbound) {Super.onopen (Outbound); // logined in if (name! = Null) {InitServlet.getSocketList (). Put (Name, dies); } // InitServlet.getSocketList (). Add (this); }} 4. Nachrichtenverarbeitungsklasse, Verarbeitungsnachrichten vom Front-End gesendet
Paket Util; Import Java.nio.CharBuffer; import Java.util.hashMap; / ** * * @className: messageUtil * @Description: Nachrichtenverarbeitungsklasse * @author mangues * @date - */ public class messageutil {public static HashMap <String, String> getMessage (Charbuffer msg) {Hashmap <String, String> map = new Hashmap <String, String> (); String m [] = msgstring.Split (","); map.put ("fromname", m []); map.put ("toname", m []); map.put ("Inhalt", m []); Rückgabekarte; }} 5. Webkonfiguration
<? xsi: scheMalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <servlet> <Servlet-name> myweb-nlet </servlet- name> <Servlet-Class> Socket.MyWebsocketServlet </Servlet-Class> </Servlet> <Servlet-Mapping> <Servlet-Name> MyWebsocket </Servlet-name> <url-pufter>*. <Servlet-Class> Socket.initServlet </Servlet-Class> <Load-on-Startups> 1 </load-on-Startup> </Servlet> <Welcome-File-List> <Welcome-File> Index.jsp </Welcome-File> </Welcome-File-List> </web-App>
6. Front-End habe ich für einen Bequemlichkeit direkt zwei JSP verwendet und <%Session.
Es gibt keinen wesentlichen Unterschied zwischen den beiden JSP, es wird nur verwendet, um anzuzeigen, dass zwei verschiedene Personen angemeldet sind. Sie können verschiedene JSP im selben Browser zum Chatten öffnen.
A. Minimieren
<%@ page Language = "java" contentType = "text/html; charset = utf-" pageCoding = "utf-"%> <! docType html> <html> <Head> <meta http-äquiv = "content-type" content = "text/html; charSet = utf-" charset = charset = charset = charset type = "text/javaScript" src = "js/jQuery ... min.js"> </script> <%Session. Funktion startWebSocket () {if ('WebSocket' im Fenster) ws = new WebSocket ("ws: // localhost: /websocket/mywebsocket.do"); sonst if ('Mozwebsocket' im Fenster) ws = new Mozwebocket ("ws: // localhost: /websocket/mywebsocket.do"); sonst wachsam ("nicht Unterstützung"); ws.onMessage = function (evt) {//alert(evt.data); console.log (EVT); $ ("#xiaoxi"). Val (evt.data); }; ws.onclose = function (evt) {// alert ("close"); document.getElementById ('dingglu'). Innerhtml = "offline"; }; ws.onopen = function (evt) {// alert ("open"); document.getElementById ('dingglu'). Innerhtml = "Online"; document.GetElementById ('Benutzername'). InnerHtml = 'minimize'; }; } function sendsg () {var fromname = "minimize"; var toname = document.getElementById ('name'). Wert; // an wem var content = document.getElementById ('writeemsg') senden. Wert; // Inhalte ws.send senden (fromname+","+toname+","+content); } </script> </head> <body onload = "startWebsocket ();"> <p> Chat -Funktion Implementierung </p> Anmeldestatus: <span id = "deglu" style = "color: rot;"> log in </span> <br> labin person: <span id = "userername" udname "id" id "id" id "id" id "id" value = "xiao ming"> </input> <br> Inhalt senden: <Eingabe type = "text" id = "writeemsg"> </input> <br> Chat -Box: <textAreaaaaaa. </html> B. Xiao Ming
<%@ page Language = "java" contentType = "text/html; charset = utf-8" pageCoding = "utf-8"%> <! docType html> <html> <Head> <meta http-äquiv = "content-type" content = "text> text/html; type = "text/javaScript" src = "js/jQuery 2.1.1.min.js"> </script> <%Session WebSocket ("WS: // localhost: 8080/webocket/myWebsocket.do"); sonst if ('Mozwebsocket' im Fenster) WS = New Mozwebocket ("WS: // localhost: 8080/webocket/myWebsocket.do"); sonst wachsam ("nicht Unterstützung"); ws.onMessage = function (evt) {console.log (evt); //alert(evt.data); $ ("#xiaoxi"). Val (evt.data); }; ws.onclose = function (evt) {// alert ("close"); document.getElementById ('dingglu'). Innerhtml = "offline"; }; ws.onopen = function (evt) {// alert ("open"); document.getElementById ('dingglu'). Innerhtml = "Online"; document.getElementById ('Benutzername'). Innerhtml = "Xiao ming"; };} Funktion sendMsg () {var fromname = "xiao ming"; var toname = document.getElementById ('name'). Wert; // an wem var content = document.getElementById ('writeemsg') senden. Wert; // Inhalte ws.send senden (fromname+","+toname+","+content);} </script> </head> <body onload = "startWebsocket ();"> <p> Chat -Funktion Implementierung </p> Anmeldung in Anmeldestatus: <span id = "denglu" style = "style =" color: rot; "> log in </span> <brastars: id = "userername"> </span> <br> <br> <br> an: <input type = "text" id = "name" value = "minimize"> </input> <br> Inhalt senden: <Eingabe type = "text" id = "Writemsg"> </input> <br> Chatbox: <textarea rows = "colssg) </100" 100 "100" 100 "100" 100 "100" 100 "100" 100 "100" 100 ". type = "button" value = "send" onclick = "sendMsg ()"> </input> </body> </html>Das obige ist das relevante Wissen über die Verwendung von Javaweb WebSocket zur Implementierung einfacher Peer-to-Peer-Chat-Funktionsbeispielcodes. Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird allen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!