Pertama -tama, saya ingin menyatakan kepada Anda: JDK 7 diperlukan, Tomcat perlu mendukung versi WebSocket
1.InitServlet
Kelas ini terutama digunakan untuk menginisialisasi repositori peta yang membangun penyimpanan informasi identitas pengguna di masa depan, menggunakan metode inisialisasi inisialisasi untuk menginisialisasi repositori, dan menggunakan metode statis getSocketList untuk mendapatkan informasi identitas pengguna yang sesuai.
WebSocket, saya pikir MessageInbound digunakan untuk mengidentifikasi informasi login, menggunakannya untuk menemukan orang yang sesuai dan pesan push. Setiap login akan menghasilkan pesan yang dibuang.
Di sini hashmap <string, messageInbound>: String menyimpan ID login dari sesi pengguna, dan pesan Anda menyimpan informasi identitas yang diperlukan untuk mendorong. Di atas adalah pemahaman lisan pribadi.
Soket paket; impor java.nio.charbuffer; impor java.util.arraylist; impor java.util.hashmap; impor java.util.list; impor javax.servlet.servletconfig; impor javax.servlet.servletException; impor javax.servlet.http.httpservlet; impor org.apache.catalina.websocket.messageInbound; InitServlet kelas publik memperluas httpservlet {private static final long serialversionuid = -l; // Daftar statis pribadi <SpesanInbound> SocketList; private static hashmap <string, messageInbound> socketlist; public void init (servletConfig config) melempar servletException {// initservlet.socketlist = new ArrayList <sageInbound> (); Initservlet.socketlist = hashmap baru <string, messageInbound> (); super.init (config); System.out.println ("Server Start ============"); } public static hashMap <string, messageInbound> getSocketList () {return initservlet.socketlist; } /* Daftar statis public <pesageInbound> getSocketList () {return initservlet.socketlist; } */} 2.websocketservlet
Websocket digunakan untuk membuat servlet koneksi. Saat membuat koneksi, pertama -tama dapatkan UserID dari Sesi Login di, dan berikan UserID saat memanggil MyMessageInbound Constructor.
Soket paket; impor java.io.ioException; impor java.io.printwriter; impor java.nio.charbuffer; impor javax.servlet.servletException; impor javax.servlet.http.httpservlet; impor javax.servlet.http.httpservletRequest; impor javax.servlet.http.httpservletResponse; impor org.apache.catalina.websocket.streaminBound; impor org.apache.catalina.websocket.websocketservlet; / ** * * @className: myWebSocketServlet * @description: dibuat saat membuat koneksi * @author mangues * @date - */ kelas publik mywebsocketservlet memperluas websocketservlet {public string getuser (httpservletRequest). if (username == null) {return null; } mengembalikan nama pengguna; // return (string) request.getAttribute ("user"); } @Override dilindungi streamInbound creathewebsocketinbound (string arg, httpservletRequest request) {System.out.println ("#############"); kembalikan myMessageInbound baru (this.getUser (permintaan)); }} 3. Metode OnOpen memanggil repositori identitas peta dari InitServlet.
Letakkan pengguna pengguna dan informasi identitas WebSocket yang sesuai dengan pesan pengguna yang masuk (userid dapat digunakan untuk menemukan identitas yang diperlukan untuk mendorong pesan Anda)
OnTextMessage: Digunakan untuk mendapatkan pesan dan mengirim pesan
Soket paket; impor java.io.ioException; impor java.nio.bytebuffer; impor java.nio.charbuffer; impor java.util.hashmap; impor org.apache.catalina.websocket.messageInbound; impor org.apache.catalina.websocket.wsoutbound; impor util.messageutil; kelas publik mymessageInbound memperluas pesan {name string privat; public myMessageInbound () {super (); } public myMessageInbound (nama string) {super (); this.name = name; } @Override protected void onBinaryMessage(ByteBuffer arg) throws IOException { // TODO Auto-generated method stub } @Override protected void onTextMessage(CharBuffer msg) throws IOException { // map after the message sent by the user HashMap<String,String> messageMap = MessageUtil.getMessage(msg); // Memproses Pesan Kelas // Upline Kelas Koleksi Pengguna Peta HashMap <String, MessageInbound> usermsgmap = initservlet.getSocketList (); String fromname = messageMap.get ("fromname"); // pesan berasal dari string userid toname = messageMap.get ("toname"); // Pesan dikirimkan ke pengguna pengguna // dapatkan userMessageInbound messageInbound = usermsgmap.get (toname); // MessageInbound yang dikirim ke pengguna di gudang jika (messageInbound! = Null) {// Jika pesan ada untuk pengguna, lakukan operasi wsoutbound outbound = messageInbound.getWsoutBound (); Content String = MessageMap.get ("Content"); // Dapatkan konten pesan string msgcontentString = fromname + "" + konten; // Bangun pesan yang dikirim // kirimkan konten charbuffer tomsg = charbuffer.wrap (msgcontentString.tochararray ()); Outbound.WriteTextMessage (TOMSG); // outbound.flush (); } /* for (MessageInbound MessageInbound: initServlet.getSocketList ()) {charbuffer buffer = charbuffer.wrap (msg); Wsoutbound outbound = messageInbound.getWsoutbound (); outbound.writetextMessage (buffer); outbound.flush (); } */} @Override Protected void Onclose (status int) {initservlet.getSocketList (). Ramping (ini); super.onclose (status); } @Override Protected void onopen (wsoutbound outbound) {super.onopen (outbound); // masuk if (name! = Null) {initservlet.getsocketlist (). Put (name, this); } // initservlet.getSocketList (). Tambah (ini); }} 4. Kelas pemrosesan pesan, memproses pesan yang dikirim oleh front-end
paket util; impor java.nio.charbuffer; impor java.util.hashmap; / ** * * @className: Messageutil * @Description: Pesan Kelas Pemrosesan * @Author Mangues * @Date - */ Public Class Messageutil {public static hashMap <String, String> getMessage (charbuffer msg) {hashMap <string, string> peta = new hashmap <string> (); String m [] = msgString.split (","); peta.put ("fromname", m []); peta.put ("toname", m []); peta.put ("konten", m []); peta mengembalikan; }} 5. Konfigurasi Web
<? Xml Version = "1.0" encoding = "UTF-8"?> <Web-app Versi = "3.0" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns: xsi = "http:/www.w3.org/org/2001 =" http:/www.w3.org/org/p21 XSI: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <servlet> <servlet-name> myweBsocket <//xsd "> <servlet> <servlet-name> myweBsocket <//xsd <servlet-class> socket.mywebsocketservlet </servlet-class> </servlet> <servlet-mapping> <servlet-name> mywebsocket </servlet-name> <rerst-pola>*. do </rerl-pola> </servlet-papping> <servlet> <servlet-name> initservlet </servlet> <Boad-on-startup> 1 </boad-in-startup> </servlet> <creendak-file-file> <creendak-filse> index.jsp </celcome-file> </celcome-file-list> </web-app>
6. Front-end, untuk kenyamanan, saya langsung menggunakan dua JSP, dan menggunakan <%session.setAttribute ("user", "xiao ming")%> untuk menunjukkan login.
Tidak ada perbedaan penting antara dua JSP, itu hanya digunakan untuk menunjukkan bahwa dua orang yang berbeda masuk. Anda dapat membuka JSP yang berbeda di browser yang sama untuk mengobrol.
A. Minimalkan
<%@ page language="java" contentType="text/html; charset=UTF-" pageEncoding="UTF-"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-"> <title>Index</title> <script type="text/javascript" src = "js/jQuery ... min.js"> </script> <%session.setAttribute ("user", "minimalkan");%> <script type = "text/javascript"> var ws = null; fungsi startWebsocket () {if ('WebSocket' di jendela) ws = WebSocket baru ("ws: // localhost: /websocket/mywebsocket.do"); lain jika ('mozwebsocket' di jendela) ws = mozwebsocket baru ("ws: // localhost: /websocket/mywebsocket.do"); Lainnya peringatan ("tidak mendukung"); ws.onmessage = function (evt) {//alert(evt.data); Console.log (EVT); $ ("#xiaoxi"). Val (evt.data); }; ws.onclose = function (evt) {// alert ("tutup"); document.geteLementById ('Denglu'). innerHtml = "offline"; }; ws.onopen = function (evt) {// alert ("open"); document.geteLementById ('Denglu'). innerHtml = "online"; document.getElementById ('username'). innerHtml = 'minimalkan'; }; } function sendmsg () {var fromname = "minimalkan"; var toname = document.geteLementById ('name'). value; // Kirim kepada siapa var content = document.getElementById ('writemsg'). Nilai; // Kirim konten ws.send (fromname+","+toname+","+konten); } </script> </head> <body onload = "startwebsocket ();"> <p> Implementasi fungsi obrolan </p> status login: <span id = "denglu" style = "color: red;"> login </span> <br> orang login: <span id = "username"> </span> <br> <br> <br> tipe: who to uSername "> </span> <br> <br> <br> <br> tipe: who to uSername" </span> <br> <br> <br> <br> <br> TEPPACE: WHO INTET: "WHO INTET" </span> <br> <br> <br> TEPPET: WHO INTET: USERNAME "> </span> <br> <br> <br> value = "xiao ming"> </input> <br> Kirim konten: <input type = "text" id = "writemsg"> </input> <br> kotak obrolan: <textarea baris = "" cols = "" readonly id = "xiaoxi"> </textarea> <br> <input type "value" nilai = " </html> B. Xiao Ming
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Index</title><script type="text/javascript" src="js/jquery 2.1.1.min.js"></script><%session.setAttribute("user", "Xiao Ming");%><script type="text/javascript">var ws = null;function startWebSocket() { if ('WebSocket' in window) ws = new WebSocket ("WS: // LocalHost: 8080/WebSocket/mywebsocket.do"); lain jika ('mozwebsocket' di jendela) ws = mozwebsocket baru ("ws: // localhost: 8080/websocket/mywebsocket.do"); Lainnya peringatan ("tidak mendukung"); ws.onmessage = function (evt) {console.log (evt); //alert(evt.data); $ ("#xiaoxi"). Val (evt.data); }; ws.onclose = function (evt) {// alert ("tutup"); document.geteLementById ('Denglu'). innerHtml = "offline"; }; ws.onopen = function (evt) {// alert ("open"); document.geteLementById ('Denglu'). innerHtml = "online"; document.geteLementById ('username'). innerHtml = "xiao ming"; };} function sendmsg () {var fromname = "xiao ming"; var toname = document.geteLementById ('name'). value; // Kirim kepada siapa var content = document.getElementById ('writemsg'). Nilai; // Kirim konten wsend (fromname+","+toname+","+content);} </script> </head> <body onload = "startwebsocket ();"> <p> Implementasi fungsi obrol id = "userName"> </span> <br> <br> <br> Kirim ke: <input type = "text" id = "name" value = "Minimalkan"> </input> <br> Kirim konten: <input type = "text" id = "writemsg"> </input> <br> kotak obrol id = "xiaoxi"> </textarea> <br> <input type = "tombol" value = "kirim" ontClick = "sendmsg ()"> </input> </body> </html>Di atas adalah pengetahuan yang relevan tentang penggunaan Javaweb Websocket untuk menerapkan kode contoh fungsi obrolan peer-to-peer sederhana. Saya harap ini akan membantu semua orang. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas semua orang tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!