บทความนี้แชร์รหัสเฉพาะของ 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.serverpoint 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/แชท") คลาสสาธารณะ chatannotation สตริงสุดท้ายคงที่ส่วนตัว guest_prefix = "แขก"; private static final atomicinteger connectionIds = new Atomicinteger (0); แผนที่สุดท้ายคงที่ <String, Object> Connections = new HashMap <String, Object> (); ชื่อเล่นสตริงสุดท้ายส่วนตัว; เซสชั่นส่วนตัว; public chatannotation () {nickname = guest_prefix + connectionids.getandincrement (); } @Onopen Public Void Start (เซสชันเซสชัน) {this.session = เซสชัน; connections.put (ชื่อเล่นนี้); String message = string.format ("* %s %s", ชื่อเล่น, "ได้เข้าร่วม"); ออกอากาศ (ข้อความ); } @onclose โมฆะสาธารณะสิ้นสุด () {connections.remove (นี่); String message = string.format ("* %s %s", ชื่อเล่น, "ตัดการเชื่อมต่อ"); ออกอากาศ (ข้อความ); } / *** ข้อความการส่งข้อความทริกเกอร์* @param message* / @onmessage โมฆะสาธารณะเข้า (ข้อความสตริง) {// ไม่น่าเชื่อถือสตริงไคลเอนต์กรองเมสเทจ = string.format (" %s: %s", ชื่อเล่น, htmlfilter.filter (ข้อความ ออกอากาศ (FilteredMessage); } @Onerror โมฆะสาธารณะ onerror (throwable t) โยนได้ {log.error ("ข้อผิดพลาดในการแชท:" + t.toString (), t); } / *** วิธีการส่งข้อความ* @param msg* / การออกอากาศโมฆะคงที่ส่วนตัว (สตริงผงชูรส) {ถ้า (msg.indexof ("guest0")! =-1) {senduser (msg); } else {sendall (msg); }} / *** ส่งไปยังผู้ใช้ทั้งหมด* @param msg* / โมฆะคงที่สาธารณะ sendall (สตริงผงชูรส) {สำหรับ (คีย์สตริง: connections.keyset ()) {chatannotation client = null; ลอง {client = (chatannotation) การเชื่อมต่อ get (คีย์); ซิงโครไนซ์ (ไคลเอนต์) {client.session.getBasicRemote (). sendtext (msg); }} catch (ioexception e) {log.debug ("ข้อผิดพลาดในการแชท: ไม่สามารถส่งข้อความไปยังไคลเอนต์", e); connections.remove (ไคลเอนต์); ลอง {client.session.close (); } catch (ioexception e1) {// isglaust} string message = string.format ("* %s %s", client.nickname, "ถูกตัดการเชื่อมต่อ"); ออกอากาศ (ข้อความ); }}} / *** ส่งข้อความไปยังผู้ใช้ที่ระบุ* @param msg* / โมฆะคงที่สาธารณะ senduser (สตริง msg) {chatannotation c = (chatannotation) การเชื่อมต่อ get ("guest0"); ลอง {C.Session.getBasicRemote (). SendText (MSG); } catch (ioexception e) {log.debug ("ข้อผิดพลาดในการแชท: ไม่สามารถส่งข้อความไปยังไคลเอนต์", e); การเชื่อมต่อ remove (c); ลอง {c.session.close (); } catch (ioexception e1) {// istignore} ข้อความสตริง = string.format ("* %s %s", c.nickname, "ถูกตัดการเชื่อมต่อ"); ออกอากาศ (ข้อความ); -คลาสเครื่องมือ htmlfilter:
/*** คลาสเครื่องมือ html** @author hu hansan*/คลาสสุดท้ายของคลาสสุดท้าย htmlfilter {ตัวกรองสตริงคงที่สาธารณะ (ข้อความสตริง) {ถ้า (ข้อความ == null) return (null); เนื้อหาถ่าน [] = ถ่านใหม่ [message.length ()]; message.getChars (0, message.length (), เนื้อหา, 0); StringBuilder result = new StringBuilder (content.length + 50); สำหรับ (int i = 0; i <content.length; i ++) {switch (เนื้อหา [i]) {case '<': result.append ("<"); หยุดพัก; กรณี '>': result.append (">"); หยุดพัก; กรณี '&': 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 ()+": //"+"getServerName ()+": " การเข้ารหัส = "utf-8"?> <html xmlns = "http://www.w3.org/1999/xhtml" xml: lang = "en"> <head> <title> test </title> } #console {Border: 1px Solid #CCCCCC; สีสัน-ขวาสี: #99999; สีสันจากขอบล่าง: #99999; ความสูง: 170px; Overflow-y: Scroll; ช่องว่าง: 5px; ความกว้าง: 100%; } #console p {padding: 0; มาร์จิ้น: 0; } </style> <script type = "text/javascript"> var chat = {}; chat.socket = null; chat.connect = (ฟังก์ชั่น (โฮสต์) {if ('websocket' ในหน้าต่าง) {chat.socket = ใหม่ websocket (โฮสต์);} อื่นถ้า ('mozwebsocket' ในหน้าต่าง) {chat.socket = new Mozwebsocket (โฮสต์); ฟังก์ชั่น () {console.log ('ข้อมูล: การเชื่อมต่อ WebSocket'); console.log ('ข้อมูล: WebSocket ปิด'); chat.initialize = function () {if (window.location.protocol == 'http:') {chat.connect ('ws: //' + window.location.host + '/socket2/websocket/แชท'); } else {chat.connect ('wss: //' + window.location.host + '/socket2/websocket/chat'); - chat.sendMessage = (function () {var message = document.getElementById ('แชท') ค่า; ถ้า (ข้อความ! = '') {chat.socket.send (ข้อความ); document.getElementById ('แชท'). value = '';}}); var console = {}; console.log = (ฟังก์ชั่น (ข้อความ) {var console = document.getElementById ('console'); var p = document.createElement ('p'); p.style.wordWrap = 'break-word'; p.innerhtml = ข้อความ; console.appendchild (p); console.removechild (Console.firstchild); chat.initialize (); document.addeventListener ("domcontentloaded", function () {// ลบองค์ประกอบด้วยคลาส "noscript" - <noscript> ไม่ได้รับอนุญาตใน xhtml var noscripts = document.getElementsByClassName ("noscript"); สำหรับ (var i = 0; noscripts [i] .parentNode.removeChild (noscripts [i]); </script> </head> <body> <div> <h2 style = "color: #ff0000"> ดูเหมือนว่าเบราว์เซอร์ของคุณไม่รองรับ JavaScript! WebSockets พึ่งพา JavaScript ที่เปิดใช้งาน โปรดเปิดใช้งาน JavaScript และโหลดหน้านี้ใหม่! </h2> </div> <div> <p> <input type = "text" placeholder = "โปรดป้อนเนื้อหา" id = "แชท"/> </p> <div id = "console-container"> <div id = "คอนโซล"/> คุณสามารถระบุเพื่อส่งไปยังผู้ใช้บางรายหรือคุณสามารถส่งได้ทั้งหมด สำหรับรายละเอียดดูวิธีการออกอากาศของคลาส chatannotation
เมื่อเผยแพร่โปรแกรมอย่าลืมลบแพ็คเกจสามขวด: tomcat-coyote.jar, tomcat-juli.jar และ websocket-api.jar และเริ่ม Tomcat
ภาพหน้าจอของโปรแกรมผู้ใช้ GUST0 ส่งข้อมูลและทำการตัดสินในพื้นหลังและส่งไปยังตัวเองเท่านั้น:
แขก 1:
แขก 2:
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น