WEB消息提醒实现之二 实现方式-基于Iframe的流方式
来源:互联网 发布:查询域名的二级域名 编辑:程序博客网 时间:2024/05/21 05:05
基于Iframe的流方式
原理
基于Iframe的流方式的原理主要是,在页面隐藏一个iframe,前台设定定时器修改iframe的src属性设为对一个长连接的请求,服务器返回对页面函数的调用,函数的参数为服务器处理的数据。
Iframe的流方式的过程如下图:
上节提到的 AJAX 方案是在 JavaScript 里处理 XMLHttpRequest 从服务器取回的数据,然后 Javascript 可以很方便的去控制 HTML 页面的显示。同样的思路用在 iframe 方案的客户端,iframe 服务器端并不返回直接显示在页面的数据,而是返回对客户端 Javascript 函数的调用,如“”。服务器端将返回的数据作为客户端 JavaScript 函数的参数传递;客户端浏览器的 Javascript 引擎在收到服务器返回的 JavaScript 调用时就会去执行代码。
实例:
后台主要是获取需要显示的数据,传给返回前台调用的函数即可,下面是iframe流方式后台代码
/** * iframe 实现服务器推 * @author 马艺俊 * */public class IframeCometServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("utf-8"); PrintWriter pw = resp.getWriter(); MessageDao msgDao = new MessageDao(); int num = msgDao.getMsgNum(); //返回对前台函数的调用,并将数据传入函数 pw.println("<script>parent.changeNumber("+num+")</script>"); pw.flush(); }}
前台主要是隐藏一个iframe,定时刷新iframe,响应的时候调用后台写入的在页面定义好的函数刷新信息
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServ erPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--><script type="text/javascript" src="jquery-easyui-v1.4.4/jquery.min.js"></script><script type="text/javascript"> $(function(){ setInterval(function(){ //定时刷新iframe $("#polling").attr("src","IframeCometServlet"); },5000);});//定义一个js函数,由服务断写到iframe里的js调用,但是这时,chrome标签上的圆圈一直在转 function changeNumber(num) { document.getElementById("number").innerHTML = num; } </script> </head> <body><h1>test comet</h1> <br> 您有<span id="number">0</span>条消息! <iframe id="polling" name="polling" src="IframeCometServlet" style="display:none;"></if rame> </body></html>
测试
部署应用,访问http://localhost:8088/IframeCometDemo/iframeCometPage.jsp
可以看到数据返回来了,同样写入数据后,页面的信息也会实时更新
但是有一点不好的就是iframe流方式每次发送请求的时候,chrome地址栏上的加载图标都会转圈,但是ie正常,暂时还没找到解决方案。
0 0
- WEB消息提醒实现之二 实现方式-基于Iframe的流方式
- WEB消息提醒实现之二 实现方式-websocket实现方式
- WEB消息提醒实现之二 实现方式-Jquery Ajax轮询
- WEB消息提醒实现之二 实现方式-Jquery Ajax长轮询
- Web提醒服务的四种实现方式比较
- 基于jquery的web组件实现方式
- web方式的订单提醒
- 分布式Java应用之基于消息方式实现系统间的通信(2)
- 消息函数的实现方式
- Viewbadger消息提醒的实现
- 消息提醒小红点的实现
- 分布式锁实现方式二 基于Redis的分布式锁
- WEB消息提醒实现之一 背景
- 实现线程的方式二
- AOP切面之实现计算器加减乘除--基于注解的方式
- 基于boost 线程并行技术实现消息队列方式
- java分布式,基于开源框架实现消息方式
- 基于boost 线程并行技术实现消息队列方式[记录]
- 最大匹配_完美匹配——概念
- ServletContext学习笔记---------从今天开始养成写笔记总结的好习惯!
- PHP中new static的使用方式示例
- 物联网究竟为何物?关键技术有哪些?
- 对某个字段相同的值根据另一个字段排序(Oracle数据库)
- WEB消息提醒实现之二 实现方式-基于Iframe的流方式
- 《情感机器》-读书笔记(2)
- NYOJ--86--set.find()--找球号(一)
- 简单的css动画下拉菜单
- SDNU 1061.采药3 二维费用背包
- Android自定义View实现手写签名的功能
- C++小结(一)
- 动态规划在概率论中的应用:产生N种不同结果的概率之间的联系
- 计算缓存