JFinal结合webSocket

千问 在 JFinal 框架下,结合 Tomcat 8 使用 HTML5 WebSocket 对吧?这其实是个很经典的组合——JFinal 轻量高效 这其实是个很经典的组合——JFinal 轻量高效,Tomcat 8 原生支持 WebSocket,搭配起来做实时功能(比如聊天、通知、数据推送)特别爽!如果你用的是 JFinal Undertow 内嵌服务器(不是 Tomcat),那需要额外配置(参考你提供的资料 [4])。但既然你明确说 Tomcat 8,就按上面方式走,最简单!路径带参数(如 /websocket/{userId}) JFinal 和 WebSocket 路径冲突 路径避免用 .ws 后缀,或确保正则匹配正确。 阅读详情

  配置

 me.add(new UrlSkipHandler("^/websocketTest", false));

 

 Java代码

 

package com.eq.controller.data.shop.message;

import java.io.IOException;
import java.util.concurrent.Callable;
import java.util.concurrent.CopyOnWriteArraySet;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;

import javax.servlet.http.HttpServletResponse;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;

import org.apache.log4j.Logger;

import com.alibaba.fastjson.JSONObject;
import com.eq.common.BaseConstants;
import com.eq.common.WebController;
import com.eq.model.user.User;
import com.eq.service.message.WebMessageService;
import com.jfinal.aop.Duang;
import com.jfinal.plugin.activerecord.Record;
import com.jfinal.plugin.redis.Cache;
import com.jfinal.plugin.redis.Redis;
import com.test.WebSocketTest;

@ServerEndpoint("/websocketTest")
public class WebShopMessageController extends WebController {
	// 与某个客户端的连接会话,需要通过它来给客户端发送数据
	private Session session;
	/**
	 * 连接建立成功调用的方法
	 * 
	 * @param session
	 *            可选的参数。session为与某个客户端的连接会话,需要通过它来给客户端发送数据
	 */
	@OnOpen
	public void onOpen(Session session) {
		this.session = session;
		while(session != null){
			try {
				FutureTask<Integer> futrure = new FutureTask<Integer>(new DisposeMessage(session));
				new Thread(futrure).start();
				 futrure.get();
				Thread.sleep(3000);
			} catch (InterruptedException e) {
				session = null;
				e.printStackTrace();
			} catch (ExecutionException e) {
				session = null;
				e.printStackTrace();
			}
		}
	}

	/**
	 * 连接关闭调用的方法
	 */
	@OnClose
	public void onClose() {
		session = null; // 从set中删除
	}

	/**
	 * 收到客户端消息后调用的方法
	 * 
	 * @param message
	 *            客户端发送过来的消息
	 * @param session
	 *            可选的参数
	 */
	@OnMessage
	public void onMessage(String message, Session session) {
		
	}

	/**
	 * 发生错误时调用
	 * 
	 * @param session
	 * @param error
	 */
	@OnError
	public void onError(Session session, Throwable error) {
		session = null;
		error.printStackTrace();
	}

	
	/**
	 * 这个方法与上面几个方法不一样。没有用注解,是根据自己需要添加的方法。
	 * 
	 * @param message
	 * @throws IOException
	 */
	public void sendMessage(String message) throws IOException {

	}
}

class DisposeMessage implements Callable<Integer> {

	private Session session = null;

	public DisposeMessage(Session session) {
		this.session = session;
	}

	@Override
	public Integer call() throws Exception {
		Cache efunCache = Redis.use(BaseConstants.Redis.CACHE_EFUN_DATA);
		this.session.getBasicRemote().sendText("新消息啊");
		return 1;
	}

}

 

 

 

 

页面

 

      Welcome<br/><input id="text" type="text"/>
    <button   id="sendMessage">发送消息</button>
    <hr/>
    <button  id="closeWebSocket">关闭WebSocket连接</button>
    <div id="message"></div>

 

/**
 * 会员头部页面 
 */
$(function() {
	
	$("#sendMessage").click(function(){
		send();
	})
	
	$("#closeWebSocket").click(function(){
		closeWebSocket();
	})
	 var websocket = null;
	    //判断当前浏览器是否支持WebSocket
	    if ('WebSocket' in window) {
	        websocket = new WebSocket("ws://localhost:8090/eq-web/websocketTest");
	    }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(data) {
	        $("#message").html($("#message").html()+data+"<br/>");
	    }

	    //关闭WebSocket连接
	    function closeWebSocket() {
	        websocket.close();
	    }

	    //发送消息
	    function send() {
	        var message = $("#text").val();
	        websocket.send(message);
	    }
});

 

 

 

 

 

JFinal整合WebSocket做服务器向浏览器推送通知 记录一下使用jdk1.6版本采用JFinal整合WebSocket做消息推送 JFinal版本3.3 <dependency> <groupId>com.jfinal</groupId> <artifactId>jfinal</artifactId> <version>3.3</version> </dependency> AppConfig中 @Override public void c 阅读详情

相关推荐

DeepSeek Jfinal 拦截了 webSocket

