JFinal整合WebSocket
说明以tomcat容器为例,tomcat7以上版本开始支持websocket,JFinal集成的jetty服务器不支持websocket
一、包依赖,tomcat7或是javaee包都行,两者二选一,容器中已提供所以只作为提供者
org.apache.tomcat
tomcat-websocket-api
7.0.47
provided
javax
javaee-api
7.0
provided
二、JFinal的配置,需要一个Handler拦截websocket请求,WebSocketHandler实现如下
package com.nmtx.manager.handler; import java.util.regex.Pattern; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.jfinal.handler.Handler; import com.jfinal.kit.StrKit; public class WebSocketHandler extends Handler{ private Pattern filterUrlRegxPattern; public WebSocketHandler(String filterUrlRegx) { if (StrKit.isBlank(filterUrlRegx)) throw new IllegalArgumentException("The para filterUrlRegx can not be blank."); filterUrlRegxPattern = Pattern.compile(filterUrlRegx); } @Override public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) { if (filterUrlRegxPattern.matcher(target).find()) return ; else next.handle(target, request, response, isHandled); } }
JFinalConfig中配置
/** * 接收处理跳转 */ @Override public void configHandler(Handlers me) { me.add(new WebSocketHandler("^/websocket")); }
配置WebSocket处理类
package com.nmtx.manager.controller.websocket; import java.io.IOException; import javax.websocket.OnClose; import javax.websocket.OnMessage; import javax.websocket.OnOpen; import javax.websocket.Session; import javax.websocket.server.ServerEndpoint; import com.jfinal.kit.JsonKit; import com.jfinal.plugin.redis.Redis; import com.nmtx.common.ErrorCode; import com.nmtx.common.MessageResp; import com.nmtx.manager.common.base.LoggerManager; import com.nmtx.manager.model.message.Message; import com.nmtx.manager.model.permission.User; import com.nmtx.manager.utils.WebSocketSessionUtils; import com.nmtx.plugins.auth.AuthUser; import com.nmtx.utils.ModelUtils; @ServerEndpoint("/websocket") public class WebSocketController { @OnOpen public void onOpen(Session session) { } @OnClose public void onClose(Session session) { } @OnMessage public void onMessage(String requestJson, Session session) { session.getBasicRemote().sendText(requestJson); } }
三,html5端请求
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <!-- for HTML5 --> <title>Java后端WebSocket的Tomcat实现</title> </head> <body> Welcome<br/><input id="text" type="text"/> <button onclick="send()">发送消息</button> <hr/> <button onclick="closeWebSocket()">关闭WebSocket连接</button> <hr/> <div id="message"></div> </body> <script type="text/javascript"> var websocket = null; //判断当前浏览器是否支持WebSocket if ('WebSocket' in window) { websocket = new WebSocket("ws://localhost:8080/websocket"); } else { alert('当前浏览器 Not support websocket') } //连接发生错误的回调方法 websocket.onerror = function () { setMessageInnerHTML("WebSocket连接发生错误"); }; //连接成功建立的回调方法 websocket.onopen = function () { setMessageInnerHTML("WebSocket连接成功"); } //接收到消息的回调方法 websocket.onmessage = function (event) { setMessageInnerHTML(event.data); } //连接关闭的回调方法 websocket.onclose = function () { setMessageInnerHTML("WebSocket连接关闭"); } //监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。 window.onbeforeunload = function () { closeWebSocket(); } //将消息显示在网页上 function setMessageInnerHTML(innerHTML) { document.getElementById('message').innerHTML += innerHTML + '<br/>'; } //关闭WebSocket连接 function closeWebSocket() { websocket.close(); } //发送消息 function send() { var message = document.getElementById('text').value; websocket.send(message); } </script> </html>
打包搞定

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
JFinal 表自动绑定插件实现,实现零配置,支持多数据源
以mysql数据库实现为例,其它的db也可基于这种方式自己实现 大概的思路是这样的,为了简少配置,所以不使用注解的方式 首先需要一个工具类来拿到所有的Model类大体的实现方式如下 package com.nmtx.utils; import java.io.File; import java.util.ArrayList; import java.util.List; import com.jfinal.kit.PathKit; import com.jfinal.kit.StrKit; public class ClassUtils { public static String classRootPath = null; public static List<Class<?>> scanPackage(String packageName) throws ClassNotFoundException { List<Class<?>> classList = new ArrayList<Class<?>>(); ...
- 下一篇
树莓派和arduino蓝牙通信
树莓派和arduino蓝牙通信 树莓派上使用pybluez蓝牙模块 树莓派上使用蓝牙通信模块来进行通信 pybluez的安装使用pip工具安装,python2 使用 sudo pip install pybluez 进行安装,python版本使用 sudo pip3 install pybluez 安装 然后进入python import bluetooth 测试是否装好没有报错说明安装成功2.pybluez 使用简要说明简单的的客户端代码 import bluetooth bd_addr = "01:23:45:67:89:AB" #arduino连接的蓝牙模块的地址 port = 1 sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM ) sock.connect((bd_addr, port)) #创建连接 sock.send("1") #发送数据 sock.close() #关闭连接 arduino 上蓝牙模块使用 Arduino HC05 接线VCC:接Arduino的5V。 GND:接Arduino的GND。TXD:发送端,一般...
相关文章
文章评论
共有0条评论来说两句吧...