(1) 基于tomcat7和jdk1.7的websocket启动

时间:2021-05-24 19:07:21

1 开发环境 : myeclipse10 + tomcat7 + jdk1.7

2 需要导入jar包

 2.1 tomcat7-websocket.jar

 2.2 websocket-api.jar

3 项目截图

(1) 基于tomcat7和jdk1.7的websocket启动

4  DemeConfig.java

   这是websocket配置类, 不需要再任何地方配置,启动 tomcat后会输出  -------------websoket start-----------------  ,表示成功

package com.webSocket.config;

import java.util.Set;

import javax.websocket.Endpoint;
import javax.websocket.server.ServerApplicationConfig;
import javax.websocket.server.ServerEndpointConfig;

public class DemeConfig implements ServerApplicationConfig{
	//注解的方式 启动
	public Set<Class<?>> getAnnotatedEndpointClasses(Set<Class<?>> scan) {
		System.out.println("-------------websoket start-----------------");
		System.out.println("scan.size() = " + scan.size());
		
		return scan; //必须要返回scan,否则会造成连接失败
	}

	//接口方式启动
	public Set<ServerEndpointConfig> getEndpointConfigs(
			Set<Class<? extends Endpoint>> arg0) {
	
		return null;
	}

}

 

5 EchoSocket.java

  服务器开启了一个叫 echo  的socket

package com.webSocket.client;

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("/echo")
public class EchoSocket {
	@OnOpen
	public void open(Session session){ //打开websocket
		String id = session.getId();
		System.out.println("websocket is open");
		System.out.println("user id  is " + id);
		System.out.println("session.isOpen() = " + session.isOpen());
	}
	
	@OnClose
	public void close(Session session){ //关闭websocket
		System.out.println("websocket is close");
	}
	
	@OnMessage
	public void message(Session session,String message){
		//接收客服端信息
		System.out.println("客服端信息为 : " + message);
		
		//给客服端发送信息
		try {
            if (session.isOpen()) {
                session.getBasicRemote().sendText("服务器说 : " + message);
            }
        } catch (IOException e) {
            try {
                session.close();
            } catch (IOException e1) {
                // Ignore
            	e1.printStackTrace();
            }
        }
	}
}


6 index.jsp

<%@ page language="java" import="java.util.*,javax.*" 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>
    
    
    <title>My JSP 'index.jsp' starting page</title>
	
  </head>
  
  <body>
   <script type="text/javascript">
     var ws=null; 
     var target = "ws://"+window.location.host+"/webSocketTest/echo"; // 打开管道  ,ws://localhost:8080/项目名/@ServerEndpoint名字
     openWebsocket = function(){
        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.');
                return;
         }
         ws.onmessage = function (event) { //创建websocket同时,接收服务器发给客服端的消息
         		if(event!=null){
         		 var servermsg =  event.data;
         		 var textArea = document.getElementById("textAreadID");
         		 textArea.value = textArea.value  + servermsg;
         		 
         		}
         	  };
       
     }
     
     sendMessage = function(){ //发送信息
       if(ws!=null){
         var sendMessageInput = document.getElementById("sendMessageInput");
         var msg = sendMessageInput.value;
       	 ws.send(msg);
       	 sendMessageInput.value ="";
       	
       }
       else{
         alert("websocket is null , please create a websocket");
       }
     }
   </script>
   
   <button onclick="openWebsocket()">open</button>
   <input id="sendMessageInput"></input>
   <button onclick="sendMessage()">send</button></br>
   <textarea id="textAreadID" rows="5" cols="20"></textarea>
  </body>
</html>

 

7 操作方法  ,先点击 open ,然后在input输入信息 , 点击send , 会在 textarea区域更新信息 ,截图

(1) 基于tomcat7和jdk1.7的websocket启动