tomcat7和tomcat8的websocket区别

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{
	@Override
	protected StreamInbound createWebSocketInbound(String arg0, HttpServletRequest arg1) {
		// TODO Auto-generated method stub
		return new MsgInbound();
	}
	

	private class MsgInbound extends MessageInbound{
	
		protected void onClose(int status){  
            		super.onClose(status);  
        	}  
        	protected void onOpen(WsOutbound outbound){  
            		super.onOpen(outbound);  
        	}  
        
		@Override
		protected void onBinaryMessage(ByteBuffer arg0) throws IOException {
			// TODO Auto-generated method stub
			
		}
	
		@Override
		protected void onTextMessage(CharBuffer message) throws IOException {
			// TODO Auto-generated method stub
			System.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 {
	@OnOpen
	public void onOpen(){
		System.out.println("WEBopen");
	}
	@OnClose
	public void onClose(){
		System.out.println("WEBCLOSE");
	}
	@OnMessage
	public 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 block
				e.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里面都有,需要学习可以直接在里面看源码。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: Tomcat7Tomcat8区别主要在以下几个方面: 1. 性能方面:Tomcat8相对于Tomcat7有更好的性能表现,特别是在处理大量并发请求时。 2. Java版本:Tomcat7需要Java 6或7,而Tomcat8需要Java 7或8。 3. WebSocket支持:Tomcat8WebSocket的支持更加完善,包括对WebSocket API的更新和改进。 4. JSP规范:Tomcat8支持JSP 2.3规范,而Tomcat7只支持JSP 2.2规范。 5. Servlet规范:Tomcat8支持Servlet 3.1规范,而Tomcat7只支持Servlet 3.规范。 总的来说,Tomcat8相对于Tomcat7在性能和功能方面都有所提升,但是对于一些老的应用程序来说,可能需要进行一些修改才能在Tomcat8上运行。 ### 回答2: Tomcat是一个非常流行的Java Web Server,它提供了一个强大的Web应用程序容器。在使用Tomcat时,我们经常需要选择适合自己的版本,其中Tomcat7Tomcat8是目前最流行的版本。下面我们来了解一下Tomcat7Tomcat8有哪些不同。 首先,Tomcat8在性能上比Tomcat7要优秀。Tomcat8的性能提升主要是通过使用Java NIO技术实现的。使用NIO(Non-Blocking I/O)可以加快IO操作速度,降低系统的负载,使Tomcat8更适合高并发场景下的应用。 其次,Tomcat8对于WebSocket和Servlet 3.1规范的支持更好。Tomcat8支持原生的WebSocket协议,而Tomcat7只支持基于JSR-356实现的WebSocket协议。 Tomcat8还升级了Java虚拟机版本,使用Java 8虚拟机新特性,并且采用了更现代化的Java标准库。这使得它支持更多的语言特性,并且提供更出色的内存管理。 此外,Tomcat8的配置文件结构也有所改变,更简单明了。目录结构的改变带来了更清晰的代码和目录结构,对于开发和维护都更加友好。 总的来说,Tomcat8Tomcat7有一些显着的性能和规范支持上的优势,因此在选择Tomcat版本时,我们可以根据自己的具体需求和情况来选择。 ### 回答3: Tomcat是一个开源的Java Servlet容器。它是Apache软件基金会的一部分。Tomcat可以运行在各种操作系统上,包括Windows、Linux和Mac OS等。而Tomcat7Tomcat8是其中比较常用的两个版本。那么它们有哪些区别呢?下面就来介绍一下: 1. Java版本:Tomcat7需要使用Java 6或Java 7,而Tomcat8需要使用Java 7或Java 8。这意味着如果要升级到Tomcat8,则需要升级Java版本。 2. WebSocket支持:Tomcat7不支持WebSocket,而Tomcat8支持WebSocketWebSocket是一种在单个TCP连接上进行全双工通信的协议,它可以帮助Web应用程序实现实时通信功能。 3. JASPIC支持:Tomcat8引入了Java Authentication SPI for Containers(JASPIC),这是一种Java Enterprise Edition(Java EE)规范,它提供了一种机制,允许应用程序在运行时将身份验证和授权委托给容器。 4. 多个Web应用程序独立部署:Tomcat7需要将所有的Web应用程序部署在同一个文件夹下,而Tomcat8可以让用户将多个Web应用程序部署在不同的文件夹下,每个应用程序都是独立的。 5. 性能:Tomcat8Tomcat7更快,可以处理更大的负载。 6. 改进的管理控制台:Tomcat8的管理控制台经过了许多改进,包括更好的用户界面和更好的安全性。 总之,Tomcat8相比Tomcat7有许多改进和增强。它支持新的特性,如WebSocket和JASPIC,可以处理更多的负载并具有更好的性能。不过,升级到Tomcat8可能需要升级Java版本,并需要一些新的配置。因此,如果你正在使用Tomcat7并且没有遇到任何问题,不一定要立即升级到Tomcat8

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值