تشارك هذه المقالة رمز Java WebSocket المحدد لتنفيذ وظيفة دفع رسالة الدردشة للرجوع إليها. المحتوى المحدد كما يلي
بيئة:
JDK.1.7.0_51
Apache-Tomcat-7.0.53
حزمة Java Jar: Tomcat-coyote.jar ، Tomcat-Juli.jar ، WebSocket-Api.jar
رسالة إرسال رسالة Chatannotation:
استيراد java.io.ioException ؛ استيراد java.util.hashmap ؛ استيراد java.util.map ؛ استيراد java.util.concurrent.atomic.atomicinteger ؛ استيراد javax.websocket.onclose ؛ استيراد javax.websocket.onerror ؛ استيراد javax.websocket.onmessage ؛ استيراد javax.websocket.onopen ؛ استيراد javax.websocket.session ؛ استيراد javax.websocket.server.serverendpoint ؛ org.apache.juli.logging.logfactory ؛ استيراد com.util.htmlfilter ؛ /*** WebSocket Message Push Service Class* Author Hu Hansan** 2014-11-18 7:53:13 PM*/ @serverendpoint (value = "/websocket/chat") class public chatannotation {private static final log = logfactory.getLog (chatannotation.class) ؛ Static Final Final Guest_Prefix = "Guest" ؛ اتصالات atomicinteger النهائية الثابتة الخاصة = new AtomicInteger (0) ؛ الخريطة النهائية الثابتة الخاصة <String ، Object> Connections = New HashMap <String ، Object> () ؛ لقب السلسلة النهائية الخاصة ؛ جلسة خاصة ؛ public chatannotation () {lamname = guest_prefix + connectionIds.getandIncrement () ؛ } @onopen public void start (جلسة الجلسة) {this.session = session ؛ connections.put (لقب ، هذا) ؛ سلسلة السلسلة = string.format ("* ٪ s ٪ s" ، لقب "، قد انضم.") ؛ البث (رسالة) ؛ } onclose public void end () {connections.remove (this) ؛ رسالة سلسلة = string.format ("* ٪ s ٪ s" ، لقب "، قد تم قطع الاتصال.") ؛ البث (رسالة) ؛ } / *** رسالة إرسال الطريقة* param message* / onMessage public void الواردة (رسالة سلسلة) {// لا تثق أبدًا في سلسلة العميل المفلسة = string.format ("٪ s: ٪ s" ، لقب ، htmlfilter.filter (message.toString ()))) ؛ البث (FilledMessage) ؛ } onerror public void onerror (throwable t) يلقي رمي {log.error ("خطأ الدردشة:" + t.toString () ، t) ؛ } / *** طريقة إرسال الرسالة* param msg* / private static void broadcast (String msg) {if (msg.indexof ("guest0")! =-1) {senduser (msg) ؛ } آخر {sendall (msg) ؛ }} / *** أرسل إلى جميع المستخدمين* param msg* / public static void sendall (string msg) {for (string key: connectseSet ()) {chatannotation client = null ؛ حاول {client = (chatannotation) connects.get (مفتاح) ؛ Synchronized (Client) {client.session.getBasicRemote (). SendText (msg) ؛ }} catch (ioException e) {log.debug ("خطأ الدردشة: فشل في إرسال رسالة إلى العميل" ، e) ؛ connects.remove (Client) ؛ حاول {client.session.close () ؛ } catch (ioException e1) {// تجاهل} string message = string.format ("* ٪ s ٪ s" ، client.nickname ، "تم قطع الاتصال.") ؛ البث (رسالة) ؛ }}} / *** أرسل رسالة إلى المستخدم المحدد* param msg* / public static void senduser (string msg) {chatannotation c = (chatannotation) connects.get ("guest0") ؛ حاول {c.session.getBasicRemote (). SendText (msg) ؛ } catch (ioException e) {log.debug ("خطأ الدردشة: فشل في إرسال رسالة إلى العميل" ، e) ؛ connections.remove (c) ؛ حاول {c.session.close () ؛ } catch (ioException e1) {// تجاهل} message = string.format ("* ٪ s ٪ s" ، c.nickname ، "تم قطع الاتصال.") ؛ البث (رسالة) ؛ }}}فئة أدوات HTMLFILTER:
/*** class html tool class** author hu hansan*/public class htmlfilter {public static string filter (string message) {if (message == null) return (null) ؛ محتوى char [] = new char [message.length ()] ؛ message.getChars (0 ، message.length () ، content ، 0) ؛ StringBuilder نتيجة = new StringBuilder (content.length + 50) ؛ لـ (int i = 0 ؛ i <content.length ؛ i ++) {switch (content [i]) {case '<': result.append ("<") ؛ استراحة؛ Case '>': result.append (">") ؛ استراحة؛ Case '&': result.append ("&") ؛ استراحة؛ حالة "": result.append ("" ") ؛ استراحة؛ الافتراضي: result.append (المحتوى [i]) ؛ }} return (result.toString ()) ؛ }}صفحة:
<٪@ page language = "java" import = "java.util.*" pageencoding = "utf-8" ٪> <٪ string path = request.getContextPath () ؛ String basePath = request.getScheme ()+": //" request.getServerName ()+": الترميز = "utf-8"؟> <html xmlns = "http://www.w3.org/1999/xhtml" xml: lang = "en"> <head> test </title> <style type = "text/css"> inpult {width: 410px} } #console {border: 1px solid #cccccc ؛ لون اليمين الحدودي: #99999 ؛ بلون الحدود: #99999 ؛ الارتفاع: 170 بكسل ؛ فائض y: التمرير ؛ الحشو: 5 بكسل ؛ العرض: 100 ٪ ؛ } #console p {padding: 0 ؛ الهامش: 0 ؛ } </style> <script type = "text/javaScript"> var chat = {} ؛ chat.socket = null ؛ chat.connect = (function (host) {if ('websocket' in window) {chat.socket = new websocket (host) ؛} آخر إذا ('mozwebsocket' في النوافذ) {chat.socket = new mozwebsocket (stibouck) console.log (info include: event.kode == 13) ؛ مغلق.) ؛ chat.initialize = function () {if (window.location.protocol == 'http:') {chat.connect ('ws: //' + window.location.host + '/socket2/webocket/chat') ؛ } آخر {chat.connect ('wss: //' + window.location.host + '/socket2/websocket/chat') ؛ }} ؛ chat.sendMessage = (function () {var message = document.getElementById ('chat'). value ؛ if (message! = '') {chat.socket.send (message) ؛ document.getElementById ('chat'). value = '' ؛}}) ؛ var console = {} ؛ console.log = (function (message) {var console = document.getElementById ('console') ؛ var p = document.createElement ('p') ؛ p.style.wordwrap = 'break-word' ؛ p.innerhtml = message ؛ console.appendchild (p) ؛ ther (console.childnodes.llondes Console.RemoveChild (console.firstchild) ؛ chat.initialize () ؛ document.addeventListener ("domcontentloaded" ، function () {// إزالة العناصر مع فئة "noscript" - <Noscript> غير مسموح بها في xhtml var noscripts = document.getElementSbyClassName ("noscript") ؛ لـ (var i = 0 ؛ i <noscripts.length ؛ i ++) { noscripts [i] .parentnode.removechild (noscripts [i]) ؛ </script> </head> <body> <viv> <h2 style = "color: #ff0000"> يبدو أن متصفحك لا يدعم JavaScript! تعتمد WebSockets على تمكين JavaScript. يرجى تمكين javaScript وإعادة تحميل هذه الصفحة! </h2> </viv> <viv> <p> <pl input type = "text" placeholder = "الرجاء إدخال المحتوى" id = "chat"/> </p> <div id = "console-container"> <div id = "console"/> </div> </body> </html يمكنك تحديد لإرساله إلى مستخدم معين ، أو يمكنك إرسال كل شيء. للحصول على التفاصيل ، راجع طريقة البث لفئة Chatannotation.
عند نشر البرنامج ، تذكر حذف حزم الجرة الثلاث tomcat-coyote.jar و tomcat-juli.jar و websocket-api.jar لبدء Tomcat.
لقطة الشاشة للبرنامج ، يرسل مستخدم Guest0 معلومات ، ويصدر أحكامًا في الخلفية ويرسلها فقط إلى نفسه:
Guest1:
Guest2:
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.