在开始学习GUI的SOCKET编程时,就一直有一个梦想,希望有一天能将这种聊天程序在WEB上实现,虽然QQ和许多其它的聊天程序已经实现,但是他们的实现都使用的是AJAX,无非是对AJAX进行改进,或者使用FLEX,个人认为那样实现太复杂,没有研究!!几个星期前终天有时间研究了,使用jetty来编写聊天程序,后来聊天都实现了,但是jetty服务器没有使用过,中间配服务器差不多用了一个星期,让我很纠结,最后在实验室的电脑可以成功运行!!!不过可悲的是当我移植到我的笔记本时,却出现在了各种怪错!!于是,我又纠结了,今天晚上,奇迹的发现tomcat竟然也支持了,所以果然的下载了tomcat7.0.27来测试,惊人的发现与jetty实现相似,所以写了一个小测试程序,测试成功!!下面贴上我的代码,有兴趣的童鞋可以一起学习哦!!!!
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <script type="text/javascript"> var ws = null; function startServer() { var url = "ws:localhost:8080/WebSocketAnnonationTomcat7/echo.ws"; if ('WebSocket' in window) { ws = new WebSocket(url); } else if ('MozWebSocket' in window) { ws = new MozWebSocket(url); } else { alert('WebSocket is not supported by this browser.'); return; } ws.onopen = function() { alert("connect success!"); }; ws.onmessage = function(event) { alert("revice mess:" + event.data); }; ws.onclose = function() { alert("close connect.."); }; } function sendMessage(){ var txtMsg=document.getElementById("msg").value; if(ws!=null && txtMsg!=''){ ws.send(txtMsg); } } </script> </head> <body onload="startServer()"> <input type="text" id="msg" value="" size="20" /> <input type="button" onclick="sendMessage();" value="发送" /> </body> </html>
servlet具体实现:
import java.io.IOException; import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.util.logging.Logger; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServletRequest; import org.apache.catalina.websocket.MessageInbound; import org.apache.catalina.websocket.StreamInbound; import org.apache.catalina.websocket.WsOutbound; /** * Tomcat7 WebSocket的簡單應用, WebSocket的servlet接口集成自webSocketServlet,实质为Serlet * <p>功能描述,该部分必须以中文句号结尾。<p> * * 创建日期 2013-7-21<br> * @author longgangbai <br> * @version $Revision$ $Date$ * @since 3.0.0 */ public class WebSocketExtServlet extends org.apache.catalina.websocket.WebSocketServlet { // private Logger logger=Logger.getLogger(WebSocketExtServlet.class.getSimpleName()); private static final long serialVersionUID = 1L; @Override protected StreamInbound createWebSocketInbound(String subProtocol, HttpServletRequest arg1) { logger.info(";request ws servelt"); return new MessageInbound(){ @Override protected void onClose(int status){ logger.info(";web socket closed :"+status); } @Override protected void onOpen(WsOutbound outbound){ logger.info(";web socket onOpen !"); } @Override protected void onBinaryMessage(ByteBuffer buff) throws IOException { // TODO Auto-generated method stub logger.info(";web socket Received : !"+buff.remaining()); } @Override protected void onTextMessage(CharBuffer buff) throws IOException { logger.info(";web socket Received : !"+buff.remaining()); //getWsOutbound可以返回当前的WsOutbound,通过他向客户端返回数据,这里采用nio的CharBuffer for (int j = 0; j < 50; j++) { try { Thread.sleep(2000); this.getWsOutbound().writeTextMessage(CharBuffer.wrap(String.valueOf(j))); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }; } }
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>WebSocketTomcat7</display-name> <servlet> <servlet-name>websocket</servlet-name> <servlet-class>com.easyway.websocket.WebSocketExtServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>websocket</servlet-name> <url-pattern>/echo.ws</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app>
需要说明的是,在开发的时候必须在tomcat的lib目录下拷贝两个JAR包:catalina.jar tomcat-coyote.jar
但当你运行的时候必须将这两个包删除,否则,会与tomcat的包冲突!!!!!
他们类的关系,也有一定的理解,今天暂时写到这里吧!!
相关推荐
Python自动化办公源码-34 Python批量新建文件夹并保存日志信息
粒子滤波算法在目标跟踪中的实践与源码解析集合:多套系统源码包括基于meanshift的应用、MATLAB实现及与卡尔曼滤波比较,粒子滤波(器)滤波(器)及应用源码集合目标跟踪提取图像特征 以下多套系统源码 1、基于meanshift和粒子滤波的目标跟踪代码 2、MATLAB编写的粒子滤波器的源代码 3、粒子滤波算法实例 4、粒子滤波mcmc介绍 5、粒子滤波算法 matlab(粒子滤波用于剩余寿命预测的实例代码 MATLAB语言编写 附有详细代码说明) 6、粒子滤波matlab代码(能够运行。 Pf粒子滤波实现的目标跟踪程序,可实现针对非高斯噪声情况下的跟踪) 7、粒子滤波代码(三个粒子滤波的演示程序,一个滤波,一个目标跟踪,一个机器人定位) 8、发个Matlab实现粒子滤波算法的程序 9、粒子滤波的简介和5中matlab程序仿真 10、粒子滤波代码与卡尔曼做比较(这是用于目标跟踪的粒子滤波代码, 用matlab编写的,很有借鉴性,一维情况下, 非高斯非线性,其中将扩展卡尔曼滤波与粒子滤波进行比较,更好的说明了粒子滤波的优越性) 11、EKF,UKF和PF粒子滤波的性能(对比分析EKF
项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:Tomcat(建议用 7.x 或者 8.x 版本),maven 数据库工具:navicat
西门子PLC与三菱变频器通讯程序:触摸屏控制变频器实现精准频率调节与实时监控,西门子1200 PLC与3台三菱E700变频器通讯程序 器件:西门子1200 PLC,3台三菱E700变频器,西门子KTP700 Basic Pn触摸屏,昆仑通态触摸屏(带以太网),中途可以加路由器 控制方式:触摸屏与plc以太网通讯,PLC与变频器通讯485口相连 功能:触摸屏控制变频器设定频率,启停,读取输出频率,电压 说明:是程序,非硬件。 程序有注释,西门子触摸屏程序,昆仑通态程序,变频器设置,接线都有,一应俱全 ,核心关键词:西门子1200 PLC; 三菱E700变频器; 通讯程序; 触摸屏控制; 设定频率; 启停; 读取输出频率; 电压; PLC与变频器485口相连; 程序注释; 西门子触摸屏程序; 昆仑通态程序; 变频器设置; 接线。,基于西门子PLC与三菱变频器通讯的控制系统程序
Python自动化办公源码-35Python从Excel表中批量复制粘贴数据到新表
本项目为基于Spring Boot和Vue框架构建的出租车管理系统源码,总计包含118个文件,涵盖99个Java源文件、15个XML配置文件、1个Git忽略文件、1个JAR包文件以及1个Markdown文件。该系统采用Java语言开发,适用于出租车行业的智能化管理需求。
基于滑膜与PID控制的分布式电动汽车动态载荷分配与操稳控制优化策略,滑膜+pid+上层设计下层平均分配 优化分配 动态载荷分配,分布式电动汽车操稳控制 本研究在matlab simulink建立七自由度轮毂电机驱动汽车模型,使用滑膜联合控制以及pid控制实现转向过程中质心侧偏角,橫摆角速度,滑转率稳定性控制, ,关键词:滑膜控制; PID控制; 七自由度轮毂电机驱动汽车模型; 联合控制; 稳定性控制; 动态载荷分配; 操稳控制; 分布式电动汽车。,"基于滑膜与PID控制的分布式电动汽车操稳控制与动态载荷分配研究"
单相PWM整流器两种控制策略仿真研究:PR控制器与PI控制器的应用及性能分析,单相PWM整流器两种控制策略实现(交流220V-直流350V整流)仿真,分别采用直接电流控制(PR控制器)与dq控制(PI控制器)实现,两个仿真动稳态性能良好,附带仿真介绍文档,详细讲述仿真搭建过程,并附带参考文献与原理出处,内容详实,适合电力电子入门仿真参考。 ,核心关键词:单相PWM整流器;控制策略;直接电流控制(PR控制器);虚拟dq控制(PI控制器);仿真动稳态性能;仿真介绍文档;仿真搭建过程;参考文献;原理出处;电力电子入门仿真参考。,《单相PWM整流器仿真:直接电流与虚拟dq控制策略对比解析》
chromedriver-win64-125版本所有资源打包:125.0.6368.0 -125.0.6422.78之间的所有版本打包下载
项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:Tomcat(建议用 7.x 或者 8.x 版本),maven 数据库工具:navicat
IEEE69节点系统Simulink仿真模型:潮流计算与故障分析及分布式电源影响观察,IEEE69节点系统Simulink仿真 1.基础功能:基于Matlab simulink平台搭建IEEE33节点仿真模型,对电力系统进行潮流计算 2.拓展功能: 可在该IEEE69节系统仿真模型上进行故障分析(短路,断线等),也可以在该模型上接入分布式电源,观察分布式电源接入对系统的影响。 ,IEEE69节点系统Simulink仿真; Matlab Simulink平台; 潮流计算; 故障分析; 分布式电源接入影响; 短路分析; 断线分析。,Matlab Simulink中IEEE 69节点系统仿真:功能扩展与分布式电源接入影响分析
2025最新人工智能与健康题库及答案.docx
蛇优化算法SO优化LSSVM的c和g参数在多输入单输出下的拟合预测建模——Matlab程序实现与结果展示,蛇优化算法SO优化支持向量机LSSVM的c和g参数做多输入单输出的拟合预测建模。 程序内注释详细直接替数据就可以使用。 程序语言为matlab。 程序直接运行可以出拟合预测图,迭代优化图,线性拟合预测图,多个预测评价指标。 PS:以下效果图为测试数据的效果图,主要目的是为了显示程序运行可以出的结果图,具体预测效果以个人的具体数据为准。 2.由于每个人的数据都是独一无二的,因此无法做到可以任何人的数据直接替就可以得到自己满意的效果。 ,蛇优化算法; SO优化; 支持向量机; LSSVM; c和g参数; 多输入单输出; 拟合预测建模; MATLAB程序; 拟合预测图; 迭代优化图; 线性拟合预测图; 预测评价指标。,基于蛇优化算法与SO优化的LSSVM多输入单输出预测建模及可视化工具
系统旨在为了帮助鸟类爱好者、学者、动物保护协会等群体更好的了解和保护鸟类动物。用户群体可以通过平台采集野外鸟类的保护动物照片和视频,甄别分类、实况分析鸟类保护动物,与全世界各地的用户,沟通交流。使用方法请参考文章:https://blog.csdn.net/m0_64027967/article/details/145266648
http和https的区别?【http和https有什么区别?实现网站https化-让网站更安全!简介】 内容概要: 本文为初学者提供了一个全面的学习指南,通过通俗易懂的语言,介绍了http和https的区别,以及如何实现网站https化。本文旨在帮助读者理解网站安全性的重要性,并掌握网站https化的实现方法。 适用人群: 本篇文章主要面向初学者,特别是那些对网络安全感兴趣的读者。它为读者提供了一个实用的指南,帮助他们了解网站安全的基本概念和方法。 使用场景及目标: 本篇文章适用于那些想要提高自己网站安全性的读者。它的目标是帮助读者理解https的作用,掌握实现网站https化的方法和步骤,从而保护自己的网站和用户的安全。 其他说明: 文章采用通俗易懂、口语化的语言风格,旨在让读者轻松理解并吸收内容。同时,文章还强调了实际操作的重要性,鼓励读者亲自动手实践,提高自己的网络安全技能。最后,文章鼓励读者保持积极的心态,将网络安全作为一项重要的技能进行学习和实践。
基于FATFS系统的STM32F407 SD卡升级Bootloader程序:自动检测与升级流程,stm32f407 SD卡升级 bootloader程序 基于sdio fatfs系统的stm32 bootloader程序 功能简介: 本程序使用fatfs系统读取bin文件。 开机后会自动检测sd卡,检测到sd卡后,再读取固定名称的bin文件,之后会对bin文件进行首包校验,判断该升级包的起始地址是否正确,正确的话,就循环读取bin文件并写入到flash中。 完成升级。 详细流程请看流程图 ,stm32f407; SD卡升级; bootloader程序; fatfs系统读取bin文件; 检测SD卡; 首包校验; 循环写入flash。,STM32F407 SD卡升级Bootloader程序:基于SDIO FATFS系统实现自动升级功能
Python自动化办公源码-16从Excel总表中分割10个部门的年假数据
大规模MIMO-D2D蜂窝网络中的下行传输速率研究.pdf
Python自动化办公源码-44 excel处理实例(二维表转一维表)
2025最新全套ISO16949质量手册及程序文件.doc