Dieser Artikel teilt den spezifischen Code von Java WebSocket mit, um die Chat -Push -Funktion für Ihre Referenz zu implementieren. Der spezifische Inhalt ist wie folgt
Umfeld:
JDK.1.7.0_51
Apache-Tomcat-7.0.53
Java Jar Paket: tomcat-coyote.jar, tomcat-juli.jar, webocket-api.jar
Chatannotation Meldung Senden Kurs:
Import Java.io.ioException; Import Java.util.hashMap; Import Java.util.map; Import Java.util.Concurrent.atomic.atomicinteger; Import Javax.Websocket.onclose; Import Javax.Websocket.onError; Import Javax.Websocket.onMessage; Import Javax.Websocket.onopen; org.apache.juli.logging.logfactory; import com.util.htmlfilter; /*** WebSocket-Nachricht Push Service Class* @Author Hu Hansan**** 2014-11-18 7:53:13 PM*/ @ServerendPoint (value = "/webSocket/chat") öffentliche Klasse Chatannotation {private static letztes log = logFactory.getlog (chatannotation.class); private statische endgültige String -Guest_prefix = "Gast"; private statische endgültige Atomicinger ConnectionIDs = New Atomicinteger (0); private statische endgültige Karte <String, Objekt> Connections = New HashMap <String, Object> (); private endgültige String -Spitzname; private Sitzung; public chatannotation () {fickname = guden_prefix + connectionIds.getandIncrement (); } @Onopen public void start (Sitzungssitzung) {this.Session = session; Connectionss.put (Spitzname, dies); String message = string.Format ("* %s %s", Spitzname, "hat verbunden."); Sendung (Nachricht); } @Onclose public void end () {connectionss.remove (this); String message = string.format ("* %s %s", Spitzname, "hat getrennt."); Sendung (Nachricht); } / *** Meldung Senden Trigger -Methode* @param meldung* / @onMessage public void Incoming (String -Nachricht) {// Vertrauen Sie niemals dem Client -String -String -filteredMessage = string.format (" %s: %s", Spickname, htmlfilter.filter (Message.ToString ()); Rundfunk (filteredMessage); } @OnError public void onError (throwable t) löscht Throwable {log.Error ("Chat -Fehler:" + t.toString (), t); } / *** Nachrichtensenden-Methode* @param msg* / private static void Broadcast (String msg) {if (msg.indexof ("guet0")! =-1) {sendUser (msg); } else {sendAll (msg); }} / *** an alle Benutzer senden* @param msg* / public static void sendAll (String msg) {für (String -Schlüssel: connecals.keyset ()) {chatannotation client = null; try {client = (chatannotation) Connections.get (Schlüssel); synchronisierte (client) {client.session.getBasicremote (). sendText (msg); }} catch (ioException e) {log.debug ("Chat -Fehler: Versäumnis, Nachricht an Client zu senden", e); Connectionss.Remove (Client); try {client.session.close (); } catch (ioException e1) {// ignorieren} String message = string.format ("* %s %s", client.nickname, "wurde getrennt."); Sendung (Nachricht); }}} / *** Senden Sie eine Nachricht an den angegebenen Benutzer* @param msg* / public static void sendUser (String msg) {chatannotation c = (chatannotation) Connections.get ("guden0"); try {c.Session.getBasicremote (). sendText (msg); } catch (ioException e) {log.debug ("Chat -Fehler: Versäumnis, Nachricht an Client zu senden", e); Connectionss.Remove (c); try {c.Session.close (); } catch (ioException e1) {// ignorieren} String message = string.format ("* %s %s", C.Nickname, "wurde getrennt."); Sendung (Nachricht); }}}HTMLFilter -Werkzeugklasse:
/*** HTML -Werkzeugklasse** @Author Hu Hansan*/öffentliche endgültige Klasse htmlfilter {public static String filter (String -Nachricht) {if (message == null) return (null); char content [] = new char [message.length ()]; message.getchars (0, message.length (), Inhalt, 0); StringBuilder result = new StringBuilder (content.length + 50); für (int i = 0; i <content.length; i ++) {switch (content [i]) {case '<': result.append ("<"); brechen; Fall '>': result.append (">"); brechen; Fall '&': result.append ("&"); brechen; Fall '"': result.append (" ""); brechen; Standard: result.append (Inhalt [i]); }} return (result.toString ()); }}Seite:
<%@ page Language = "java" import = "java.util. coding = "utf-8"?> <html xmlns = "http://www.w3.org/1999/xhtml" xml: Lang = "en"> <kopf> <title> test </title> <style type = "text/cs } #console {Border: 1PX Solid #ccccc; Grenzrechtsfarbe: #99999; Grenzbodenfarbe: #99999; Höhe: 170px; Überlauf-y: Scroll; Polsterung: 5px; Breite: 100%; } #console p {padding: 0; Rand: 0; } </style> <script type = "text/javaScript"> var chat = {}; Chat.socket = null; Chat.connect = (function (host) {if ('webSocket' im Fenster) {chat.socket = new WebSocket (host);} else if ('Mozwebsocket' im Fenster) {chat.socket = new Mozwebsocket (Host);} sonst {console.log ('MistRe: WebSocket nicht unterstützt mit diesem browser.'); Chat.socket.onopen = function () {console.log ('info: WebSocket -Verbindung geöffnet.'); document.getElementById ('chat'). Onkeydown = null; Chat.initialize = function () {if (window.location.protocol == 'http:') {chat.connect ('ws: //' + window.location.host + '/socket2/webocket/chat'); } else {chat.connect ('wss: //' + window.location.host + '/socket2/webocket/chat'); }}; Chat.sendMessage = (function () {var message = document.getElementById ('chat'). Value; if (message! var console = {}; Console.log = (Funktion (message) {var console = document.getElementById ('console'); var p = document.createelement ('p'); console.removechild (console.Firstchild); Chat.initialize (); document.adDeVentListener ("DomContentLoded", function () {// Elemente mit "Noscript" -Klassel entfernen. noscripts [i] .ParentNode.removechild (NoScripts [i]); </script> </head> <body> <div> <h2 style = "color: #ff0000"> Scheint, dass Ihr Browser JavaScript nicht unterstützt! WebSockets beruhen darauf, dass JavaScript aktiviert wird. Bitte aktivieren Sie JavaScript und laden Sie diese Seite neu! Sie können angeben, dass Sie es an einen bestimmten Benutzer senden oder alles senden können. Weitere Informationen finden Sie in der Broadcast -Methode der Chatannotation -Klasse.
Denken Sie beim Veröffentlichen des Programms daran, die drei JAR-Pakete zu löschen: tomcat-coyote.jar, tomcat-juli.jar und webocket-api.jar und starten Sie Tomcat.
Programm Screenshot, Guest0 -Benutzer sendet Informationen und urteile im Hintergrund und sendet sie nur an sich selbst:
Gast1:
Gast2:
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.