博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Dwr java服务器反推技术(服务器推送到页面)
阅读量:2355 次
发布时间:2019-05-10

本文共 3383 字,大约阅读时间需要 11 分钟。

源码及展示

Gitee:

  • 展示

    这里写图片描述

  • 简介

    简略的实现了服务器反向通知到前台页面, 在输入框输入文字,点击发送按钮,消息会被通知到所有在线的用户。

实现

依赖

  • dwr.jar
  • commons-logging-1.0.4.jar
  • jquery-3.2.1.min.js

jar包可以直接在我gitee

目录结构

这里写图片描述

web.xml

DwrTest
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
dwr
org.directwebremoting.servlet.DwrServlet
debug
true
activeReverseAjaxEnabled
true
crossDomainSessoionSecurity
false
allowScriptTagRemoting
true
dwr
/js/dwr/*

dwr.xml

util.DwrPush

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%    // 用于获取项目根目录    String path = request.getContextPath();    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()            + path + "/";%>
Clannad聊天室

    DwrPush.java

    package util;import java.util.ArrayList;import java.util.List;import org.directwebremoting.Container;import org.directwebremoting.ScriptBuffer;import org.directwebremoting.ScriptSession;import org.directwebremoting.ServerContextFactory;import org.directwebremoting.WebContextFactory;import org.directwebremoting.event.ScriptSessionEvent;import org.directwebremoting.event.ScriptSessionListener;import org.directwebremoting.extend.ScriptSessionManager;;/*** * Dwr反向推送类 * @author liaot * @time 2017/12/09 */public class DwrPush {
    // 记录所有在线的ScriptSession private final static List
    SESSIONS = new ArrayList
    (); static { // 得到DWR容器 Container container = ServerContextFactory.get().getContainer(); // 从DWR中得到会话管理器 ScriptSessionManager manager = container.getBean(ScriptSessionManager.class); // 创建一个会话监听器 ScriptSessionListener ssl = new ScriptSessionListener() { @Override public void sessionCreated(ScriptSessionEvent e) { SESSIONS.add(e.getSession()); System.out.println("user login " + SESSIONS.size()); } @Override public void sessionDestroyed(ScriptSessionEvent e) { SESSIONS.remove(e.getSession()); System.out.println("user exit " + SESSIONS.size()); } }; // 给管理器添加监听器 manager.addScriptSessionListener(ssl); } public void push(String msg) { // 得到当前用户的ScriptSession ScriptSession seft = WebContextFactory.get().getScriptSession(); System.out.println(seft); for (ScriptSession session : SESSIONS) { // 创建脚本 缓存 执行指定function 传递msg参数 ScriptBuffer sb = new ScriptBuffer(); //调用 jsp页面上 callback 方法 sb.appendCall("callback", seft.getCreationTime() + " : " + msg); //将脚本添加到回话中 session.addScript(sb); } }}

    参考资料

    • dwr 官网:
    • imooc:
    你可能感兴趣的文章
    iOS的主要框架介绍
    查看>>
    copy
    查看>>
    iPhone-NSAssert使用
    查看>>
    NSAssert用法
    查看>>
    关于 retainCount 的疑问
    查看>>
    xcode快捷键
    查看>>
    关于对时间的处理 (我自己的)
    查看>>
    iPad UIPopoverController弹出窗口的位置和坐标
    查看>>
    通过UIActivityViewController实现更多分享服务
    查看>>
    我的下拉刷新实现步骤
    查看>>
    自定义AlertView实现模态对话框
    查看>>
    抛出异常函数 @throw
    查看>>
    iOS 截屏的总结,AVplayer的截屏,当前屏幕的截屏,截屏后导航栏不见的情况
    查看>>
    定时帧
    查看>>
    我的第一个用OC实现冒泡算法的程序
    查看>>
    一篇文章详解iOS之AutoResizing、AutoLayout、sizeClass来龙去脉
    查看>>
    pod
    查看>>
    ASIHTTPRequest 使用
    查看>>
    ASINetworkQueue 与 NSOperationQueue区别
    查看>>
    GCD介绍(一): 基本概念和Dispatch Queue
    查看>>