LogKit.info("WebSocket 连接建立: " + clientId + ", 当前在线: " + getOnlineCount());LogKit.info("WebSocket 连接关闭: " + clientId + ", 当前在线: " + getOnlineCount());session.getBasicRemote().sendText("收到: " + message);System.out.println("WebSocket 版本: " + wsVersion);

m0_37843156的博客 412

JFinal整合WebSocket开发

引用:https://my.oschina.net/u/136848/blog/781896 摘要: HTML5 WebSocket实现了服务器与浏览器的双向通讯,双向通讯使服务器消息推送开发更加简单,最常见的就是即时通讯和对信息实时性要求比较高的应用。以前的服务器消息推送大部分采用的都是“轮询”和“长连接”技术,这两中技术都会对服务器产生相当大的开销,而且实时性不是特别高。WebSocket技

coates 6224

JFinal整合WebSocket开发https://jfinal.com/share/139

HTML5 WebSocket实现了服务器与浏览器的双向通讯,双向通讯使服务器消息推送开发更加简单,最常见的就是即时通讯和对信息实时性要求比较高的应用。以前的服务器消息推送大部分采用的都是“轮询”和“长连接”技术,这两中技术都会对服务器产生相当大的开销,而且实时性不是特别高。WebSocket技术对只会产生很小的开销,并且实时性特别高文章源地址:https://my.oschina.net/u/136848/blog/781896。

m0_37843156的博客 627

jfinal框架websocket模拟发消息给多个设备

WebSocket简介 WebSocket是一种在单个TCP连接上进行全双工通信的协议。 WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。 场景 用html文件模拟设备在线状态,通过websocket协议实现消息推送 直接上代...

龙小胖的博客 748

Altium Designer操作技巧(1)——原理图中如何批量替换元器件?

《AltiumDesigner批量替换元器件技巧分享》摘要:本文介绍了两种在AltiumDesigner中批量替换元器件的实用方法。方法一通过“查找相似对象”功能,可精准匹配并批量修改器件参数;方法二利用ActiveBOM功能,在BOM表中直观操作器件替换,推荐使用第二种方法可使BOM管理更高效。这些技巧能有效减少物料种类、降低贴装成本,特别适用于电阻电容等常用器件的批量替换。关注公众号获取更多电子设计技巧。

u012526819的博客 2578

别再纠结了!车规MCU选M7还是R52?一张图看懂你的车身控制器/域控制器该用谁

本文深入探讨车规MCU选型中Cortex-M7与Cortex-R52的核心差异,提供基于安全等级与实时性需求的选型决策图。通过对比ASIL认证、实时性能及成本效益,帮助工程师在车身控制器/域控制器设计中做出精准选择,避免潜在风险与隐性成本。

weixin_42628688的博客 397

jFinal下WebSocket的使用

1.引入jar包 maven方式 <!-- https://mvnrepository.com/artifact/io.undertow/undertow-websockets-jsr --> <dependency> <groupId>io.undertow</groupId> <artifactId>undertow-websockets-jsr</artifactId> <version>2.

NignSah的博客 2035

OCR模型轻量化新思路:用ONNX Runtime加速PP-OCRv4推理(附性能对比测试)

本文详细介绍了如何利用ONNX Runtime对PP-OCRv4模型进行轻量化部署与推理加速。通过模型导出优化、动态量化、线程绑定及内存复用等技巧,在树莓派、RK3588等边缘设备上实现了超过50%的性能提升,并显著降低了内存占用,为移动端OCR部署提供了完整的优化方案和实测数据对比。

weixin_29063979的博客 496

jfinal配置websocket

引用网上的一个例子,更详细的介绍,避免一些坑//将参考文献中JFinalConfig中配置 me.add(new WebSocketHandler("^/websocket")); //修改成如下(UrlSkipHandler是JFinal默认提供的) me.add(new UrlSkipHandler("^/websocket", false));,这些都是引用:出自:https://blog....

leo 2277

链路监控pinpoint3.0.3安装部署(2)

本文详细介绍了Pinpoint 3.0.3分布式链路监控系统的安装部署过程。主要内容包括:1)数据库安装(HBase、MySQL、Redis、Pinot)的详细配置步骤;2)中间件Zookeeper和Kafka的安装;3)Pinpoint三大组件的部署:Collector、Web和Batch的配置文件修改和启动脚本。文章特别强调了使用-starter-exec.jar包的重要性,并提供了各组件所需的详细参数配置,包括数据库连接、Zookeeper地址、Kafka配置等关键信息。

zouzou_888的博客 1369

基于Simulink的压缩空气储能(Compressed Air Energy Storage, CAES)

压缩空气储能(CAES)是一种将电能转化为压缩空气存储在高压容器中,然后在需要时释放空气驱动涡轮机发电的技术。它具有大规模、长寿命和环境友好的特点,在电力系统中用于削峰填谷、频率调节和备用电源等应用。本项目将详细介绍如何在MATLAB/Simulink中搭建一个完整的基于压缩空气储能的系统,并提供具体的代码实现和设计步骤。如果你需要实现更复杂的控制逻辑,可以使用MATLAB Function模块。以下是一个简单的例子,展示了如何在该模块中实现一个条件逻辑:Matlab深色版本Kp = 1;

