Tomcat中实现websocket和browser端访问
生活随笔
收集整理的這篇文章主要介紹了
Tomcat中实现websocket和browser端访问
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Tomcat中實(shí)現(xiàn)websocket和browser端訪問
簡(jiǎn)介:
在tomcat 7.0.27版本后,實(shí)現(xiàn)了對(duì)websocket的支持。在最新的tomcat7.0.72后,websocket的開發(fā)變動(dòng)更簡(jiǎn)單了 在tomcat中,websocket的支持有2個(gè)jar包提供:websocket-api.jar和tomcat-websocket.jar。開發(fā)
實(shí)現(xiàn)websocket處理的類,可以繼承javax.websocket.Endpoint;也可以使用注解來進(jìn)行websocket服務(wù)的開發(fā),這樣更簡(jiǎn)單。簡(jiǎn)單一個(gè)chat的示例: package com.wssample;import java.io.IOException; import java.util.*;import javax.websocket.*; import javax.websocket.server.ServerEndpoint;@ServerEndpoint(value = "/chatendpoint") public class ChatEndpoint {//static final Logger logger = Logger.getLogger(ChatEndpoint.class);static Map<String,Session> sessionMap = new Hashtable<String,Session>();@OnOpenpublic void start(Session session){System.out.println("Guest"+session.getId()+" join");sessionMap.put(session.getId(), session);broadcast("Guest" + session.getId() + " join.");}@OnMessagepublic void process(Session session, String message){System.out.println(session.getId()+" say: " + message);broadcast("Guest"+session.getId()+" [say]: "+message);}@OnClosepublic void end(Session session){System.out.println("Guest"+session.getId()+" out.");sessionMap.remove(session.getId());broadcast("Guest"+session.getId()+ " out.");}@OnErrorpublic void error(Session session, java.lang.Throwable throwable){System.err.println("Guest" + session.getId() + " error: " + throwable);end(session);}void broadcast(String message){RemoteEndpoint.Basic remote = null;Set<Map.Entry<String,Session>> set = sessionMap.entrySet();for(Map.Entry<String,Session> i: set){remote = i.getValue().getBasicRemote();try {remote.sendText(message);} catch (IOException e) {e.printStackTrace();}}} }服務(wù)端開發(fā),使用注解@ServerEndpoint,標(biāo)示一個(gè)websocket服務(wù)端。注解參數(shù)value可以指定訪問的路徑。
在實(shí)現(xiàn)類中,使用注解@OnOpen,@OnClose, @OnMessage,@OnError來標(biāo)示websocket生命周期的4個(gè)處理。
瀏覽器端
在瀏覽器端,使用js訪問websocket訪問,進(jìn)行交互。
<!DOCTYPE html> <html> <head><title>chatendpoint.html</title><script language="JavaScript">var wsuri = "ws://localhost:8080/WebSocket/chatendpoint";var ws = null;function connectEndpoint(){window.WebSocket = window.WebSocket || window.MozWebSocket;if (!window.WebSocket){alert("WebSocket not supported by this browser");return;}ws = new WebSocket(wsuri);ws.onmessage = function(evt) {//alert(evt.data);var old = document.getElementById("echo").value;document.getElementById("echo").value = old+evt.data+"\r\n";};ws.onclose = function(evt) {//alert("close");document.getElementById("echo").value = "server disconnect.\r\n";};ws.onopen = function(evt) {//alert("open");document.getElementById("echo").value = "connect server.\r\n";};}function sendmsg(){ws.send(document.getElementById("send").value);}</script> </head> <body onload="connectEndpoint()"> <input type="text" size="20" value="hi~" id="send"> <input type="button" value="send" onclick="sendmsg()"> <br> <textarea id="echo" rows="50" cols="50"> </textarea> </body> </html> 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的Tomcat中实现websocket和browser端访问的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JAVA Web Servlet中的异步
- 下一篇: 互联网产品的灰度发布