بادئ ذي بدء ، أود أن أعلن لك: JDK 7 مطلوب ، يحتاج Tomcat إلى دعم إصدار WebSocket
1.initservlet
يتم استخدام هذه الفئة بشكل أساسي لتهيئة مستودع MAP الذي يقوم ببناء التخزين المستقبلي لمعلومات هوية المستخدم ، واستخدام طريقة التهيئة الخاصة به لتهيئة المستودع ، واستخدام طريقة GetSocket Method للحصول على معلومات هوية المستخدم المقابلة.
WebSocket ، أعتقد أن MessageInbound يستخدم لتحديد معلومات تسجيل الدخول ، واستخدامها للعثور على الشخص المقابل ودفع الرسائل. كل تسجيل دخول سوف يولد messageInbound.
هنا hashmap <string ، messageInbound>: تقوم String بتخزين معرف تسجيل الدخول لجلسة المستخدم ، ويخزن MessageInbound معلومات الهوية المطلوبة للدفع. ما سبق هو فهم الفم الشخصي.
مقبس الحزمة استيراد java.nio.charbuffer ؛ استيراد java.util.arraylist ؛ استيراد java.util.hashmap ؛ استيراد java.util.list ؛ استيراد javax.servlet.servletconfig ؛ استيراد javax.servlet.servletexception ؛ استيراد javax.servlet.http.httpservlet ؛ استيراد org.apache.catalina.websocket.messageInbound ؛ الطبقة العامة initservlet يمتد httpservlet {private static Final Long SerialVersionuid = -l ؛ // قائمة ثابتة خاصة <ChisalBound> SocketList ؛ HashMap الثابت الخاص <string ، messageInbound> socketList ؛ public void init (servletconfig config) يلقي servletexception {// initservlet.socketlist = new ArrayList <MessageInbound> () ؛ initservlet.socketlist = new hashmap <string ، messageInbound> () ؛ super.init (config) ؛ System.out.println ("Server Start =============") ؛ } hashmap الثابت العام <string ، messageInbound> getSocketList () {return initservlet.socketlist ؛ } /* القائمة الثابتة العامة <CHANGEINBOUND> getSocketList () {return initservlet.socketlist ؛ } */} 2.MyWebsocketServlet
يتم استخدام WebSocket لإنشاء servlet اتصال. عند إنشاء اتصال ، احصل أولاً على معرف تسجيل الدخول في الجلسة ، وقم بتمرير معرف المستخدم عند الاتصال بمنشئ MyMessageInbound.
مقبس الحزمة استيراد java.io.ioException ؛ استيراد java.io.printwriter ؛ استيراد java.nio.charbuffer ؛ استيراد javax.servlet.servletexception ؛ استيراد javax.servlet.http.httpservlet ؛ استيراد javax.servlet.http.httpservletrequest ؛ استيراد javax.servlet.http.httpservletresponse ؛ استيراد org.apache.catalina.websocket.streaminbound ؛ استيراد org.apache.catalina.websocket.websocketservlet ؛ / ** * * * @classname: myWebsOcketServlet * description: تم إنشاؤه عند إنشاء اتصال * Author Mangues * date - */ public class myWebsOcketServlet يمتد websocketservlet if (username == null) {return null ؛ } إرجاع اسم المستخدم ؛ // return (string) request.getAttribute ("user") ؛ } Override محمية StreamInbound CreateWebSocketInbound (سلسلة Arg ، HttpservletRequest طلب) {system.out.println ("#############") ؛ إرجاع mymessageInbound جديد (this.getuser (request)) ؛ }} 3. تدعو طريقة OnoPen مستودع هوية الخريطة لـ Initservlet.
ضع معرف المستخدم ومعلومات هوية WebSocket المقابلة لرسالة المستخدم المسجلة (يمكن استخدام userId للعثور على الهوية المطلوبة لدفع MessageInbound)
OntextMessage: يستخدم للحصول على الرسائل وإرسال الرسائل
مقبس الحزمة استيراد java.io.ioException ؛ استيراد java.nio.bytebuffer ؛ استيراد java.nio.charbuffer ؛ استيراد java.util.hashmap ؛ استيراد org.apache.catalina.websocket.messageInbound ؛ استيراد org.apache.catalina.websocket.wsoutBound ؛ استيراد util.messageutil ؛ الطبقة العامة mymessageInbound يمتد messageInbound {اسم السلسلة الخاصة ؛ public mymessageInbound () {super () ؛ } public mymessageInbound (اسم السلسلة) {super () ؛ this.name = name ؛ } override void onBinaryMessage (bytebuffer arg) يلقي ioException {// todo method method method tuto} @override void ontextmessage (charbuffer msg) يلقي ioException {// map بعد الرسالة المرسلة بواسطة المستخدم <string> string> messagem = ms.getm. // معالجة فئة الرسائل // Upline مجموعة مجموعة المستخدم خريطة hashmap <string ، messageInbound> usermsgmap = initservlet.getSocketList () ؛ String fromName = messageMap.get ("fromName") ؛ // تأتي الرسالة من سلسلة userId toname = messagemap.get ("toname") ؛ // يتم إرسال الرسالة إلى المستخدم الخاص بالمستخدم // احصل على messageInbound usermessageInbound = usermsgmap.get (toname) ؛ // تم إرسال messageInbound إلى المستخدم في المستودع if (messageInBound! = null) {// إذا كانت الرسالة موجودة إلى المستخدم ، فعليك إجراء عملية wsoutbound خارج = messageInbound.getWsoutBound () ؛ content string = messagemap.get ("content") ؛ // احصل على سلسلة محتوى الرسالة msgContentString = fromName + "" + content ؛ // إنشاء الرسالة المرسلة // إرسال المحتوى tomsg charbuffer = charbuffer.wrap (msgContentString.tocharray ()) ؛ outbound.writeTextMessage (TOMSG) ؛ // outbound.flush () ؛ } /* for (messageInbound messageInbound: initservlet.getSocketList ()) {Charbuffer Buffer = Charbuffer.wrap (msg) ؛ wsoutBound Outbound = messageInbound.getWsoutBound () ؛ outbound.writeTextMessage (المخزن المؤقت) ؛ outbound.flush () ؛ } */} override void onClose (int status) {initservlet.getSocketList (). remove (this) ؛ super.onclose (الحالة) ؛ } Override محمي باطل OnoPen (WsoutBound Outbound) {super.onopen (خارج) ؛ // logned in if (name! = null) {initservlet.getSocketList (). put (name ، this) ؛ } // initservlet.getSocketList (). add (this) ؛ }} 4. فئة معالجة الرسائل ، ومعالجة الرسائل التي أرسلها الواجهة الأمامية
حزمة استخدام استيراد java.nio.charbuffer ؛ استيراد java.util.hashmap ؛ / ** * * * @classname: messageutil * description: فئة معالجة الرسائل * Author Mangues * date - */ class public messageutil {public static hashmap <string ، string> getMessage (charbuffer msg) {hashmap <string ، string> map = new hasmap <string> () ؛ سلسلة M [] = msgstring.split ("،") ؛ map.put ("fromname" ، m []) ؛ map.put ("toname" ، m []) ؛ map.put ("المحتوى" ، م []) ؛ خريطة العودة }} 5. تكوين الويب
<؟ XSI: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> servlet> <Srevlet-class> socket.mywebsocketservlet </servlet-class> </servlet> <cervlet-mapping> <Sradlet-Name> myWebObsocket </servlet-name> <Url-pattern>*. <load-on-startup> 1 </load-on-startup> </servlet> <list-file-lister> <lispile-file> index.jsp </isplip-file> </iship-file-list> </web-app>
6. الواجهة الأمامية ، للراحة ، استخدمت مباشرة اثنين من JSP ، واستخدمت <٪ Session.SetAttribute ("المستخدم" ، "Xiao Ming") ٪> للإشارة إلى تسجيل الدخول.
لا يوجد فرق أساسي بين اثنين من JSP ، يتم استخدامه فقط للإشارة إلى أنه تم تسجيل الدخول إلى شخصين مختلفين. يمكنك فتح JSP مختلف في نفس المتصفح للدردشة.
أ. الحد الأدنى
<٪@ page language = "java" contentType = "text/html ؛ charset = utf-" pageencoding = "utf-" ٪> <! doctype html> <html> type = "text/javaScript" src = "js/jquery ... min.js"> </script> <٪ session.setattribute ("user" ، "mailize") ؛ ٪> <script type = "text/javaScript"> var ws = null ؛ وظيفة startWebSocket () {if ('websocket' في النافذة) ws = new WebSocket ("ws: // localHost: /WebObsocket/mywebsocket.do") ؛ آخر إذا ('mozwebsocket' في النافذة) ws = mozwebsocket جديد ("ws: // localhost: /weboBSocket/Mywebsocket.do") ؛ تنبيه آخر ("لا دعم") ؛ ws.onmessage = function (evt) {//alert(evt.data) ؛ console.log (evt) ؛ $ ("#xiaoxi"). val (evt.data) ؛ } ؛ ws.onclose = function (evt) {// alert ("close") ؛ document.getElementById ('denglu'). innerhtml = "intilline" ؛ } ؛ ws.onopen = function (evt) {// alert ("open") ؛ document.getElementById ('denglu'). innerhtml = "online" ؛ document.getElementById ('username'). innerhtml = 'maillize' ؛ } ؛ } دالة sendmsg () {var fromName = "mailerize" ؛ var toname = document.getElementById ('name'). value ؛ // أرسل إلى Who var content = document.getElementById ('writemsg'). value ؛ // إرسال المحتوى ws.send (من name+"،"+toname+"،"+content) ؛ } </script> </head> <body onload = "startWebSbooce () ؛"> <p> تطبيق وظيفة الدردشة </p> حالة تسجيل الدخول: <span id = "denglu" style = "color: red ؛ value = "xiao ming"> </pected> <br> إرسال المحتوى: <type type = "text" id = "writemsg"> </pection> <br> مربع الدردشة: <textarea rows = "" cols = "" readonly id = "/"/////textarea> <br> <button type = "butten" </html> ب. شياو مينغ
<٪@ page language = "java" contentType = "text/html ؛ charset = utf-8" pageencoding = "utf-8" ٪> <! doctype html> <html> <head> <meta http-equiv = "content-type" content = "text/html ؛ type = "text/javaScript" src = "js/jquery 2.1.1.min.js"> </script> <٪ session.setAttribute ("user" ، "xiao ming") ؛ ٪> <script type = "text/javaScript"> var ws = null ؛ WebSocket ("ws: // localhost: 8080/websocket/myWeboSceep.do") ؛ وإلا إذا ("mozwebsocket" في النافذة) ws = new mozwebsocket ("ws: // localhost: 8080/websocket/myWeboSbooce.do") ؛ تنبيه آخر ("لا دعم") ؛ ws.onmessage = function (evt) {console.log (evt) ؛ //alert(evt.data) ؛ $ ("#xiaoxi"). val (evt.data) ؛ } ؛ ws.onclose = function (evt) {// alert ("close") ؛ document.getElementById ('denglu'). innerhtml = "intilline" ؛ } ؛ ws.onopen = function (evt) {// alert ("open") ؛ document.getElementById ('denglu'). innerhtml = "online" ؛ document.getElementById ('username'). innerhtml = "xiao ming" ؛ } ؛} وظيفة sendmsg () {var fromName = "Xiao Ming" ؛ var toname = document.getElementById ('name'). value ؛ // أرسل إلى Who var content = document.getElementById ('writemsg'). value ؛ // إرسال محتوى ws.send (من name+"،"+toname+"،"+content) ؛} </script> </head> <body onload = "startwebsocket () ؛"> <p> تطبيق وظيفة الدردشة </p> تسجيل الدخول إلى حالة تسجيل الدخول id = "username"> </span> <br> <br> <br> إرسال إلى: <input type = "text" id = "name" value = "mailudize"> </input type = "button" value = "send" onClick = "sendmsg ()"> </pection> </body> </html>ما ورد أعلاه هو المعرفة ذات الصلة حول استخدام Javaweb WebSocket لتنفيذ رمز مثال وظيفة الدردشة من نظير إلى نظير إلى نظير. آمل أن يكون ذلك مفيدًا للجميع. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر على الجميع في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!