<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>WebSocket示例</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="description" content="This is my page">
</head> <body>
<button onclick="subOpen();">open</button><br/>
<input type="text" name="msg" id="msg"><br/>
<button onclick="send();">发送</button>
<div id="div"></div> </body> <script type="text/javascript">
var ws; // 就是一个通信管道
var target = "ws://localhost:8080/WebsocketTest/echo";//服务端的url,注意以ws开头
function subOpen(){
//三个判断用于获取ws通信管道(浏览器兼容)
if('WebSocket' in window){
ws = new WebSocket(target);
}else if('MozWebSocket' in window){
ws = new MozMozWebSocket(target);
}else{
alert("WebSocket is not supported by this browse");
return;
}
//ws.onopen = function(){} 链接开启会执行方法
//ws.onclose = function(){} 断开连接会执行方法
//以上两个实际用处并不多,主要是下面的
//服务器又信息返回就执行方法
ws.onmessage=function(event){
//服务端一返回内容,就把该内容放到div标签当中
document.getElementById("div").innerHTML = event.data; //方便在控制台查看返回内容的具体信息
console.info(event);
};
}; function send(){
//点击发送按钮就把输入框里的内容发送给服务器,并把输入框的内容清空
var msg = document.getElementById("msg").value;
ws.send(msg);
document.getElementById("msg").value = "";
}; </script> </html>
package Test;

import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.CloseReason;
import javax.websocket.EndpointConfig;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint; //注解规定了访问的URL
@ServerEndpoint("/echo")
public class EchoSocket {
/**
* 客户端有连接的时候就会调用这个方法
*/
@OnOpen
public void open(Session session, EndpointConfig config){ System.out.println(session.getId()+"#############");
}
/**
* 客户端连接断开就会调用此方法
*/
@OnClose
public void close(Session session,CloseReason reason){
System.out.println(session.getId() + "连接关闭了");
} /**
* 接收到客户端的信息
* @param msg
* @param last
*/
@OnMessage
public void message(Session session,boolean last,String msg){
System.out.println("客户端说" + msg);
try {
session.getBasicRemote().sendText("ni hao too");
Thread.sleep(3000);//三秒后再发送一条信息,用于验证是否实现数据实时更新
session.getBasicRemote().sendText("ni hao too twice");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} /**
*错误监听(当没有关闭socket连接就关闭浏览器会异常)
*/
@OnError
public void error(Session session, Throwable error){
String id = session.getId();
System.out.println("出错的session的id是" + id);
}
public EchoSocket(){
System.out.println("Socket对象创建");
//通过对象的创建可以知道不同socket之间的通信不会共享成员变量
}
}

websocket Tomcat JSP Demo的更多相关文章

  1. Windows下Apache+Tomcat+jsp+php的服务器整合配置经验总结

    对于Apache+Tomcat+jsp+php的整合,针对不同的Tomcat和apache的版本,稍微有些区别. 一.所需软件 (1)JDK: jdk-7u15-windows-x64.exejdk的 ...

  2. (总结)CentOS 6.x使用yum快速安装Apache+PHP+Tomcat(JSP)+MySQL

    (总结)CentOS 6.x使用yum快速安装Apache+PHP+Tomcat(JSP)+MySQL PS:这个是懒人yum快速安装法,用于开发和测试环境很方便,用于没有特殊要求的生产环境也可以.特 ...

  3. 基于websocket vue 聊天demo 解决方案

    基于websocket vue 聊天demo 解决方案 demo 背景 电商后台管理的客服 相关技术 vuex axios vue websocket 聊天几种模型 一对一模型 一对一 消息只一个客户 ...

  4. tomcat/jsp/servlet版本关系

    Servlet Spec JSP Spec EL Spec WebSocket Spec JASPIC Spec Apache Tomcat version Actual release revisi ...

  5. 【IDEA 2016】intellij idea tomcat jsp 热部署

    刚开始用IDEA,落伍的我,只是觉得IDEA好看.可以换界面.想法如此的low. 真是不太会用啊,弄好了tomcat.程序启动竟然改动一下就要重启,JSP页面也一样. IDEA可以配置热部署,打开to ...

  6. Tomcat JSP提交参数中文乱码问题解决

    参考: http://blog.csdn.net/error_case/article/details/8250209 中文乱码是个老生常谈的问题,一般情况下,只要保证页面,web服务器,数据库的编码 ...

  7. Tomcat/JSP中文编码配置

    来源:http://blog.csdn.net/zhangzikui/article/details/6169978         http://www.iteye.com/topic/300656 ...

  8. CentOS 5.5 Nginx+JDK+MySQL+Tomcat(jsp)成功安装案例

    在CentOS 5.5中安装Nginx+jdk+mysql+tomcat是非常容易的.只需yum安装环境包和nginx.解压安装jdk和tomcat.配置profile文件.server.xml和ng ...

  9. 基于websocket的jsp与java进行交互

    环境:jdk.18   tomcat-7.0.70 把tomcat中的 两个jir包复制到 注意:最后部署的时候要删除掉这两个jar包 tomcate中已经有了 ebSocket对象的创建和服务器连接 ...

随机推荐

  1. [USACO18JAN]Stamp Painting

    Description: Bessie想拿\(M\) 种颜色的长为\(K\) 的图章涂一个长为\(N\) 的迷之画布.假设他选择涂一段区间,则这段区间长度必须为\(K\) ,且涂完后该区间颜色全变成图 ...

  2. [USACO18DEC]The Cow Gathering

    Description: 给定一棵树,每次删去叶子,有m个限制,分别为(a,b)表示a需要比b先删,为每个点能否成为最后被删的点 Hint: \(n,m \le 10^5\) Solution: 手模 ...

  3. C#7.0&6.0新特性 — 完整版

    C#2.0 泛型 部分类型 匿名方法 迭代器 可空类型 Getter / setter单独可访问性 方法组转换(代表) Co- and Contra-variance for delegates 静态 ...

  4. Flask实例化配置

    template_folder :指定模板存放路径,默认值:temolates from flask import Flask, url_for app = Flask(__name__,templa ...

  5. db2 reorgchk

    db2 reorgchk 命令是最重要的.也是经常被忽略的 DB2 调整命令之一. db2 reorgchk 命令被忽略是因为它不是一个一次性调整项.由于更新是在 DB2 数据库上执行的,因此关于表的 ...

  6. C_关于递归算法的几个例子

    1.递归算法的定义: 2.递归与迭代的优劣 eg1:斐波那契数列:斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibona ...

  7. ES6_入门(3)_顶层对象属性

    //顶层对象属性:在ES5中,顶层对象的属性与全局变量是等价的.以下代码中,为顶层对象的属性赋值与全局变量的赋值,是同一件事. window.a=10; console.log(window.a); ...

  8. Deepin 15.4 安装 Double Commander

    参照官方教程,安装命令行如下: https://software.opensuse.org/download.html?project=home%3AAlexx2000&package=dou ...

  9. C# 坐标系

    C#坐标系 一.概述 从数学角度讲,Point是一个二维矢量,包含两个公共整型属性,属性用大写X和Y(c#中公共属性一般约定以大写字母开头).当坐标不是整数值是float时,用PointF代替Poin ...

  10. [Vuex] Create a Vuex Store using TypeScript

    A Vuex store centralizes the state of your app, making it easy to reason about your state flow. In t ...