Artikel ini membagikan kode spesifik Java Websocket untuk mengimplementasikan fungsi push pesan obrolan untuk referensi Anda. Konten spesifiknya adalah sebagai berikut
lingkungan:
JDK.1.7.0_51
Apache-tomcat-7.0.53
Paket Java Jar: Tomcat-coyote.jar, Tomcat-juli.jar, Websocket-api.jar
Pesan Chatannotation Kelas Pengiriman:
impor java.io.ioException; impor java.util.hashmap; impor java.util.map; impor java.util.concurrent.atomic.atomicinteger; impor javax.websocket.onclose; import javax.websocket.onerror; import javax.websocket.onmessage; import javax.websocket.onopen; import javax.websocket.Session; impor javax.websocket.server.serverendpoint; impor org.apache.websocket.server.serverendpoint; impor org.apache.websocket.server.serverendpoint; impor org.apache.websocket.server.serverendpoint; impor org.apache.websocket.server.serverendpoint; impor org.apache org.apache.juli.logging.logfactory; impor com.util.htmlfilter; /*** WebSocket Pesan Push Kelas Layanan* @Author Hu Hansan** 2014-11-18 7:53:13 PM*/ @ServerEndPoint (value = "/WebSocket/Chat") Kelas Publik Chatannotation {private static log final log = logfactory.getLog (chatannotation.class); string final statis pribadi guest_prefix = "tamu"; connection atomicinteger final private static = atomicinteger baru (0); peta akhir statis pribadi <string, objek> koneksi = hashmap baru <string, object> (); nama panggilan string final pribadi; sesi sesi pribadi; chatannotation publik () {nickName = guest_prefix + connectionIds.getAndIncrement (); } @Onopen public void start (sesi sesi) {this.Session = sesi; connections.put (nama panggilan, ini); String message = string.format ("* %s %s", julukan, "telah bergabung."); siaran (pesan); } @Onclose public void end () {connections.remove (this); String message = string.format ("* %s %s", julukan, "telah terputus."); siaran (pesan); } / *** Pesan Mengirim Metode Pemicu* Pesan @Param* / @onMessage public void Incoming (pesan string) {// Jangan pernah mempercayai string klien filteredMessage = string.Format (" %s: %s", nama panggilan, htmlfilter.filter (message.toString ()); siaran (filteredmessage); } @Onerror public void onError (throwable t) melempar lempar {log.error ("kesalahan obrolan:" + t.toString (), t); } / *** Metode pengiriman pesan* @param msg* / private static void siaran (string msg) {if (msg.indexof ("guest0")! =-1) {senduser (msg); } else {sendall (msg); }} / *** Kirim ke semua pengguna* @param msg* / public static void sendAll (string msg) {for (tombol string: connections.keyset ()) {chatannotation client = null; coba {client = (chatannotation) connections.get (key); disinkronkan (klien) {client.Session.getBasicRemote (). sendText (msg); }} catch (ioException e) {log.debug ("kesalahan obrolan: gagal mengirim pesan ke klien", e); koneksi.remove (klien); coba {client.session.close (); } catch (ioException e1) {// abaikan} string message = string.format ("* %s %s", client.nickname, "telah terputus."); siaran (pesan); }}} / *** Kirim pesan ke pengguna yang ditentukan* @param msg* / public static void sendUser (string msg) {chatannotation c = (chatannotation) connections.get ("Guest0"); coba {c.Session.getBasicRemote (). SendText (msg); } catch (ioException e) {log.debug ("kesalahan obrolan: gagal mengirim pesan ke klien", e); koneksi.remove (c); coba {c.Session.close (); } catch (ioException e1) {// abaikan} string message = string.format ("* %s %s", c.nickname, "telah terputus."); siaran (pesan); }}}Kelas Alat Htmlfilter:
/*** kelas alat html** @author hu hansan*/kelas akhir public htmlfilter {public static string filter (string pesan) {if (pesan == null) return (null); konten char [] = char baru [message.length ()]; message.getChars (0, message.length (), konten, 0); StringBuilder hasil = stringBuilder baru (content.length + 50); untuk (int i = 0; i <content.length; i ++) {switch (content [i]) {case '<': result.append ("<"); merusak; case '>': result.append (">"); merusak; case '&': result.append ("&"); merusak; kasus '"': result.append (" ""); merusak; default: result.append (konten [i]); }} return (result.toString ()); }}halaman:
<%@ page language = "java" import = "java.util.*" pageEncoding = "UTF-8"%> <%string path = request.getContextPath (); string basepath = request.getscheme ()+":" "+getservername ()+": "+request.getserverport ="+"+();%()"? encoding = "UTF-8"?> <html xmlns = "http://www.w3.org/1999/xhtml" xml: lang = "en"> <title> <test> </title> <style type = "text/css"> input #chat {width: 410-c-c-c-c-c-c-c-c-c-c-c-chat: width: width: 410-c-c-c-c-c-c-c-c-c-c-c-cat: width: width: 410-c-c-c-c-c-c-c-c-c-c-c-chat: wid {width: 410 } #console {border: 1px solid #cccccc; Border-Right-Color: #99999; Border-Bottom-Color: #99999; Tinggi: 170px; overflow-y: gulir; padding: 5px; Lebar: 100%; } #console p {padding: 0; Margin: 0; } </tyle> <script type = "text/javascript"> var chat = {}; Chat.socket = null; Chat.connect = (function (host) {if ('WebSocket' di jendela) {chat.socket = WebSocket baru (host);} else if ('mozwebsocket' di jendela) {chat.socket = new mozwebsocket (host);} else {console.log ('error: websocket dukung. function () {console.log ('Info: WebSocket Connection Opened.'); Console.log ('Info: WebSocket.'); 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'). Value; if (message! = '') {Chat.socket.send (pesan); document.geteLementById ('chat'). Value = '';}}); var console = {}; Console.log = (function (pesan) {var console = document.geteLementById ('console'); var p = document.createElement ('p'); p.style.wordwrap = 'break-word'; p.innerHtml = pesan; console.appendChild (p); whene (console.childnodes.length> length> {puppendChild (p); while (console.childnodes.length> length> {puppendChild (p); while (console.childnodes.length> length> {p) {power.longs. console.removechild (console.firstchild); Chat.initialize (); document.addeventListener ("domContentLoaded", function () {// hapus elemen dengan kelas "noscript" - <noscript> tidak diizinkan dalam xhtml var noscripts = document.geteLementsbyclassname ("noscript"); untuk (var i = 0; i <noscripts.lengthy; i ++) {var i = 0; i <noscripts.lengthascript (i ++) {var i = 0; noscripts [i] .parentnode.removechild (noscripts [i]); </script> </head> <body> <div> <h2 style = "color: #ff0000"> Sepertinya browser Anda tidak mendukung JavaScript! Websockets mengandalkan JavaScript yang diaktifkan. Harap Aktifkan JavaScript dan Muat Ulang Halaman ini! </h2> </div> <div> <p> <input type = "text" placeholder = "Harap masukkan konten" id = "chat"/> </p> <div id = "console-container"> <div id = "konsol"/</div> </div> </body> </htm Anda dapat menentukan untuk mengirimkannya ke pengguna tertentu, atau Anda dapat mengirimkan semuanya. Untuk detailnya, lihat metode siaran kelas Chatannotation.
Saat menerbitkan program, ingatlah untuk menghapus Three Jar Packages: Tomcat-coyote.jar, Tomcat-juli.jar, dan Websocket-Api.jar dan mulai Tomcat.
Screenshot program, pengguna Guest0 mengirimkan informasi, dan membuat penilaian di latar belakang dan hanya mengirimkannya ke dirinya sendiri:
Guest1:
Guest2:
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.