`
2277259257
  • 浏览: 515360 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

AJAX反转之后台推送

    博客分类:
  • Ajax
 
阅读更多

 最近项目中页面需要对大数量进行计数显示,sql执行过程就很慢,界面用户体验不好,所以采用了Ajax反转技术来实现后台动态推送.这样就可以将要显示的信息分批进行显示,一部分一部分往界面传送.让界面在短时间内有东西可以显示给用户,不至于让用户面对大白板.

        反转AJAX:服务流应用到AJAX,就是所谓的反转AJAX 或者COMET 。它使得服务器在某事件发生时可以发送消息给客户端,而不需要客户端显式的请求。目标在于达到状态变化的实时更新。COMET使用了HTTP/1.1中的持续连接的特性。通过HTTP/1.1,除非另作说明,服务器和浏览器之间的TCP连接会一直保持连接状态,直到其中一方发送了一条明显的“关闭连接”的消息,或者有超时以及网络错误发生。

        看具体使用方法.

        首先需要配置web.xml,让服务器知道Ajax反转的存在

 

 <!-- 1、piggyback方式  
           这是默认的方式。  
           如果后台有什么内容需要推送到前台,是要等到那个页面进行下一次ajax请求的时候,将需要推送的内容附加在该次请求之后,传回到页面。  
           只有等到下次请求页面主动发起了,中间的变化内容才传递回页面。  
      2、comet方式  
           当服务端建立和浏览器的连接,将页面内容发送到浏览器之后,对应的连接并不关闭,只是暂时挂起。如果后面有什么新的内容需要推送到客户端的时候直接通过前面挂起的连接再次传送数据。  
           服务器所能提供的连接数目是一定的,在大量的挂起的连接没有关闭的情况下,可能造成新的连接请求不能接入,从而影响到服务质量。  
      3、polling方式  
           由浏览器定时向服务端发送ajax请求,询问后台是否有什么内容需要推送,有的话就会由服务端返回推送内容。这种方式和我们直接在页面通过定时器发送ajax请求,然后查询后台是否有变化内容的实现是类似的。只不过用了dwr之后这部分工作由框架帮我们完成了。  
   -->  
    <servlet>  
        <servlet-name>dwr-invoker</servlet-name>  
        <servlet-class>  
            org.directwebremoting.servlet.DwrServlet  
        </servlet-class>  
        <init-param>  
            <param-name>debug</param-name>  
            <param-value>true</param-value>  
        </init-param>  
          
        <!-- DWR默认采用piggyback方式 -->    
        <!-- 使用polling和comet的方式 -->    
        <init-param>    
            <param-name>pollAndCometEnabled</param-name>    
            <param-value>true</param-value>    
        </init-param>    
             
        <!-- comet方式 -->    
        <!--      
        <init-param>    
            <param-name>activeReverseAjaxEnabled</param-name>    
            <param-value>true</param-value>    
        </init-param>    
         -->    
              
        <!-- polling方式:在comet方式的基础之上,再配置以下参数 -->    
        <!--      
        <init-param>    
            <param-name>org.directwebremoting.extend.ServerLoadMonitor</param-name>    
            <param-value>org.directwebremoting.impl.PollingServerLoadMonitor</param-value>    
        </init-param>    
         -->   
        
        <init-param>  
            <param-name>crossDomainSessionSecurity</param-name>  
            <param-value>false</param-value>  
        </init-param>  
          
        <load-on-startup>1</load-on-startup>  
    </servlet>  
    <servlet-mapping>  
        <servlet-name>dwr-invoker</servlet-name>  
        <url-pattern>/dwr/*</url-pattern>  
    </servlet-mapping>  
      
    


  然后dwr.xml中的配置:

 

 

<?xml version="1.0" encoding="UTF-8"?>   
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" " http://www.getahead.ltd.uk/dwr/dwr10.dtd ">  
<dwr>  
    <allow>  
        <convert match="java.lang.Exception" converter="exception">  
          <param name='include' value='message'/>  
        </convert>   
        <convert match="java.lang.StackTraceElement" converter="bean"/>  
          
        <create creator="new" javascript="dwrPush" >  
            <param name="class" value="com.adtech.dwr.DwrPush" />  
            <include method="sendMessage"/>  
        </create>       
          
        <convert match="com.adtech.domain.Monitor" converter="bean" />  
    </allow>  
  
</dwr>  

        

 

后台Java代码:

 public void myTest() throws Exception {
        String strResult="";
        for (int i = 1; i <= 5; i++) {
            strResult="这是第"+i+"句话";  
           // 一个循环处理完后推送回界面 
             ScriptBuffer scriptBuffer = new ScriptBuffer(); 
           // 推送回界面,调用客户端javascript function                                    
           scriptBuffer.appendScript("clientFun(").appendData(strResult).appendScript(");"); 
           ServerContext sctx = ServerContextFactory.get(wctx .getServletContext()); 
           Collection<ScriptSession> scriptSessions = sctx.getScriptSessionsByPage(wctx.getCurrentPage()); 
           for (ScriptSession session : scriptSessions) {
              session.addScript(scriptBuffer);
           } 
       }
 }
 

js界面部分代码:

 

 

//在js里需要有个初始方法,来调用Java里的方法
init:function(){
  DWREngine.setAsync(true);
  //调用action里方法,完成动态推送
  Test.myTest(function(_data) {	 
  });
  DWREngine.setAsync(false);
} 
//调用了Java方法后,Java方法在执行代码过程中会回调到js里的clientFun方法.
//推送回调的方法
 clientFun = function (_data){
  //在这个方法里js界面可以根据需求来完成想做的事,将返回的部分显示先展示出来
 loadData(_data);
};

        Ajax反转,所谓反转还是跟回调同样的思想,前台方法的调用是由服务器发起的,不需要客户端进行调用.使用Ajax异步操作.后台推送从字面上就能看出来这件事的进行是被动的,服务器是将数据推给客户端,客户端接收并处理.本次项目经过后台推送,速度快了很多,界面信息呈现看不到太大延迟,感觉很好.

分享到:
评论

相关推荐

    dwr反转AJAX聊天源码

    标签中的“dwr”是指DWR库,“反转”是指DWR提供的服务器推送机制,“AJAX”是指这种技术的基础,“源码”意味着我们可以看到整个项目的完整代码,“聊天”则是这个应用的实际应用场景。 在“chat.war”文件中,...

    一个完整的用ajax反转 server push(服务器主动向页面推送数据)技术实现的web聊天室源码

    本项目是一个利用Ajax反向推送(Comet技术)实现的Web聊天室源码,通过Java语言的Servlet作为控制器,提供了一个完整的可运行示例。 首先,我们要理解什么是Ajax反向推送(Comet技术)。传统的Ajax请求是客户端发起...

    转载的AJAX反转资料

    【标题】:“转载的AJAX反转资料”指出,这是一份关于AJAX技术的独特视角或非传统应用的教程。AJAX(Asynchronous JavaScript and XML)是Web开发中一种用于创建快速交互式网页的技术,它允许在不刷新整个页面的情况...

    Dwr 推例子 反转 ajax dwr dwr推群聊 dwr聊天系统源码 聊天系统 广播系统

    通过DWR的Push技术,服务器可以主动向客户端推送消息,而不仅仅是响应客户端的请求。这种模式在群聊系统中特别有用,因为它可以让所有在线用户实时接收到新消息,无需频繁轮询服务器。 **3. 流技术** 在聊天系统中...

    dwr推技术实现服务器推送数据

    DWR的独特之处在于它的“反转Ajax”(Reverse Ajax)概念,即服务器可以主动向客户端推送数据,而不仅仅是响应客户端的请求。这在股票实时显示等需要即时更新信息的应用场景中非常有用。 在"股票实时显示"的应用...

    dwr推技术反转聊天事例

    这种机制称为反向Ajax或Comet技术,能够实现数据的推送,即服务器主动将数据推送给客户端,而不是等待客户端请求。在聊天应用中,这种功能尤为重要,因为它确保了消息的即时传递。 1. **DWR配置**:在开始之前,...

    jquery与php结合实现AJAX长轮询(LongPoll)

    若要实现聊天室、WEBQQ、在线客服、邮箱等这些即时通讯的应用,就要用到“ 服务器推送技术(Comet)”。 传统的AJAX轮询方式,客服端以用户定义的时间间隔去服务器上查询最新的数据。种这种拉取数据的方式需要很短的...

    dwr推技术官方实例

    - **安全性和优化**:考虑如何防止跨站脚本攻击(XSS)和跨站请求伪造(CSRF),以及如何优化推送性能,如批量推送、缓冲机制等。 通过这个实例,你可以亲手实践DWR的推技术,加深对其实现原理的理解,并能灵活运用...

    dwr3.x demo 实例 例子

    这极大地简化了Ajax的使用,并增强了用户体验,因为服务器可以主动推送数据到客户端。 2. **轮询(Polling)**:在实时性要求较高的应用中,DWR支持定时轮询机制,即客户端定期向服务器发送请求,获取最新的数据。...

    java+dwr框架实现聊天室

    dwr 框架实现了服务器推技术,使得服务器可以实时推送数据到客户端,实现了实时通信的功能。 七、结论 Java+dwr 框架实现聊天室是使用Java语言和dwr框架实现的服务器推技术,实现了实时通信的聊天室功能。该技术的...

    在Asp.net下实现变长连接的web即时应用的实现范例及ReverseAjax的演示介绍

    这种技术的核心思想是反转AJAX的通信模式,由服务器主动向客户端推送数据,而不是传统的客户端请求、服务器响应的方式。这使得Web应用能够实现类似桌面应用的即时反馈效果,比如实时聊天室、股票更新、在线游戏等...

    dwr小项目及资料

    同时,DWR还支持服务器端反向调用,即服务器可以主动触发前端的JavaScript函数,这对于实时更新、推送通知等场景非常有用。 在提供的压缩包文件列表中: 1. **Spring与DWR集成.doc** - 这可能是一个文档,详细介绍...

    dwr comet 使用示例,使用spring作为后台的管理容器

    Comet是Web应用程序中实现服务器向客户端推送数据的一种技术,通常用于构建实时更新的Web应用。在这个示例中,我们将探讨如何结合DWR 3.0和Spring 2.5框架来实现Comet交互。** **1. DWR(Direct Web Remoting)** ...

    spring与dwr整合(简单)

    Spring 和 Direct Web Remoting (DWR) 的整合是将 Spring 框架的依赖注入和控制反转特性与 DWR 的动态 Web 接口相结合,从而实现客户端 JavaScript 和服务器端 Java 代码之间的无缝交互。这种整合使得开发人员可以...

    基于Android手机的好友定位系统的探究与实现

    HTTP流和反转AJAX允许服务器主动推送信息,提高实时性;长时间轮询则兼顾服务器推送和客户端拉取,适用于特定场景。 2. **Android广播机制**:在Android系统中,BroadcastReceiver是实现组件间通信的重要手段。在...

    DWR示例与spring集成

    这种模式下,服务器可以主动向客户端推送数据,而不仅是响应客户端的请求,提高了交互的实时性。 **DWR与Spring集成**: 1. **配置Spring**:在Spring的配置文件中,我们需要定义DWR的相关bean,如`DWRConfigurer`...

    java聊天室技术分析

    这种方式被称为“反转AJAX”或“Comet”。 #### 五、案例分析 以一个简单的聊天室应用为例,我们可以看到DWR如何帮助实现实时通信: - **用户登录**:用户登录后,客户端通过DWR调用服务器端的一个Java方法进行...

    dwr实例,JavaScript调用java方法的小例子

    10. **实时更新(Remote Update)**:DWR的实时更新功能允许服务器主动推送数据到客户端,而无需客户端发起请求,这在实现实时应用时非常有用。 通过"TestDwr"中的示例,你可以看到如何配置DWR,创建可调用的Java服务...

    基于SSM架构的新闻管理系统设计与实现论文

    这可能涉及到后台的自动化任务调度,例如定时从新闻源抓取并处理新的信息,然后推送到用户面前。同时,为了提升用户体验,系统还可能需要提供个性化推荐功能,基于用户的浏览历史和偏好,推荐他们可能感兴趣的新闻。...

    基于springboot的宠物领养系统.zip

    - **消息通知**:系统消息推送,如申请状态更新。 6. **前端技术**: - **HTML/CSS/JavaScript**:构建用户界面,提供交互体验。 - **Bootstrap**:快速构建响应式布局的前端框架。 - **Ajax**:异步数据交换,...

Global site tag (gtag.js) - Google Analytics