Este artículo comparte el código específico de Java WebSocket para implementar la función Push Push para su referencia. El contenido específico es el siguiente
ambiente:
JDK.1.7.0_51
Apache-Tomcat-7.0.53
Paquete Java Jar: Tomcat-Coyote.Jar, Tomcat-Juli.jar, WebSocket-API.JAR
Clase de envío de mensajes de chatannotation:
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; import javax.websocket.session; import javax.websocket.server.serverendpoint; import org.apache.logging.log; import; org.apache.juli.logging.logFactory; import com.util.htmlfilter; /*** CLASE DE SERVICIO DE MENSACIÓN DE MENSACIÓN WEBSOCKECHE* @Author Hu Hansan** 2014-11-18 7:53:13 PM*/ @serverEndpoint (valor = "/websocket/chat") Class de clase pública Chatannotation {private Static final log = logFactory.getLog (chatannotation.classs); Cadena final estática privada invitada_prefix = "invitado"; ConnectiDS de AtomicInteger final estático privado = new AtomicInteger (0); Mapa final estático privado <String, Object> Connections = new HashMap <String, Object> (); Apodo de cadena final privada; sesión de sesión privada; Public chatannotation () {Nickname = invitados_prefix + ConnectionIds.getAndIrcrement (); } @Onopen public void start (sesión de sesión) {this.session = session; Connectss.put (apodo, esto); String Message = String.Format ("* %s %s", apodo, "se ha unido"); transmisión (mensaje); } @Onclose public void end () {Connections.remove (this); String Message = String.Format ("* %s %s", Nickname, "se ha desconectado"); transmisión (mensaje); } / *** Mensaje de envío Método de activación* @param Mensaje* / @onmessage public void entrante (mensaje de cadena) {// Nunca confíe en el cliente String FilteredMessage = String.format (" %s: %s", Nickname, htmlfilter.filter (Message.Tostring ())); transmisión (FilteredMessage); } @Onerror public void onError (showable t) lanza lanzable {log.error ("Error de chat:" + T.ToString (), t); } / *** Método de envío de mensajes* @param msg* / private static void broadcast (string msg) {if (msg.indexof ("invitado0")! =-1) {sendUser (msg); } else {sendall (msg); }} / *** Enviar a todos los usuarios* @param msg* / public static void sendall (string msg) {for (string key: conections.KeySet ()) {chatannotation client = null; intente {client = (chatannotation) conections.get (clave); sincronizado (cliente) {client.session.getBasicRemote (). sendText (msg); }} catch (ioException e) {log.debug ("Error de chat: no se pudo enviar el mensaje al cliente", e); Connectss.remove (cliente); intente {Client.session.close (); } catch (ioException e1) {// ignorar} string mensaje = string.format ("* %s %s", client.nickname, "se ha desconectado"); transmisión (mensaje); }}} / *** Envíe un mensaje al usuario especificado* @param msg* / public static void senduser (string msg) {chatannotation c = (chatannotation) conections.get ("invitado0"); intente {c.session.getBasicRemote (). SendText (msg); } catch (ioException e) {log.debug ("Error de chat: no se pudo enviar el mensaje al cliente", e); conexión. Remove (C); intente {C.Session.Close (); } catch (ioException e1) {// ignorar} string mensaje = string.format ("* %s %s", c.nickname, "se ha desconectado"); transmisión (mensaje); }}}Clase de herramienta HTMLFilter:
/*** HTML Class de herramienta** @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 (), content, 0); Resultado de StringBuilder = new StringBuilder (content.length + 50); for (int i = 0; i <content.length; i ++) {switch (content [i]) {case '<': result.append ("<"); romper; case '>': resultado.append (">"); romper; case '&': result.append ("&"); romper; caso '"': resultado.append (" ""); romper; predeterminado: resultado.append (contenido [i]); }} return (result.toString ()); }}página:
<%@ page lenguaje = "java" import = "java.util.*" PageEncoding = "utf-8"%> <%string path = request.getContextPath (); String basepath = request.getScheme ()+": //"+request.getServerName ()+":"+request.getServerPort ()+pATH+"/";%> <? encoding = "utf-8"?> <html xmlns = "http://www.w3.org/1999/xhtml" xml: lang = "en"> <adead> <title> test </title> <style type = "text/css"> Entrada #chat {width: 410px} #console-containerer { } #console {border: 1px solid #ccccccc; Border-derecho-color: #99999; color-fondo de borde: #99999; Altura: 170px; Overflow-y: desplazarse; relleno: 5px; Ancho: 100%; } #console p {relleno: 0; margen: 0; } </style> <script type = "text/javaScript"> var chat = {}; Chat.socket = nulo; Chat.connect = (function (host) {if ('webSocket' en la ventana) {chat.socket = new WebSocket (host);} else if ('mozwebsocket' en ventana) {chat.socket = new MozWebSocket (host);} else {console.log ('error: WebSocket no es compatible con este avicultura. "); Console.log ('Info: WebSocket Connection Opened.'); cerrado. '); 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'). Valor; if (mensaje! = '') {Chat.socket.send (mensaje); document.getElementById ('chat'). Valor = '';}}); console var = {}; Console.log = (function (mensaje) {var console = document.getElementById ('console'); var p = document.createElement ('p'); p.style.wordwrap = 'break-word'; p.innerhtml = message; console.appendchild (p); while (console.childnodes.length> 25) {console.removeChild (console. } console.scrolltop = console.scrollHeight; Chat.initialize (); document.adDeventListener ("DomContentLoaded", function () {// Eliminar elementos con la clase "NoScript" - <roscript> no está permitido en xhtml var noscripts = document.getElementsByClassName ("Noscript"); para (var i = 0; i <noscripts.length; i ++) { Noscripts [i] .ParentNode.RemoVeChild (Noscripts [i]); </script> </head> <body> <div> <h2 style = "color: #FF0000"> ¡Parece que su navegador no es compatible con JavaScript! WebSockets depende de que JavaScript esté habilitado. ¡Habilite JavaScript y vuelva a cargar esta página! </h2> </div> <div> <p> <input type = "text" placeholder = "Ingrese el contenido" id = "chat"/> </p> <div id = "console-continer"> <div it = "console"/> </div> </div> </body> </html> Puede especificar para enviarlo a un determinado usuario, o puede enviarlo todo. Para más detalles, consulte el método de transmisión de la clase Chatannotation.
Al publicar el programa, recuerde eliminar los tres paquetes JAR: Tomcat-Coyote.jar, Tomcat-Juli.jar y WebSocket-Api.jar y Start Tomcat.
Captura de pantalla del programa, el usuario de invitados 0 envía información y emite juicios en segundo plano y solo lo envía a sí mismo:
Invitado1:
Invitado2:
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.