最近项目中页面需要对大数量进行计数显示,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异步操作.后台推送从字面上就能看出来这件事的进行是被动的,服务器是将数据推给客户端,客户端接收并处理.本次项目经过后台推送,速度快了很多,界面信息呈现看不到太大延迟,感觉很好.
相关推荐
servlet 服务器端推送给页面,ajax
jsp写的一个简单web聊天。“服务器推送”技术实现。测试工具与环境myeclipse 10+jboss 7+jdk6
一个完整的用ajax反转 server push(服务器主动向页面推送数据)技术实现的web聊天室源码。Demo由java语言开发,由servlet作控制器,完整可运行。
dwr服务器摄推送,
Comet 有时也称反向 Ajax 或服务器端推技术(server-side push)。其思想很简单:将数据直接从服务器推到浏览器,而不必等到浏览器请求数据。听起来简单,但是如果熟悉 Web 应用程序,尤其是 HTTP 协议,那么您就会...
dwr的反转ajax,实现服务器推送数据。
本程序采用comet技术实现,达到信息及时...基本上说可以完成ajax隔多少秒去请求数据的工作。也减轻了服务器一定的压力。大家看了,希望提出宝贵的意见。谢谢……大家下载了,发布后直接浏览SendMessage.htm页面即可。
插件能根据熊掌号的要求完成页面的结构化改造。 插件能提交推送优质内容到百度。...1,熊掌号推送原创数据之后,新增内容将享受24小时内抓取校验、快速展现优待。 2,享受有抓取优待以及建库保护,结构化数据的优待。
在做公司OA时遇到了服务器向客户端发信息的屏障,后来百度搜了下,发现了DWR反转可以实现。这是自己做的一个小东西,大家可以下载看看!共同学习!呵呵!
今天小编就为大家分享一篇Django结合ajax进行页面实时更新的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
下载远程文件,ajax php 应用 推送
create_ajax(); state当前状态值判断前台执行顺序 利用ajax请求发送数据执行要求
热度分析和自媒体推送网站-热度分析和自媒体推送网站源码-热度分析和自媒体推送网站java代码-热度分析和自媒体推送项目-热度分析和自媒体推送项目代码-热度分析和自媒体推送系统-热度分析和自媒体推送系统源码-热度...
智能热度分析和自媒体推送-智能热度分析和自媒体推送平台-智能热度分析和自媒体推送平台源码-智能热度分析和自媒体推送平台java代码-智能热度分析和自媒体推送平台设计与实现-基于springboot的智能热度分析和自媒体...
热度分析和自媒体推送网站-热度分析和自媒体推送网站源码-热度分析和自媒体推送网站java代码-热度分析和自媒体推送项目-热度分析和自媒体推送项目代码-热度分析和自媒体推送系统-热度分析和自媒体推送系统源码-热度...
智能热度分析和自媒体推送-智能热度分析和自媒体推送平台-智能热度分析和自媒体推送平台源码-智能热度分析和自媒体推送平台java代码-智能热度分析和自媒体推送平台设计与实现-基于springboot的智能热度分析和自媒体...
通过ajax方式从后台获取验证码,并且通过ajax方式进行后台验证,提高验证码的安全性。
包括Ajax与JavaWeb的后台交互传输数据。gson数据传输。