WebSocket的简单实现&jsp
创建一个web项目
导入依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.chu</groupId>
<artifactId>webSocket</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging> <dependencies>
<!-- servlet-api-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<!-- websocket-api-->
<dependency>
<groupId>javax.websocket</groupId>
<artifactId>javax.websocket-api</artifactId>
<version>1.1</version>
<!-- 设置作用域 默认compile 编译 测试 运行
provided 编译 测试
runtime 测试 运行
test 测试-->
<scope>provided</scope>
</dependency>
<!-- JSON转换-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.4</version>
</dependency>
</dependencies> <!-- <build>-->
<!-- <plugins>-->
<!-- maven自带的tomcat插件 需要配置对应的命令 tomcat7:run-->
<!-- <plugin>-->
<!-- <groupId>org.apache.tomcat.maven</groupId>-->
<!-- <artifactId>tomcat7-maven-plugin</artifactId>-->
<!-- <version>2.2</version>-->
<!-- <configuration>-->
<!-- <port>80</port>-->
<!-- <path>/</path>-->
<!-- <uriEncoding>UTF-8</uriEncoding>-->
<!-- </configuration>-->
<!-- </plugin>-->
<!-- </plugins>-->
<!-- </build>--> </project>
controller层代码:
package com.chu.controller; import com.fasterxml.jackson.databind.ObjectMapper;
import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/*
小楚想要发送信息给小赵
这个信息会先存储在服务器
再由服务器发送给小赵
*/
@ServerEndpoint("/chat/{name}")
public class ChatSocket { //定义一个Map集合,用来存放登陆到服务器的客户名称和Session
private static Map<String,Session> mapMessage = new HashMap<>(); //首先,方法名称可以自定义
// *形参---name---Session
@OnOpen//会话开始
public void onOpen(@PathParam("name")String name, Session session){
System.out.println("onOpen....."+name);
//key-----name value-----session
mapMessage.put(name,session); }
//客户机信息处理 * 形参---Session session ---String message
@OnMessage
public void onMessage(Session session,String message){
System.out.println("onMessage....."+message);
//服务端给客户端发消息,走的不是HTTP 而是直接推送过去了
//获取JSON对象
ObjectMapper mapper = new ObjectMapper();
try {
//获取JSON格式的信息
Map<String,String> map = mapper.readValue(message, Map.class);
//获取需要发送的信息:content
String content = map.get("content");
//获取接收信息者:小赵
String receive = map.get("receive");
//从事先定义好的Map中获取小赵的Session
Session receiveSession = mapMessage.get(receive);
//如果小赵的Session为null
if(receiveSession==null){
//响应:对方不在线
session.getAsyncRemote().sendText("对方不在线");
}else{
//否则将接收到的信息发送给小赵
receiveSession.getAsyncRemote().sendText(content);
}
} catch (IOException e) {
e.printStackTrace();
} }
//会话结束
@OnClose
public void onClose(Session session){
System.out.println("onClose....."+session);
}
//会话出现异常
@OnError
public void onError(Session session,Throwable e){
try {
e.printStackTrace();
session.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
jsp代码:
<body>
<div align="center" style="padding-top: 50px"> 发送者<input id="sendOut"><br> 接收者<input id="receive"><br> 信息<input id="content"><br> <input type="button" value="注册" onclick="reg()"> <input type="button" value="提交" onclick="sendmsg()"><br> <span id="list"></span> <script type="text/javascript">
var ws;
// 注册按钮
function reg() {
// 注册路径 加上自己的用户名
ws = new WebSocket("ws://localhost:8080/chat/"+document.getElementById("sendOut").value)
//接收服务器信息并显示
ws.onmessage = function (msg) {
//接收服务器信息
var message = msg.data
//获取展示信息的位置
var former = document.getElementById("list")
former.innerHTML=former.innerHTML+"...他说"+message
}
}
function sendmsg() {
// 获取接收者
var receive = document.getElementById("receive").value
//获取发送的内容
var content = document.getElementById("content").value
//以JSON的方式发送到服务器
ws.send('{"receive":"'+receive+'","content":"'+content+'"}')
//获取展示信息的位置
var former = document.getElementById("list")
former.innerHTML=former.innerHTML+"...你说"+content
}
</script>
</div>
</body>
WebSocket的简单实现&jsp的更多相关文章
- 最简单的jsp+servlet的增删改查代码
package ceet.ac.cn.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.s ...
- [异常解决] 初玩SAE遇到的小问题——注册&创建项目+MyEclipse装插件直接部署+一个简单的JSP部署实现
① 新浪SAE快速上手教程:http://jingyan.baidu.com/season/43090 上面一个链接是针对PHP的相关介绍,如果用java还有点不一样,具体请看新浪SAE官网:http ...
- 一个简单的jsp自定义标签
学到了一个简单的jsp自定义标签,后面有更多的例子,会更新出来: 例子1: 步骤: 1.编写标签实现类: 继承javax.servlet.jsp.tagext.SimpleTagSupport; 重写 ...
- OpenCms JSP 模板开发——创建一个简单的JSP模板
OpenCms中的JSP模板就是一个普通的JSP页面,在特定的位置使用标签来包含内容,在这个的例子中,我们将要开发一个简单JSP模板,这个模板只是在内容(如<html>.<body& ...
- 一个简单的JSP程序示例
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...
- 不通过ecplise,只通过文件目录 创建最简单的JSP文件
手动创建最简单的JSP 文件 1.在Tomcat 6.0的安装目录的webapps目录下新建一个目录,起名叫myapp. 2.在myapp目录下新建一个目录WEB-INF,注意,目录名称是区分大小 ...
- nodejs与websocket模拟简单的聊天室
nodejs与websocket模拟简单的聊天室 server.js const http = require('http') const fs = require('fs') var userip ...
- websocket(二)--简单实现网页版群聊
websocket可以实现服务端的消息推送,而不必在客户端轮询,大大的节省的资源,对于实时通讯来说简直是个大喜讯. 在上一篇文章中介绍了协议握手,这篇文章将通过实现简单的群聊来帮助进一步了解webso ...
- websocket实现简单聊天程序
程序的流程图: 主要代码: 服务端 app.js 先加载所需要的通信模块: var express = require('express'); var app = express(); var htt ...
随机推荐
- window下Apache Jmeter基础用法
1.下载Apache-jmeter-5.1.1.zip 2.解压到一个地方,就可以开始使用了,如果需要在CMD里快速打开,可以设置环境变量. 3.在bin里面,直接打开jmeter.bat. 可以修改 ...
- Codeforces 2A :winner
A. Winner time limit per test 1 second memory limit per test 64 megabytes input standard input outpu ...
- PYTHON画三维图
import matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3Dimport numpy as np #bbb=[1 if ...
- 3D打印技术的火爆,真的会让传统模具行业没落吗?
当一种新生事物出现时,人们除了赞美它带来的新畅想外,往往还会对"旧事物"贬低几分--各种淘汰观点总是不绝于耳.但可惜的是,新生事物取代旧事物的事儿并不会必然发生.比如,直到现在广播 ...
- 完整版excel上传导入读写批量数据并将反馈结果写入远程exel中
思路:excel的读写借助于poi框架,在写入远程的时候,是不能直接写入的,本博主将传入的文件再次拉下来写到项目临时文件中,然后,在临时文件中写入,然后,以同样的名称路径覆盖掉远程的就可以了,稍微有点 ...
- x86平台inline hook原理和实现
概念 inline hook是一种通过修改机器码的方式来实现hook的技术. 原理 对于正常执行的程序,它的函数调用流程大概是这样的: 0x1000地址的call指令执行后跳转到0x3000地址处执行 ...
- WCF 异常 The server was unable to process the request due to an internal error.
实习用的C#,不搞.NET,但且记下. 只有标题中的错误提示,完全不知道哪里出错,要么是Oracle服务器.要么是服务程序,最不愿代码有问题. <behaviors> <servic ...
- exit(0)与exit(1)
exit(0):正常运行程序并退出程序: exit(1):非正常运行导致退出程序: return():返回函数,若在主函数中,则会退出函数并返回一值. 详细说: 1. return返回函数值,是关键字 ...
- C++ STD Gems03
transform.for_each #include <iostream> #include <vector> #include <string> #includ ...
- Vulkan SDK之 Swapchain
Swapchain是一系列最终会展示给用户的图像的集合. /* * Set up swapchain: * - Get supported uses for all queues * - Try to ...