- 浏览: 582903 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (174)
- JBPM (3)
- WWF (0)
- JavaScript (11)
- J2EE (40)
- OperationSystem (11)
- 数据库 (12)
- CSS (1)
- Ajax (2)
- J2SE (30)
- Tools (10)
- 服务器中间件 (3)
- 异常 (0)
- Flex (5)
- jQuery (11)
- html (9)
- Ejb (1)
- HTML5 Shiv–让该死的IE系列支持HTML5吧 (1)
- Spring (9)
- Quartz (3)
- log4j (1)
- maven (1)
- cpdetector (1)
- JSON (1)
- log4jdbc (1)
- asm (8)
- FusionCharts (1)
- jqplot (1)
- highcharts (1)
- excanvas (1)
- html5 (1)
- jpcap介绍 (1)
- weblogic (3)
- URLURLClassLoader (0)
- URLClassLoader (1)
- ant (2)
- ivy (2)
- nexus (1)
- IT (0)
- LoadRunner (1)
- SCSS (1)
- ruby (1)
- webstorm (1)
- typescript (1)
- Jboss7 (1)
- wildfly (1)
- oracle (5)
- esb (0)
- dubbo (2)
- zookeeper (3)
- eclipse (1)
- Android (2)
- Studio (1)
- Google (1)
- 微信 (1)
- 企业号 (1)
- Linux (13)
- Oracle12c (1)
- Hadoop (1)
- InletexEMC (1)
- Windows (1)
- Netty (3)
- Marshalling (2)
- Protobuf (1)
- gcc (1)
- Git (1)
- GitLab (1)
- shell (2)
- java (3)
- Spring4 (1)
- hibernate4 (1)
- postgresql (1)
- ApacheServer (2)
- Tomcat (2)
- ApacheHttpServer (2)
- realvnc (1)
- redhat (7)
- vncviewer (1)
- LVS (4)
- LVS-DR (1)
- RedHat6.5 (5)
- LVS-NAT (1)
- LVS-IPTUNNEL (2)
- LVS-TUN (1)
- keepalived (2)
- yum (1)
- iso (1)
- VMware (1)
- redhat5 (1)
- ha (1)
- nginx (2)
- proguard (1)
- Mat (1)
- DTFJ (1)
- axis2 (1)
- web service (1)
- centos (1)
- random (1)
- urandom (1)
- apache (1)
- IBM (1)
- cve (1)
- 漏洞 (1)
- JDBC (1)
- DataSource (1)
- jdk (1)
- tuxedo (2)
- wtc (1)
最新评论
-
skying007:
好资料,谢谢分享给啊
FusionCharts在服务器端导出图片(J2EE版) -
cgnnzg:
大神好 可以发一份源码给我学习么 多谢了 978241085 ...
springmvc+dubbo+zookeeper -
jifengjianhao:
求源码:854606899@qq.com
springmvc+dubbo+zookeeper -
wdloyeu:
shihuan8@163.com邮箱网盘在哪,没找到。能给份源 ...
Java Socket长连接示例代码 -
huangshangyuanji:
求代码:45613032@qq.com
springmvc+dubbo+zookeeper
附件里Pushlet和Dwr3.0的简单服务器推技术。
DWR-Source.rar为DWR的学习资料。
下面简单介绍一下dwr3.0 RC2版本的反推技术代码。
首先下载dwr官方包,笔者这里下载的是dwr3.0 RC2开发包。
把dwr.jar和engine.js等相关文件放入web工程里。
首先在web.xml文件的同级目录建立dwr.xml文件,其内容如下:
在web.xml文件中要加入如下代码:
StocksPusher.java代码如下:
StockPriceTracer.java代码如下:
StocksPusher.jsp代码如下:
StocksPusher.js代码如下:
DWR-Source.rar为DWR的学习资料。
下面简单介绍一下dwr3.0 RC2版本的反推技术代码。
首先下载dwr官方包,笔者这里下载的是dwr3.0 RC2开发包。
把dwr.jar和engine.js等相关文件放入web工程里。
首先在web.xml文件的同级目录建立dwr.xml文件,其内容如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "http://getahead.org/dwr/dwr30.dtd"> <dwr> <allow> <!-- stockpusher --> <create creator="new" scope="application" javascript="StocksPusher"> <param name="class" value="com.shihuan.dragonkeeper.server.reverseajax.stockspusher.StocksPusher"/> </create> </allow> </dwr>
在web.xml文件中要加入如下代码:
<listener> <listener-class>org.directwebremoting.servlet.DwrListener</listener-class> </listener> <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> <init-param> <param-name>accessLogLevel</param-name> <param-value>runtimeexception</param-value> </init-param> <init-param> <param-name>activeReverseAjaxEnabled</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>initApplicationScopeCreatorsAtStartup</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>jsonRpcEnabled</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>jsonpEnabled</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>preferDataUrlSchema</param-name> <param-value>false</param-value> </init-param> //下面这句要看你的web工程中是否有优先于dwr启动的文件 <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dwr-invoker</servlet-name> //下面的resources目录的意思是笔者dwr的引擎文件是放在WebRoot/resources/dwr目录下面的(engine.js) <url-pattern>/resources/dwr/*</url-pattern> </servlet-mapping>
StocksPusher.java代码如下:
import java.io.IOException; import java.sql.Connection; import java.sql.SQLException; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.dbutils.DbUtils; import org.apache.commons.dbutils.QueryRunner; import org.directwebremoting.Browser; import org.directwebremoting.ScriptSessions; import org.directwebremoting.impl.DaemonThreadFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.alibaba.fastjson.JSON; import com.shihuan.dragonkeeper.common.dto.DataSourceInfo; import com.shihuan.dragonkeeper.common.utils.DataSourceMapUtil; import com.shihuan.dragonkeeper.common.utils.PropertiesUtil; import com.shihuan.dragonkeeper.global.ConfigFile; import com.shihuan.dragonkeeper.server.bean.StocksBean; public class StocksPusher implements Runnable { protected static Logger logger = LoggerFactory.getLogger(StocksPusher.class); private static String jdbc_CONFIG = ConfigFile.JDBC_CONFIG + ConfigFile.SUFFIX_NAME; private static boolean closeMarket = false; public StocksPusher() { ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1, new DaemonThreadFactory()); executor.scheduleAtFixedRate(this, 1L, 50L, TimeUnit.MILLISECONDS); } @Override public void run() { if (!closeMarket) { StocksBean stock = StockPriceTracer.getNextStockInfo(); //获取后台数据 // setMessageToPage(stock.getStock(), stock.getValue()); //非JSON版本 insertDbData(stock); setJsonMessageToPage(JSON.toJSON(stock)); } } public void setJsonMessageToPage(final Object json){ Browser.withAllSessions(new Runnable() { public void run() { ScriptSessions.addFunctionCall("showJsonMessage", json); } }); } public void setMessageToPage(final String key, final String message){ Browser.withAllSessions(new Runnable() { public void run() { ScriptSessions.addFunctionCall("showMessage", key, message); } }); } public void insertDbData(final StocksBean data){ Thread t = new Thread(new Runnable() { @Override public void run() { String sql = "insert into stocks(stock,value) values (?,?)"; QueryRunner queryRunner = new QueryRunner(true); Connection conn = null; DataSourceInfo dsObj = new DataSourceInfo(); try { dsObj.setDriverClass(PropertiesUtil.getPropertiesValue(jdbc_CONFIG, "mysql.driverclass")); dsObj.setJdbcUrl(PropertiesUtil.getPropertiesValue(jdbc_CONFIG, "mysql.jdbcurl")); dsObj.setUser(PropertiesUtil.getPropertiesValue(jdbc_CONFIG, "mysql.user")); dsObj.setPassword(PropertiesUtil.getPropertiesValue(jdbc_CONFIG, "mysql.password")); conn = DataSourceMapUtil.getConnection(dsObj); queryRunner.update(conn, sql, data.getStock(), data.getValue()); DbUtils.commitAndCloseQuietly(conn); } catch (ConfigurationException e) { DbUtils.rollbackAndCloseQuietly(conn); logger.error(e.getMessage(), e); e.printStackTrace(); } catch (SQLException e) { DbUtils.rollbackAndCloseQuietly(conn); logger.error(e.getMessage(), e); e.printStackTrace(); } catch (IOException e) { DbUtils.rollbackAndCloseQuietly(conn); logger.error(e.getMessage(), e); e.printStackTrace(); } finally { try { if (conn != null && !conn.isClosed()) { conn.close(); } } catch (SQLException e) { logger.error(e.getMessage(), e); e.printStackTrace(); } } } }); t.start(); } public void beginShow() { closeMarket = false; } public void closeShow() { closeMarket = true; } }
StockPriceTracer.java代码如下:
import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.Stack; import com.shihuan.dragonkeeper.server.bean.StocksBean; public class StockPriceTracer { private static StockPriceTracer tracer = null; private List<StocksBean> stocks = new ArrayList<StocksBean>(); private Stack<StocksBean> cycleStack = new Stack<StocksBean>(); private StockPriceTracer() { stocks.add(new StocksBean("zsy", "36.55")); stocks.add(new StocksBean("dlsd", "91.01")); stocks.add(new StocksBean("zsh", "22.59")); stocks.add(new StocksBean("lggf", "5.07")); stocks.add(new StocksBean("hedq", "71.77")); stocks.add(new StocksBean("jdsn", "31.61")); stocks.add(new StocksBean("yyrj", "51.29")); stocks.add(new StocksBean("zsyh", "52.70")); stocks.add(new StocksBean("zgtj", "16.96")); stocks.add(new StocksBean("sfz", "54.34")); stocks.add(new StocksBean("jsrj", "178.48")); stocks.add(new StocksBean("zyd", "134.48")); stocks.add(new StocksBean("jzg", "76.32")); stocks.add(new StocksBean("zgpa", "80.63")); stocks.add(new StocksBean("gsyh", "18.79")); stocks.add(new StocksBean("aggf", "20.19")); stocks.add(new StocksBean("zght", "11.13")); } public static StocksBean getNextStockInfo() { if (null == tracer) { tracer = new StockPriceTracer(); } if (tracer.cycleStack.empty()) { tracer.cycleStack.addAll(tracer.stocks); } StocksBean tmp = tracer.cycleStack.pop(); tmp.setValue(tracer.getRandomPrice(tmp.getValue())); return tmp; } private String getRandomPrice(String current) { float fcurrent = 0.0F; try { fcurrent = Float.parseFloat(current); } catch (NumberFormatException e) { fcurrent = 0.01F; } Random rdm = new Random(); float tmp = fcurrent + rdm.nextFloat(); return String.valueOf(tmp); } }
StocksPusher.jsp代码如下:
<%@ page contentType="text/html;charset=UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> <%@ page isELIgnored="false" %> <fmt:requestEncoding value="UTF-8"/> <c:set var="ctx" value="${pageContext.request.contextPath}"/> <c:set var="requestURI" value="${pageContext.request.servletPath}"/> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>My Dwr Reverse Ajax Test For StocksInfo</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <link rel="stylesheet" type="text/css" href="${ctx}/resources/dwr/css/generic.css" /> <script type='text/javascript' src='${ctx}/resources/dwr/engine.js'></script> <script type='text/javascript' src='${ctx}/resources/dwr/util.js'></script> <script type='text/javascript' src='${ctx}/resources/dwr/interface/StocksPusher.js'></script> <script type="text/javascript" src="${ctx}/resources/appbusiness/stockspusher/StocksPusher.js"></script> </head> <body> <h3>使用DWR Reverse Ajax进行股票报盘</h3> <p>下面显示的股票信息是可以动态变化的</p> <input type="button" value="开市..." onclick="beginShow();" /> ========================= <input type="button" value="闭市..." onclick="endShow();" /> <hr /> <table style="width:500px;" border="0" cellpadding="0"> <tr> <td class="headName"> <b>Stock Name</b> </td> <td class="headValue" > <b>Stock Value</b> </td> </tr> <tr><td>中移动</td><td><div id="zyd">wait...</div></td></tr> <tr><td>中石化</td><td><div id="zsh">wait...</div></td></tr> <tr><td>中石油</td><td><div id="zsy">wait...</div></td></tr> <tr><td>海尔电器</td><td><div id="hedq">wait...</div></td></tr> <tr><td>冀东水泥</td><td><div id="jdsn">wait...</div></td></tr> <tr><td>用友软件</td><td><div id="yyrj">wait...</div></td></tr> <tr><td>柳钢股份</td><td><div id="lggf">wait...</div></td></tr> <tr><td>招商银行</td><td><div id="zsyh">wait...</div></td></tr> <tr><td>中国铁建</td><td><div id="zgtj">wait...</div></td></tr> <tr><td>深发展</td><td><div id="sfz">wait...</div></td></tr> <tr><td>金山软件</td><td><div id="jsrj">wait...</div></td></tr> <tr><td>大连实德</td><td><div id="dlsd">wait...</div></td></tr> <tr><td>九寨沟</td><td><div id="jzg">wait...</div></td></tr> <tr><td>中国平安</td><td><div id="zgpa">wait...</div></td></tr> <tr><td>工商银行</td><td><div id="gsyh">wait...</div></td></tr> <tr><td>鞍钢股份</td><td><div id="aggf">wait...</div></td></tr> <tr><td>中国航天</td><td><div id="zght">wait...</div></td></tr> </table> <br /> </body> </html>
StocksPusher.js代码如下:
window.onload = function() { dwr.engine.setActiveReverseAjax(true); }; function beginShow() { StocksPusher.beginShow(); } function endShow() { StocksPusher.closeShow(); } //JSON版本 function showJsonMessage(json){ if(json['stock'] != undefined || json['value'] != undefined){ document.getElementById(json['stock']).innerHTML = json['value']; } } //非JSON版本 function showMessage(key, value){ document.getElementById(key).innerHTML = value; }
- 服务器推技术.rar (4.1 MB)
- 下载次数: 853
- DWR学习资料.rar (1.6 MB)
- 下载次数: 346
发表评论
-
动态提交使用jQuery 完成ajax 文件下载
2016-10-05 13:46 888https://my.oschina.net/u/140962 ... -
Spring4Mvc整合Hibernate4框架示例
2016-02-05 11:52 1403今天用NetBeans8.1搭建了一套Spring4MVC+H ... -
Spring4配置properties文件的一点儿细节
2016-02-04 15:40 2806http://repo.spring.io/release/o ... -
JavaWeb发送信息到微信公众平台的企业号
2015-11-01 22:42 3807首先到微信公众平台申请微信企业号: https://qy.we ... -
springmvc+dubbo+zookeeper
2015-09-22 11:34 12035笔者这里使用的是apache- ... -
OracleAS10g安装配置与部署
2015-07-01 20:59 712先到Oracle官方下载OracleAS10的安装包,截图如下 ... -
java和spring使用weblogic数据源配置
2014-10-13 11:29 3034需要weblogic.jar和jrmpclient.jar ... -
一套基本的SpringMvc工程所需要的最基本jar包(pom.xml)
2014-08-19 16:38 1916附件里是pom.xml文件。 -
html的form表单提交得不到参数问题
2014-07-25 16:13 1864今天同事问我他的form表单按submit方式提交,在Java ... -
Spring3Mvc导出PDF的3种形式+导出excel的两种形式(exportAnimal.do)
2014-07-19 22:55 1146附件里SpringMvc导出PDF和Excel的示例代码。 ... -
Java利用中国网建SMS短信通平台发送手机短信
2014-04-26 21:55 2248JAVA发送手机短信,流传有几种方法: (1)使用webser ... -
在Java中发送电子邮件
2014-04-26 18:42 9613要先申请一个网易的126邮箱和一个新浪的com邮箱。 以下程 ... -
cpdetector_1.0.10_binary下载
2014-03-26 20:53 1045附件里是cpdetector_1.0.10_binary.ra ... -
在Java代码中用Axis2调用DotNet语言的WebService程序
2014-02-19 15:19 2583package com.shihuan.ymail.com ... -
SpringMvc多语言配置
2014-01-14 16:01 14437applicationContext.xml文件中加入如下代码 ... -
log4j多级别多输出文件的配置
2013-07-22 21:28 1578以下代码需要log4j-1.2.17.jar的支持。 B ... -
mysql和Oracle在对clob和blob字段的处理
2012-08-25 18:50 30920一、MySQL与Oracle数据库如何处理Clob,Bl ... -
Spring3Mvc+Hibernate整合Axis2发布WebService并配置Quartz调度
2012-08-05 12:54 2220附件里是笔者的源代码,相关的jar包在笔者的abcdef的16 ... -
Lucene案例
2012-06-10 15:15 2613IndexerMmseg4j.java代码如下: import ... -
Mina入门程序
2012-06-02 15:05 1154附件里是Mina的入门程序。 http://mina.apa ...
相关推荐
【Pushlet服务器推技术】是一种实时通信技术,主要用于构建能够实时推送信息的Web应用程序,比如聊天、股票更新、在线游戏等场景。Pushlet是基于Java的开源项目,它利用了HTTP的长连接特性,实现了服务器主动向...
总之,DWR的服务器推技术通过`TestReverseAjax`和`TestPushlet`提供了强大的实时通信能力,让Web应用能够实现类似桌面应用的即时反馈,极大地提升了用户体验。然而,实施这一技术时,也需要充分考虑性能优化和资源...
Pushlet是基于Comet技术的一种实现,它为Java开发者提供了一种高效的服务器推送解决方案。 一、Comet技术 Comet是一种允许服务器长时间保持HTTP连接的技术,它打破了传统的Web应用模型,即客户端发起请求,服务器...
【标题】"PushLet实例,服务器消息推送"指的是一个基于Java技术实现的服务器端消息推送系统,名为PushLet。在互联网应用中,实时性是非常重要的一个特性,例如在线聊天、股票更新、新闻推送等场景。传统的HTTP协议是...
服务器推 pushlet 服务器推 pushlet 服务器推 pushlet 服务器推 pushlet
### Pushlet 服务器推送技术详解 #### 一、引言 在IBM于2008年发布的技术报告中,详细介绍了服务器推送技术——即所谓的Pushlet。这项技术为Web应用程序的发展带来了革命性的变化,尤其是在异步通信方面。本文将...
在Pushlet的实现中,主要有两个关键角色:Pushlet Server(推送服务器)和Pushlet Client(推送客户端)。Pushlet Server负责接收来自客户端的连接,并在有新数据时主动将数据推送到这些连接。Pushlet Client则建立...
Pushlet Server负责接收和处理客户端的连接,Pushlet Client则作为客户端应用程序,负责建立和保持与服务器的连接,Event Dispatcher则根据需求将事件推送到特定的客户端。 在Pushlet框架中,"一对多"的信息推送...
总结起来,基于Comet的Pushlet技术通过长轮询和流方式实现了高效的服务器向客户端的数据推送,有效地解决了Web实时通信的问题,尤其适用于需要实时交互的场景。无论是长轮询还是流方式,都利用了HTTP连接的持久性,...
Pushlet 是一种基于 Java 的实时通信框架,用于实现在服务器端向客户端主动推送消息的功能,而无需客户端不断轮询。这种技术在构建实时应用程序,如聊天室、实时股票更新或在线游戏等场景中非常有用。以下是关于 ...
实现多个客户端连接到web服务器,由服务端推送消息至客户端(或指定id的客户端),代码中没有用官网的jar文件,而是用的源码,做了一定的修改,实现了每个客户端都可以自定义id,然后服务端可以向指定id客户端推送消息...
Pushlet是一种基于Java的技术,用于实现服务器向客户端的实时数据推送。这种技术的核心思想是打破传统的HTTP请求-响应模式,让服务器能够在数据更新时主动将信息推送给客户端,而不是等待客户端发起新的请求来获取...
【服务器推送技术——PushLet应用详解<一>】 在当今的互联网应用中,实时性成为了不可或缺的需求,无论是即时通讯、在线游戏还是股票交易,都需要服务器能够主动向客户端推送信息,而不是传统的请求-响应模式。这...
Pushlet的优势在于其简单易用的API和对Java环境的良好支持,使得开发者能快速实现服务器到客户端的数据推送。然而,它也有一定的局限性,如对浏览器兼容性的限制(需要支持持久连接的浏览器),以及可能面临的连接...
【基于Pushlet推技术的网络应用程序开发的研究】这篇论文探讨了Pushlet技术在构建网络应用程序中的应用,Pushlet是一种服务器推(Server Push)技术,它允许服务器主动地将实时更新的数据推送到客户端的浏览器,而...
使用Pushlet来实现服务器端向客户端推送信息
总结来说,Pushlet简单示例测试是一个实践性的教程,它涵盖了Pushlet技术的基础应用,包括服务器端的设置、客户端的连接建立以及数据推送的处理。通过这个测试,开发者可以深入理解Pushlet的工作机制,并在实际项目...
Pushlet是服务器推送技术的一种早期实现,由Jackrabbit项目开发,它基于Java Servlet和JavaServer Pages (JSP) 技术。Pushlet的核心理念是通过长连接保持客户端与服务器之间的通信,从而实现实时数据推送。 Pushlet...
在IT行业中,推送技术是一种常见的实时通信方式,它允许服务器主动向客户端发送数据,而无需客户端不断地轮询请求。Pushlet框架就是这种技术的一种实现,主要用于构建基于HTTP长连接的实时信息发布系统。在这个...