MHD0815的博客 1274

JFinal 框架websocket配置

说明以tomcat容器为例,tomcat7以上版本开始支持websocket,JFinal集成的jetty服务器不支持websocket 一、包依赖,tomcat7或是javaee包都行,两者二选一,容器中已提供所以只作为提供者 <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-websocket-api</artifactId> <version&

qq_38787653的博客 617

【数据集介绍】MVTec 3D AD数据集介绍

MVTec AD(MVTec Anomaly Detection)数据集是用于异常检测的计算机视觉数据集。该数据集包含来自工业生产中不同材料和产品的图像,包括玻璃、塑料、纺织品等。每个类别都包含正常样本和异常样本。这些异常样本包括各种常见的生产缺陷,如划痕、裂纹、凹陷等。MVTec AD数据集旨在帮助研究人员和从业者开发和评估用于检测工业制造中物体缺陷的算法和系统。

原来也有北瓜 7748

jFinal整合webocket

前言 踩过的坑: Jfinal自带的服务器是jetty版本低是不支持websocket的 Tomcat8.5以上才支持websocket的 导入jar包tomcat-websocket-api-7.0.47.jar 1.pom形式 <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-websocket-a

q_1092535160的博客 1039

融合Retinex理论与Transformer的YOLOv8低光照目标检测增强方法【YOLOv8】

图像分解:将输入图像分解为光照成分和反射成分。光照估计:估计光照图以消除暗光区域。图像重建:将光照增强后的反射图像重建成最终图像。Retinexformer通过在Transformer中引入Retinex的图像增强思路,使得低光照图像的细节能够得到充分保留。本文提出了一种基于Retinexformer的低光照增强方法,用于改进YOLOv8模型在夜间和低光照环境下的目标检测性能。

博客 1929

软考高级架构师笔记-10数学计算题

专栏《软考高级架构设计师》更新了,本章列举了10个场景计算题的解法,温故而知新,大家快来卷一卷

java后端开发的博客,不仅仅是后端开发 1597

Jfinal maven项目基于Tomcat服务器本地启动

Jfinal启动的两种方式 Tomcat启动/Jfinal的undertow启动

withme977的博客 1372

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

jfinal+H5的websocket 实现同一账户在不同地点不同电脑只能登陆一个(互相踢下线)...

jfinal+H5的websocket 实现同一账户在不同地点不同电脑只能登陆一个(互相踢下线):https://blog.csdn.net/liuyifeng1920/article/details/71713231 转载于:https://www.cnblogs.com/bydzhangxiaowei/p/10508839.html...

weixin_30546189的博客 235

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

公司还在用老框架,自学一下

你想看看JFinal老框架的简单Demo吗,这里就有

BeBaldBeStrong的博客 199

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

JFinal整合Websocket

JFinal整合Websocket,Tomcat和Undertow环境下

一川死水 1494

jfinal 项目 添加websocket功能

jfinal 项目 添加websocket功能项目需求尝试使用jfinal搭建基础版本增加websocket (重点)1. 修改pom.xml引入websocket 支持2. 增加首页 contrllor 文件和html文件3. 增加websocket handler文件4. 增加socket 处理文件5. 修改前端html文件编写websocket 消息处理函数6. 大功告成7. 经验教训和后续...

qq_26352993的博客 2043

jfinal 整合websocket(简单实现)

jfinal 整合websocket(简单实现) 近期需要利用websocket实现消息推送,参考资源实现jfinal中整合demo 1.配置jar包 <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomc...

龙小胖的博客 3192

jfinal websocket的配置以及实现。

jfinal websocket的配置以及实现。

我本名叫一休的博客 4558

jfinal html5,Jfinal框架整合webSocket技术功能实现

技术难度:简单在这里我会用最简单的方法实现JFinal框架结合webSocket最基础的功能,以至于后续业务的拓展需要小伙伴们依据实际情况去实现相应的开发!废话不多说,直接上代码!1、编写webSocket类package morality.ws;import java.io.IOException;import javax.websocket.OnClose;import javax.webso...

weixin_42299396的博客 334

jfinal项目配置websocket出现404

直接上代码 1、导入依赖包 <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> <scope>provided</scope> </dependency> 2、配置websocketController i

HMM316的博客 610

html 自动连接websocket_JFinal整合WebSocket

以tomcat容器为例,tomcat7以上版本开始支持websocket,JFinal集成的jetty服务器不支持websocket一、包依赖,tomcat7或是javaee包都行,两者二选一,容器中已提供所以只作为提供者org.apache.tomcattomcat-websocket-api7.0.47providedjavaxjavaee-api7.0provided二、JFinal的配置,...

weixin_39619451的博客 125
上一篇: WebSocketDemo
下一篇: AQS的理解
AAA821
博客等级 码龄14年 19粉丝 58原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值