package com.zx.ws;
import com.zx.utils.DB;
import sun.reflect.annotation.ExceptionProxy;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.sql.PreparedStatement;
import java.util.concurrent.CopyOnWriteArraySet;
/**
* @Author 晓
* @Date 2018-6-7 下午 3:53
* @clazzExplain 类说明:
* @modifyUser 修改人:
* @modifyDate 修改日期:
*/
@ServerEndpoint(value = "/websocket")
public class ManagerServlet extends HttpServlet {
//concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象,若要实现服务端与单一客户端通信的话,可以使用Map来存放,其中Key可以为用户标识
private static CopyOnWriteArraySet<ManagerServlet> webSocketSet = new CopyOnWriteArraySet<>();
//这个session不是HttpSession,相当于用户的唯一标识,用它进行指定用户通讯
private Session session = null;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException ,IOException{
String msg;
String name = request.getParameter("name");
//这里submit是数据库操作的方法,如果插入数据成功,则发送更新信号
if(submit(name)){
//发送更新信号
sendMessage();
msg="更新成功!";
}else{
msg="更新失败!";
}
response.sendRedirect("manager.jsp?msg="+msg);
}
public void doPost(HttpServletRequest request,HttpServletResponse reponse) throws ServletException, IOException {
doGet(request,reponse);
}
/**
* 这个方法是根据自己需要添加的方法
* 发送自定义信号,1表示告诉前台,数据库发生改变了,需要刷新
* @throws IOException
*/
private void sendMessage() throws IOException{
//群发消息
System.out.println("执行群发消息,sendMessage");
for(ManagerServlet item:webSocketSet){
try{
item.session.getBasicRemote().sendText("1");
}catch (IOException e){
e.printStackTrace();;
continue;
}
}
}
/**
* 建立websocket连接时调用
* @param
* @return
*/
@OnOpen
public void onOpen(Session session){
System.out.println("Session:"+session.getId()+"已经建立连接");
this.session=session;
webSocketSet.add(this);//加入到set中
try {
session.getBasicRemote().sendText("Connection Established");
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 接收到客户消息时用
* @param
* @return
*/
@OnMessage
public void onMessage(String message,Session session){
System.out.println("Message from" + session.getId()+":"+message);
}
/**
* 关闭连接时调用
* @param
* @return
*/
@OnClose
public void onClose(Session session){
webSocketSet.remove(this);//从set中删除
System.out.println("session"+session.getId()+"has closed");
}
/**
* 注意:OnError 只能出现一次,其中的参数都是可选的
* @param
* @return
*/
public void onError(Session session,Throwable t){
t.printStackTrace();
}
//向数据库插入一个name
private boolean submit(String name) {
DB db =new DB();
String sql="insert into users(name) values(?)";
try{
PreparedStatement pstmt = db.con.prepareStatement(sql);
pstmt.setString(1,name);
pstmt.executeUpdate();
return true;
}catch(Exception e){
e.printStackTrace();
return false;
}finally {
db.close();
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
WebSocket消息实时推送.zip (30个子文件)
WebSocketTest2
src
main
webapp
WEB-INF
web.xml 641B
user.jsp 3KB
manager.jsp 569B
index.jsp 426B
resources
java
com
zx
utils
DB.java 922B
ws
ManagerServlet.java 4KB
Client.java 1KB
model
UserBean.java 507B
target
generated-sources
annotations
classes
com
zx
utils
DB.class 1KB
ws
ManagerServlet.class 5KB
Client.class 2KB
model
UserBean.class 718B
WebSocketTest
WEB-INF
classes
com
zx
utils
DB.class 1KB
ws
ManagerServlet.class 5KB
Client.class 2KB
model
UserBean.class 718B
lib
mysql-connector-java-6.0.5.jar 1.8MB
javax.servlet-api-3.1.0.jar 94KB
web.xml 642B
user.jsp 3KB
manager.jsp 569B
index.jsp 426B
META-INF
MANIFEST.MF 99B
.idea
misc.xml 640B
compiler.xml 535B
workspace.xml 29KB
dictionaries
Administrator.xml 94B
encodings.xml 172B
pom.xml 3KB
WebSocketTest2.iml 80B
共 30 条
- 1
资源评论
- qianqi32019-01-11挺简单的,入门的可以看看
奈洛先森
- 粉丝: 7
- 资源: 14
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功