`
coach
  • 浏览: 388979 次
  • 性别: Icon_minigender_2
  • 来自: 印度
社区版块
存档分类
最新评论

基于iframe的HTTP长连接实现

    博客分类:
  • http
阅读更多
关于什么是http长连接我不废吐沫了,有专业的解释(http://www.ibm.com/developerworks/cn/web/wa-lo-comet/)你可以去看看
我们介绍一下在struts下的实现
首先写一个test.jsp(写一些片段)

<html:form action="/myAction" target="myiframe">  
    <%-- 这里写你的页面代码 --%>      
    <center><input type="button" value="测试提交" class="btn4" onClick="javascript:test();"></center>  
</html:form>  
<iframe name="myiframe" id="myiframe" style="display: none" mce_style="display: none"></iframe>  
<mce:script language="JavaScript"><!--   
function orderGen(){   
    document.MyForm.action.value = 'test';   
    document.MyForm.submit();   
}   
function msg(m){   
    alert(m);   
}   
// --></mce:script> 


特别注意‘<html:form action="/myAction" target="myiframe">’中的target属性的值一定要等于form结尾那个iframe的名称(即name属性),这是该实现方式的原理所在,就是说这个MyForm提交服务器后由服务器响应回来的数据填充到这个iframe里面,而这个iframe是不可见的(display: none)。从而实现了提交后页面没有刷新的感觉。
接下来是服务器端的实现

public class MyAction extends DispatchAction{   
    public ActionForward test(ActionMapping mapping, ActionForm actionForm,   
                                  HttpServletRequest request, HttpServletResponse response)   
            throws Exception {   
    String result = "hello I'm server";//要打印到前台的字符   
        sendMsg(result,response,"msg");//msg是test.jsp中的那个js方法的名称   
        return null;//必须返回null   
    }   
    //以下方法的意思是将msg打到前台页面调用前台的“function msg(m)”方法进行显示   
    protected void sendMsg(String msg, HttpServletResponse response, String javascriptMethod) {   
        try {   
            response.setContentType("text/html;charset=GBK");   
            response.getWriter().write(   
                    "<mce:script type="text/javascript"><!--   
parent." + javascriptMethod + "(\"" + msg + "\");   
// --></mce:script>");   
            response.flushBuffer();   
        } catch (Exception e) {   
            e.printStackTrace();   
        }   
    }   
} 

sendMsg这个java生成了一段js代码将服务端的数据展示在了页面,页面会打出一个alert,如果你明白了这个原理那么你可以改写sendMsg和function msg(m),你可以将数据填到一个div中,这个效果就好像ajax一样页面连闪都不闪一下。
接下来实现长连接

public class MyAction extends DispatchAction{   
    public ActionForward test(ActionMapping mapping, ActionForm actionForm,   
                                  HttpServletRequest request, HttpServletResponse response)   
            throws Exception {   
    int i = 0;   
    boolean boo = true;   
    String result = null;   
    while(boo){   
        try {   
                Thread.sleep(1000);   
            } catch (InterruptedException e) {   
                e.printStackTrace();     
            }   
        result = "hello I'm server"+i;//要打印到前台的字符   
        sendMsg(result,response,"msg");//msg是test.jsp中的那个js方法的名称   
        i++;   
        if(i==100){   
            boo = false;   
        }   
    }   
        return null;   
    }   
    //以下方法的意思是将msg打到前台页面调用前台的“function msg(m)”方法进行显示   
    protected void sendMsg(String msg, HttpServletResponse response, String javascriptMethod) {   
        try {   
            response.setContentType("text/html;charset=GBK");   
            response.getWriter().write(   
                    "<mce:script type="text/javascript"><!--   
parent." + javascriptMethod + "(\"" + msg + "\");   
// --></mce:script>");   
            response.flushBuffer();   
        } catch (Exception e) {   
            e.printStackTrace();   
        }   
    }   
}  


不停的做循环操作以求达到长连接,前台会不停的打alert出来,这样做实现了服务器端向客户端推数据,同时服务器端的状态可以实时反映到前台,如果在你的项目中客户点击按钮后服务器将执行大量的长时间的操作的时候而客户又要实时监控操作的情况的时候不妨使用这种方式提升用户体验。随便说一句IE支持这种玩法firefox等浏览器也支持



分享到:
评论
2 楼 cwqcwqmax9 2013-11-29  
写的不对 ,要while 循环来留住respone.
1 楼 wxwyes 2013-08-06  
瞎扯,根本就不行!

相关推荐

    Comet:基于 HTTP 长连接的“服务器推”技术 (实例)

    Comet技术是提升Web应用实时性的有效手段,通过HTTP长连接实现了服务器向客户端的主动推送。Ajax Chat是一个实际的应用示例,展示了如何利用这种技术实现聊天功能。了解并掌握Comet技术及其应用,对于开发高效、实时...

    Comet:基于_HTTP_长连接的“服务器推”技术

    - **Comet**:基于HTTP长连接实现服务器向客户端的数据推送。这是本篇文章的重点。 #### Comet详解 Comet技术的核心是使用HTTP长连接,即客户端与服务器之间维持一个持久的连接状态,服务器可以随时通过这个连接...

    Comet:基于HTTP长连接的“服务器推”技术[收集].pdf

    为了解决这个问题,一种名为Comet的技术应运而生,它利用HTTP长连接实现了无须客户端频繁刷新或请求的双向通信。 Comet技术主要分为两类:一类需要在浏览器端安装插件,如基于套接口或RMI、CORBA的方案;另一类则是...

    asp.net 长连接(聊天室例子)

    1. **HTTP长连接**:HTTP 1.1默认支持长连接,通过设置`Connection: keep-alive`头部来维持连接。在ASP.NET中,可以使用`System.Net.HttpWebRequest`或`HttpClient`类来创建长连接。 2. ** comet 技术**:Comet是...

    comet-iframe.rar

    Comet技术是一种基于HTTP长连接的实时Web通信技术,它能够实现服务器向客户端推送数据,而无需客户端频繁发起请求。在传统的HTTP交互模式中,客户端需要不断地轮询服务器以获取新数据,这种方式效率低且浪费资源。...

    基于HTTP长连接的&quot;服务器推&quot;技术的php 简易聊天室

    首先,我们可以从标题中得知,本篇文档主要介绍了一种基于HTTP长连接技术实现的服务器推送功能的简易聊天室。服务器推送(Server Push)是Web开发中一种常见的技术,它允许服务器主动向客户端发送数据,而不需要...

    基于comet服务器推技术思路的Pushlet技术实现1

    总结起来,基于Comet的Pushlet技术通过长轮询和流方式实现了高效的服务器向客户端的数据推送,有效地解决了Web实时通信的问题,尤其适用于需要实时交互的场景。无论是长轮询还是流方式,都利用了HTTP连接的持久性,...

    论文研究-一个基于push技术的web实时网络管理框架 .pdf

    基于AJAX的长轮询机制是Push机制的一种实现方式,它在客户端发出请求后,服务器端会保持这个连接打开直到有数据更新或者超时返回响应。客户端的JavaScript响应处理函数随后会处理这些信息,并在必要时发起新的请求,...

    .net html Iframe框架考勤系统源代码

    布局基于HTML Iframe框架制作 网站美观 可实现基本考勤功能 查询记录 按条件查询记录 考勤记录 考勤管理 导出EXCEL等等 代码简单易懂 修改方便 适合低中级程序员进行学习 有能力的可继续扩展 网站主要以学校考勤为...

    基于PHP的飞天素材网后台管理框架模板v2.2iframe版源码.zip

    【标题】中的“基于PHP的飞天素材网后台管理框架模板v2.2iframe版源码”表明这是一个使用PHP编程语言开发的网站后台管理系统,它采用了一种名为“飞天素材网”的框架模板,并且是版本2.2的iframe版本。在Web开发中,...

    AspNetComet.zip

    ASP.NET 提供了多种实现 Comet 技术的方法,包括使用 HTTP Streaming、HTTP Chunked Transfer Encoding 和 iframe 等。这些方法都是为了能够在不关闭连接的情况下,持续地从服务器向客户端传递数据。 文件 ...

    基于AJAX(XMLHTTPRequest)的服务器推送框架.zip

    【标题】"基于AJAX(XMLHTTPRequest)的服务器推送框架.zip" 涉及的主要知识点是AJAX(异步JavaScript和XML)技术以及XMLHttpRequest对象在实现服务器推送中的应用。AJAX是一种网页开发技术,它允许网页在不刷新整个...

    flex iFarme的test输入连接

    "flex iFrame的test输入连接"这个标题揭示了我们正在讨论的是如何在Flex应用中使用iFrame来实现远程访问,并通过URL的方式进行页面调转。下面将详细介绍Flex中的iFrame使用及其相关知识点。 Flex是Adobe开发的一个...

    MVC双通道协议实现服务器推.rar

    SignalR支持多种传输方式,包括WebSocket、Server-Sent Events、Forever Frame(IFrame长时间连接)以及Long Polling,这些机制都是实现服务器推的关键技术。在SignalR中,服务器和客户端之间的通信可以通过Hub协议...

    服务器推送Pushlet技术

    - **基于iframe及htmlfile的流方式**:通过创建一个不可见的iframe或使用htmlfile对象,维持与服务器的持久连接,服务器可以通过这个持久连接向客户端推送数据。 #### 五、Comet 应用注意事项 1. **跨域限制**:...

    使用nodejs搭建最简单的comet原型参考.pdf

    Comet是一种基于HTTP长连接的服务器推送技术,旨在提供实时的Web应用程序交互。它与AJAX类似,但不同之处在于,AJAX通常依赖于短连接和异步请求,而Comet则保持一个开放的HTTP连接,允许服务器主动向客户端推送数据...

    asp.net comet例子

    在实际应用中,实现Comet技术通常有几种方法,如HTTP流、HTTP长轮询、WebSocket等。HTTP流和长轮询是早期的Comet技术,它们通过长时间保持HTTP连接来实现服务器到客户端的推送。WebSocket是HTML5引入的一种新协议,...

    基于Comet属性同步的Java Web实时进度条研究.pdf

    隐蒇帧是一种使用HTML内联标签IFRAME的动态Web技术,通过在HTML页面里嵌入一个隐蒇帧IFRAME,并将其SRC属性设置为一个长连接的请求页面,服务器端就可以源源不断地往客户端“推”送数据。 在该方案中,Java的反射...

    Asp做好的iframe仿google提示源码

    这个应用可能通过一个IFrame(内联框架)来实现,IFrame允许在同一个网页中嵌入另一个HTML文档,从而在用户输入关键词时提供实时搜索建议。 ASP是一种微软开发的服务器端脚本环境,用于生成动态交互式网页。在本例...

Global site tag (gtag.js) - Google Analytics