DWR第三篇之逆向Ajax升级
1. 本示例在第二篇架构基础上添加代码
2.在client.jsp开头的地方添加如下代码:
本示例需要做的是定向推送,那么就需要浏览器进行登录,从而进行定向的推送功能,为了节省时间,这里不做登录模块了,在url后拼接一个参数作为登录标识。
<%
String id = request.getParameter("id");
session.setAttribute("id", id);
%>
这样,在登录的时候在url后边拼接id=xxx,就可以模拟登录功能,并将登陆信息存在session中。
3. 此外,client.jsp中还要添加如下代码(修改原来的地方)
<script type="text/javascript">
window.onload = function() {
//开启逆向Ajax功能
dwr.engine.setActiveReverseAjax(true);
//开启关闭页面提醒服务器功能
dwr.engine.setNotifyServerOnPageUnload(true);
//对当前用户进行注册
CoreServlet.regist();
}
</script>
4. 修改index.jsp内容:
<%@ page language="java" import="java.util.*" 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>
<base href="<%=basePath%>"> <title>dwr_demo</title>
<script type='text/javascript' src='dwr/engine.js'></script>
<script type='text/javascript' src='dwr/util.js'></script>
<script type='text/javascript' src='dwr/interface/CoreServlet.js'></script>
</head> <body>
<input type="button" value="发送" onclick="sayHello();">
<br>
<input type="text" id="getHello">
<input type="button" value="发送" onclick="getHello();">
<input type="text" id="getHelloValue">
<br>
<input type="text" id="sendMsg">
<input type="button" value="推送" onclick="sendMsg();">
<br>
发送目标:<input type="text" id="target">
发送内容:<input type="text" id="msg">
<input type="button" value="发送" onclick="directionalSendMsg();">
</body>
<script type="text/javascript">
function sayHello() {
CoreServlet.sayHello();
}
function getHello() {
var name = dwr.util.getValue("getHello");
CoreServlet.getHello(name, function(data) {
dwr.util.setValue("getHelloValue", data);
});
}
function sendMsg() {
var msg = dwr.util.getValue("sendMsg");
CoreServlet.send(msg);
}
function directionalSendMsg() {
var target = dwr.util.getValue("target");
var msg = dwr.util.getValue("msg");
CoreServlet.directionalSendMsg(target + ":" + msg);
}
</script>
</html>
5. 在CoreServlet.java里添加两个方法
/**
* 定向推送消息
*/
public void directionalSendMsg(String msg) {
final String[] param = msg.split(":");
Browser.withAllSessionsFiltered(new ScriptSessionFilter() {
@Override
public boolean match(ScriptSession session) {
boolean flag = param[0].equals(session.getAttribute("key"));
return flag;
}
}, new Runnable() {
@Override
public void run() {
Util.setValue("msg", param[1]);
}
});
} /**
* 用户注册
*/
public void regist() {
// 获取当前的scriptSession
ScriptSession scriptSession = WebContextFactory.get().getScriptSession();
// 获取HttpSession 并获得其中的userId
HttpSession session = WebContextFactory.get().getSession();
String id = (String) session.getAttribute("id");
// 对当前scriptSession的key设置指定的值
scriptSession.setAttribute("key", id);
}
6. 开三个窗口进行测试:
http://localhost:8080/dwr_demo/client.jsp?id=zhangsan
http://localhost:8080/dwr_demo/client.jsp?id=lisi
http://localhost:8080/dwr_demo/
DWR第三篇之逆向Ajax升级的更多相关文章
- DWR第二篇之逆向Ajax
1. 本示例在第一篇架构基础上添加代码 2. 首先修改web.xml里dwr的servlet配置: <!-- 配置dwr请求的servlet --> <servlet> < ...
- [转载] Fiddler为所欲为第三篇 封包逆向必备知识[三]
导语: 小A同学:会抓包有什么好学习的,不就用一个工具设置个wifi代{过}{滤}理就OK了嘛,还不是很多做不了.不如学习安卓逆向.didi科学家:不好意思,抓包可以为所欲为. 其实学习抓包,完完全全 ...
- 【DWR系列02】-DWR逆向Ajax即服务器推送
.literal { background-color: #f2f2f2; border: 1px solid #cccccc; padding: 1px 3px 0; white-space: no ...
- Jquery第三篇【AJAX 相关的API】
前言 前面我们已经学了讲解了Jquery的选择器,关于DOM 的API还有事件的API.本博文需要讲解Jquery对AJAX的支持- 我们在开始使用JavaScript学习AJAX的时候,创建异步对象 ...
- 第三篇 SQL Server代理警报和操作员
本篇文章是SQL Server代理系列的第三篇,详细内容请参考原文. 正如这一系列的上一篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行,除了步骤中执行的工 ...
- 第三篇——第二部分——第五文 配置SQL Server镜像——域环境SQL Server镜像日常维护
本文接上面两篇搭建镜像的文章: 第三篇--第二部分--第三文 配置SQL Server镜像--域环境:http://blog.csdn.net/dba_huangzj/article/details/ ...
- 第三篇——第二部分——第一文 SQL Server镜像简介
原文:第三篇--第二部分--第一文 SQL Server镜像简介 原文出处:http://blog.csdn.net/dba_huangzj/article/details/26951563 镜像是什 ...
- JDFS:一款分布式文件管理系统,第三篇(流式云存储)
一 前言 看了一下,距离上一篇博客的发表已经过去了4个月,时间过得好快啊.本篇博客是JDFS系列的第三篇博客,JDFS的目的是为了实现一个分布式的文件管理系统,前两篇实现了基本的上传.下载功能,但是那 ...
- 三篇文章了解 TiDB 技术内幕 —— 谈调度
任何一个复杂的系统,用户感知到的都只是冰山一角,数据库也不例外. 前两篇文章介绍了 TiKV.TiDB 的基本概念以及一些核心功能的实现原理,这两个组件一个负责 KV 存储,一个负责 SQL 引擎,都 ...
随机推荐
- 第四次Scrum编码冲刺!!!!
一.总体任务: 本次冲刺是完成对图书馆管理系统的最后三个功能的实现------管理员对用户授权.用户注销和用户查询 二.个人任务及完成情况: 本人本次的任务是实现对管理员对用户授权部分的界面与部 ...
- 【翻译】Flume 1.8.0 User Guide(用户指南) Channel
翻译自官网flume1.8用户指南,原文地址:Flume 1.8.0 User Guide 篇幅限制,分为以下5篇: [翻译]Flume 1.8.0 User Guide(用户指南) [翻译]Flum ...
- 2019.03.29 NOIP训练 友好国度(点分治+容斥)
传送门 思路: 直接上点分治+容斥计算每个因数对应的贡献即可. 代码: #include<bits/stdc++.h> #define ri register int using name ...
- vi/vim 三种模式的操作
来源:http://www.runoob.com/linux/linux-vim.html ps:刚刚进入vi/vim 是命令模式 一.命令模式 i 切换到输入模式,以输入字符. x 删除当前光标所在 ...
- 数据结构与STL容器
1.静态数组 静态数组就是大小固定不能扩展的数组,如C中普通数组.C++11中array. 2.动态数组 动态数组的空间大小在需要的时候可以进行再分配,其代表为vector.由于数组的特点,在位置0插 ...
- Mimikatz 法国神器
0x00 标准模块 Module : standardFull name : Standard moduleDescription : Basic commands (does not require ...
- pyqt5安装问题
最近装了下pyqt5,遇到了很多坑,要么是模块没找到,要么是各种ddl出错什么的 后来查了一下,总结一下: 1.pyqt5和python的版本一定匹配,尤其是自己去网上下的pyqt一定要注意适配的版本 ...
- jQuery-实现图片轮播
html部分: <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <ti ...
- linux redis 多实例安装
前言: Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表( ...
- HTB Linux queuing discipline manual - user guide笔记
1. Introduction HTB is meant as a more understandable, intuitive and faster replacement for the CBQ ...