Cet article partage le code spécifique de Java WebSocket pour implémenter la fonction de push de message de chat pour votre référence. Le contenu spécifique est le suivant
environnement:
JDK.1.7.0_51
apache-tomcat-7.0.53
Java Jar Package: Tomcat-Coyote.jar, Tomcat-Juli.jar, WebSocket-API.jar
Chatannotation Message Envoi du cours:
import java.io.ioException; import java.util.hashmap; import java.util.map; import java.util.concurrent.atomic.atomicinteger; Importer javax.websocket.onclose; import javax.websocket.onerror; import javax.websocket.onmessage; import javax.websocket.onopen; import javax.websocket.session; import javax.websocket.server.serverendpoint; import org.apache.juli.logging.log; importer; import; org.apache.juli.logging.logfactory; import com.util.htmlfilter; / ** * WebSocket Message Push Service Classe * @author Hu Hansan * * 2014-11-18 7:53:13 PM * / @ seserverendPoint (value = "/ WebSocket / Chat") Classe publique Chatannotation {private static final log = logfactory.getLog (Chatannotation.class); chaîne finale statique privée invité_prefix = "invité"; ATOMICInteger ConnectionIDS de STATIQUE privé = nouveau atomicInteger (0); Map final statique privé <chaîne, objet> connexions = new HashMap <String, objet> (); surnom de chaîne finale privée; Session privée; public chatannotation () {nause = invité_prefix + connexionids.getandincrement (); } @Onopen public void start (session session) {this.Session = session; Connections.put (surnom, this); String message = string.format ("*% s% s", surnom, "a rejoint."); diffusion (message); } @OnClose public void end () {connections.remove (this); String message = string.format ("*% s% s", surnom, "a déconnecté."); diffusion (message); } / ** * Message Envoi de la méthode du déclencheur * @param message * / @onMessage public void Intoming (String Message) {// Never Trust the Client String filteredMessage = String.Filter ("% s:% s", surnom, htmlfilter.filter (message.tostring ())); Broadcast (filteredMessage); } @Onerror public void onError (throwable t) lève le throwable {log.error ("error de chat:" + t.toString (), t); } / ** * Message Sending Method * @param msg * / private static void Broadcast (String msg) {if (msg.indexof ("invité0")! = - 1) {sendUser (msg); } else {sendall (msg); }} / ** * Envoyer à tous les utilisateurs * @param msg * / public static void Sendall (String msg) {for (String key: Connections.KeySet ()) {Chatannotation client = null; essayez {client = (chatannotation) connexes.get (key); synchronisé (client) {client.Session.getBasicRemote (). SendText (msg); }} catch (ioException e) {log.debug ("Erreur de chat: Échec du message au client", e); connexion.Remove (client); essayez {client.Session.close (); } catch (ioException e1) {// ignore} string message = string.format ("*% s% s", client.nickname, "a été déconnecté."); diffusion (message); }}} / ** * Envoyez un message à l'utilisateur spécifié * @param msg * / public static void Senuser (String msg) {Chatannotation c = (Chatannotation) Connections.get ("invité0"); essayez {C.Session.getBasicRemote (). SendText (msg); } catch (ioException e) {log.debug ("Erreur de chat: Échec du message au client", e); connexions.Remove (c); essayez {c.Session.close (); } catch (ioException e1) {// ignore} string message = string.format ("*% s% s", c.nickname, "a été déconnecté."); diffusion (message); }}}Classe d'outils htmlfilter:
/ ** * HTML Tool Class * * @Author Hu Hansan * / public final class htmlfilter {public static String Filter (String Message) {if (message == null) return (null); Char Content [] = new Char [message.length ()]; message.getChars (0, message.length (), contenu, 0); StringBuilder result = new StringBuilder (content.length + 50); pour (int i = 0; i <tent.length; i ++) {switch (contenu [i]) {case '<': result.append ("<"); casser; case '>': result.append (">"); casser; case '&': result.append ("&"); casser; case '"': result.append (" ""); casser; Default: result.append (contenu [i]); }} return (result.toString ()); }}page:
<% @ Page Language = "Java" Import = "Java.util. *" Pageencoding = "UTF-8"%> <% String path = request.getContextPath (); String basepath = request.getscheme () + ": //" + request.getServername () + ":" + request.getServer () + path + "/";%> <? Encoding = "UTF-8"?> <html xmlns = "http://www.w3.org/1999/xhtml" xml: lang = "en"> <adref> <title> test </ title> <style type = "text / css"> entrée # chat {largement: 410px} # console-contineur {width; 400px; } #Console {border: 1px solide #cccccc; Border-Right-Color: # 99999; Color de la frontière: # 99999; hauteur: 170px; débordement-y: faites défiler; rembourrage: 5px; Largeur: 100%; } #console p {padding: 0; marge: 0; } </ style> <script type = "text / javascript"> var chat = {}; Chat.socket = null; Chat.connect = (function (host) {if ('webSocket' dans la fenêtre) {chat.socket = new WebSocket (hôte);} else if ('mozwebsocket' dans la fenêtre) {Chat.socket = new Mozwebsocket (hôte);} else {console.log ('error: WebSocket n'est pas pris en charge par ce quelconque. Console («Info: WebSocket a ouvert.»); fermé. ');}; Chat.socket.onMessage = Fonction (message) {Console.log (message.data); Chat.Initialize = function () {if (window.location.protoCol == 'http:') {chat.connect ('ws: //' + window.location.host + '/ socket2 / WebSocket / chat'); } else {chat.connect ('wss: //' + window.location.host + '/ socket2 / WebSocket / chat'); }}; Chat.sendMessage = (function () {var message = document.getElementById ('chat'). Valeur; if (message! = '') {Chat.socket.send (message); document.getElementById ('chat'). Value = '';}}); var console = {}; Console.log = (fonction (message) {var console = document.getElementById ('console'); var p = document.CreateElement ('p'); p.style.wordwrap = 'Break-Word'; Console.RemoveChild (Console.FirstChild);} Console.ScrollTop = Console.ScrollHeight; Chat.Initialize (); Document.AddeventListener ("DomContentloaded", function () {// supprimer les éléments avec "NoScript" class - <noscript> n'est pas autorisé dans xhtml var noscripts = document.getElementsByClassName ("Noscript"); for (var i = 0; i <noscripts.length; i ++) { noscripts [i] .parentNode.removechild (noscripts [i]);}}, false); </cript> </ head> <body> <div> <h2 style = "Color: # ff0000"> semble que votre navigateur ne prend pas en charge JavaScript! Websockets s'appuie sur l'activation de JavaScript. Veuillez activer JavaScript et recharger cette page! </h2> </ div> <v> <p> <input type = "text" placeholder = "s'il vous plaît entrez le contenu" id = "chat" /> </p> <div id = "console-contrainer"> <div id = "console" /> </div> </div> </ body> </html> Vous pouvez spécifier pour l'envoyer à un certain utilisateur, ou vous pouvez tout envoyer. Pour plus de détails, consultez la méthode de diffusion de la classe Chatannotation.
Lors de la publication du programme, n'oubliez pas de supprimer les trois packages JAR Tomcat-Coyote.jar, Tomcat-Juli.jar et Websocket-API.jar pour démarrer Tomcat.
Capture d'écran du programme, l'utilisateur invité0 envoie des informations et porte des jugements en arrière-plan et l'envoie uniquement à lui-même:
Guest1:
Guest2:
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.