tomcat8真正支持jsr-356(包含对websocket的支持), tomcat7部分版本的websocket实现不兼容jsr-356。websocket实现tomcat7.x与tomcat8.x有很大差异。在tomcat7中使用websocket需要定义一个servlet,然后继承WebSocketServlet,在tomcat8中使用websocke。出自:http://blog.csdn.net/liuxiao723846/article/details/46930173

一、tomcat7定义servlet的方式简单举例。

1、新建一个环境为tomcat7的web工程,需要的包有catalina.jar,tomcat-coyote.jar。

2、修改web.xml。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:web="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee"id="WebApp_ID" version="2.5"><servlet><servlet-name>WebSocket</servlet-name><servlet-class>Tomcat7Test</servlet-class></servlet><servlet-mapping><servlet-name>WebSocket</servlet-name><url-pattern>/websocket/*</url-pattern></servlet-mapping>
</web-app>

3、写一个后台类:Tomcat7Test.java。


import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.util.ArrayList;
import java.util.List;import javax.servlet.http.HttpServletRequest;import org.apache.catalina.websocket.MessageInbound;
import org.apache.catalina.websocket.StreamInbound;
import org.apache.catalina.websocket.WebSocketServlet;
import org.apache.catalina.websocket.WsOutbound;public class Tomcat7Test extends WebSocketServlet{@Overrideprotected StreamInbound createWebSocketInbound(String arg0, HttpServletRequest arg1) {// TODO Auto-generated method stubreturn new MsgInbound();}private class MsgInbound extends MessageInbound{protected void onClose(int status){  super.onClose(status);  }  protected void onOpen(WsOutbound outbound){  super.onOpen(outbound);  }  @Overrideprotected void onBinaryMessage(ByteBuffer arg0) throws IOException {// TODO Auto-generated method stub}@Overrideprotected void onTextMessage(CharBuffer message) throws IOException {// TODO Auto-generated method stubSystem.out.println(message.toString());//将websocket传过来的值返回回去WsOutbound outbound=this.getWsOutbound();outbound.writeTextMessage(message);outbound.flush();}}
}        

4、前端html页面。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
服务器返回的信息:
<input type="text" id="show"/>浏览器发送的信息:
<input type="text" id="msg"/>
<input type="button" value="send" id="send" onclick="q()"/><script>var ws = null ;var target="ws://localhost:8080/TestWeb/websocket/test";if ('WebSocket' in window) {ws = new WebSocket(target);} else if ('MozWebSocket' in window) {ws = new MozWebSocket(target);} else {alert('WebSocket is not supported by this browser.');}ws.onopen = function(obj){console.info('open') ;console.info(obj) ;} ;ws.onclose = function (obj) {console.info('close') ;console.info(obj) ;} ;ws.onmessage = function(obj){console.info(obj) ;document.getElementById('show').value=obj.data;} ;function q(){ws.send(document.getElementById('msg').value);}
</script>
</body>
</html>

二、tomcat8使用websocket实例。

只需要写java类,和前端代码。

1、新建一个环境为tomcat8的web工程,需要的包有websocket-api.jar。

2、后台java类。

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;
//一定要添加这个注释
@ServerEndpoint("/websocket/test")
public class Test {@OnOpenpublic void onOpen(){System.out.println("WEBopen");}@OnClosepublic void onClose(){System.out.println("WEBCLOSE");}@OnMessagepublic void onMessage(Session session,String msg){System.out.println("send message"+msg);if(session.isOpen()){try {//将websocket传过来的值返回回去session.getBasicRemote().sendText(msg);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
}

3、前端html代码。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
服务器返回的信息:
<input type="text" id="show"/>浏览器发送的信息:
<input type="text" id="msg"/>
<input type="button" value="send" id="send" onclick="q()"/><script>var ws = null ;var target="ws://localhost:8080/TestWeb/websocket/test";if ('WebSocket' in window) {ws = new WebSocket(target);} else if ('MozWebSocket' in window) {ws = new MozWebSocket(target);} else {alert('WebSocket is not supported by this browser.');}ws.onopen = function(obj){console.info('open') ;console.info(obj) ;} ;ws.onclose = function (obj) {console.info('close') ;console.info(obj) ;} ;ws.onmessage = function(obj){console.info(obj) ;document.getElementById('show').value=obj.data;} ;function q(){ws.send(document.getElementById('msg').value);}
</script>
</body>
</html>

三、备注:

1、websocket的前端代码都是一样的。

2、tomcat7也支持上述的非servlet方式。

3、tomcat8不支持servlet,没有对应要继承的WebSocketServlet.java。

4、注意不要发生包冲突问题。

1)web项目里面不能有跟tomcat/lib一样的包,否则启动tomcat的时候会发生包冲突。

2)在tomcat的contex.xml中添加<Loader delegate="true"/>(不建议使用,容易产生其他错误)

作用: Loader对象可出现在Context中以控制Java类的加载。

属性:delegate、含义:True代表使用正式的Java代理模式(先询问父类的加载器);false代表先在Web应用程序中寻找。默认值:FALSE。

5、以上的列子在tomcat的examples里面都有,需要学习可以直接在里面看源码。

tomcat7和tomcat8的websocket区别相关推荐

  1. 基于Tomcat7、Java、WebSocket的服务器推送聊天室

    2019独角兽企业重金招聘Python工程师标准>>> 基于Tomcat7.Java.WebSocket的服务器推送聊天室 转载于:https://my.oschina.net/u/ ...

  2. Tomcat学习总结(4)——基于Tomcat7、Java、WebSocket的服务器推送聊天室

    前言         HTML5 WebSocket实现了服务器与浏览器的双向通讯,双向通讯使服务器消息推送开发更加简单,最常见的就是即时通讯和对信息实时性要求比较高的应用.以前的服务器消息推送大部分 ...

  3. centos7下tomcat7 或tomcat8启动超慢原因

    1,找到你的jdk安装的位置 ${JAVA_HOME}/jre/lib/security/java.security 2,vi 打开后找到 securerandom.source=file:/dev/ ...

  4. WebSocket介绍和Socket的区别

    WebSocket介绍与原理 WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duplex).一开始的握手需要借助HTTP)请求完成. -- ...

  5. Tomcat7 配置 WebSocket

    这是本人第一次写技术性的博客,写的好与不好还请各位多多包含.哈哈~     由于项目的要求需要使用WebSocket,公司的服务器是用C++写的,而我之前是名Java程序员,所以处于好奇变用Tomca ...

  6. 使用spring boot +WebSocket实现(后台主动)消息推送

    前言:使用此webscoket务必确保生产环境能兼容/支持!使用此webscoket务必确保生产环境能兼容/支持!使用此webscoket务必确保生产环境能兼容/支持!主要是tomcat的兼容与支持. ...

  7. websocket初探

    过去都是使用浏览器端插件(如flash和java applet)与服务器建立套接字通信,这些插件技术曾经广泛应用在网页聊天和网页游戏,html5提供的websocket有取代这些插件的趋势. 在web ...

  8. WebSocket 实战--转

    原文地址:http://www.ibm.com/developerworks/cn/java/j-lo-WebSocket/ WebSocket 前世今生 众所周知,Web 应用的交互过程通常是客户端 ...

  9. tomcat7.027-webSocket应用程序构建01

    前几天研究了一下tomcat7.027的webSocket实现.简单看了下官方源码自己实践了一下. 在这里简单介绍一下tomcat的webSocketAPI使用. 在这里啰嗦几句:[ 很多朋友听说we ...

最新文章

  1. 目前流行的源程序版本管理软件和项目管理软件都有哪些?各有什么优缺点?...
  2. metaq的简单封装dataChange解读
  3. 一条正确的Java职业生涯规划,顺利拿到offer
  4. 7-12(图) 社交网络图中结点的“重要性”计算(30 分)
  5. django自动转化前端模板中static的css,js引用
  6. 16进制在c语言中用来做什么,十六进制在代码中有什么用
  7. (2)FPGA面试题竞争与冒险
  8. 大端模式和小端模式的再理解
  9. 两个HC-05蓝牙模块互相绑定构成无线串口模块
  10. KNN算法(10折交叉验证)
  11. mac10.15切换大小写指示灯不亮
  12. Google Chrome谷歌浏览器清除缓存以及清除Cookie快捷键
  13. 8.21: Hackday、慈善x快速迭代
  14. 《富爸爸穷爸爸》读书笔记 - 为什么要教授财务知识
  15. 微信网页授权(OAuth2.0) PHP 源码简单实现
  16. 导入excel 文件解析,一行数据,有一列分两行显示,解析时如何 合为一行?
  17. HTML+CSS+JS大作业——汽车租赁(47页) 加特效 web期末作业设计网页_汽车大学生网页设计作业成品
  18. (转)分辨率 PPI DPI概念定义详解
  19. 保姆级教程:如何搭建一个专属云平台?
  20. 用户注册信息验证功能(前端+后台)

热门文章

  1. 软件项目管理实验报告(一)
  2. tftp工作流程计算机网络,网络服务TFtp、NFS配置
  3. 实现 GPS 拒绝飞机导航的时间序列模型(Matlab代码实现)
  4. 常用计算机分列,2017职称计算机考试Excel单选练习试题「有答案」
  5. 前端入职第一天都在做什么
  6. 《ANSYS CFX 14.0超级学习手册》——第2章 CFX软件简介2.1 CFX的软件构成
  7. win11不兼容vm--VMware Workstation 与 Device/Credential Guard 不兼容。在禁用 Device/Credential Guard 后,可以运行 VMwa
  8. 初中数学结合计算机教学设计,初中数学与信息技术整合在教学中的应用.doc
  9. 剖析GPT,背后的算法,文献,行业影响和中小企业落地建议
  10. 背包问题 python 背包九讲