- 浏览: 209743 次
- 性别:
- 来自: 厦门
-
文章分类
- 全部博客 (100)
- java设计模式学习 (1)
- javascript (2)
- sqlserver (3)
- java基础 (18)
- spring (8)
- webwork (3)
- itext (4)
- xstream (1)
- freemarker (2)
- jsp (6)
- hibernate (7)
- jquery (1)
- json (1)
- poi (2)
- iprocess (1)
- bw (1)
- bpm (0)
- java2word (0)
- ireport (1)
- Struts2.0 (13)
- webservice (6)
- j2ee基础 (7)
- jms (3)
- protocol buffer (3)
- jfreechart (1)
- spring mvc (0)
- http编程机制探析 (1)
- pb (2)
- oracle (0)
- sso (0)
- mybatis (0)
- ssl与ca认证 (0)
- cas (1)
最新评论
-
mayucai:
这个博客写的我是真服,写了一大堆,结果最后来一句这是错的。
poi获取excel和word总页数 -
iris_1992:
2005年以前,国外开原报表完全碾压国产软件,但是现在国内软件 ...
ireport与jasperreports开发总结 -
高攀sky:
...
Servlet中的八大Listener -
rmn190:
多谢, 试了N多个后, 终于参考您的内容, 设置出来了。老天开 ...
ireport与jasperreports开发总结 -
辣油_:
System.out.println("草 ...
Spring-JNDI配置
因IE下AJAX最长连接为1小时,无法满足部分变态需求,特此使用DWR推技术实现请求SESSION传输。
前提:系统支持SESSION,这只是工程下例子,别问我为什么不能在你工程下运行。。。。
1、在工程下配置DWR,activeReverseAjaxEnabled属性为允许反转。web.xml和dwr.xml在同一目录,因此没有进行dwr.xml目录引用,如果配置多DWR文件参照config-1,名称必须已config开头进行配置。
web.xml
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>false</param-value>
</init-param>
<!--<init-param>
<param-name>config-1</param-name>
<param-value>/WEB-INF/dwr/dwr.xml</param-value>
</init-param>-->
<init-param>
<param-name>maxCallCount</param-name>
<param-value>1000</param-value>
</init-param>
<init-param>
<param-name>scriptSessionTimeout</param-name>
<param-value>259200000</param-value>
</init-param>
<init-param>
<param-name>activeReverseAjaxEnabled</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>classes</param-name>
<param-value>java.lang.Object</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
2、配置DWR文件,略
dwr.xml
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"
"http://www.getahead.ltd.uk/dwr//dwr20.dtd">
<dwr>
<allow>
<create creator="spring" javascript="TestDwService">
<param name="beanName" value="TestDwr"/>
<include method="jsonForDw"/>
</create>
</allow>
</dwr>
3、实现类,默认最后一参数为HttpServletRequest,只发现支持5参数的方法,所以至此回调函数参最多支持5个。
TestDwr.java
public void jsonForDw(Integer st,String local,String callFunction,HttpServletRequest request) {
省略了其他操作。
DwrBuntUtil dwrBunt=new DwrBuntUtil();
List dwrList=new ArrayList();
dwrList.add("xxoo");
dwrBunt.bunt(request, local, callFunction, dwrList);
}
4、封装类,实现推过程,因util.addFunctionCall支持不够强,也没找到好的解决办法。。自己便利吧。。
DwrBuntUtil.java
package com.vstsoft.csi.util;
import java.util.Collection;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.directwebremoting.ServerContextFactory;
import org.directwebremoting.proxy.dwr.Util;
/**
* 使用DWR服务器推技术实现客户端访问超长连接(解决IE下AJAX一小时支持问题)
* @author chenyanji
*
*/
public class DwrBuntUtil {
/**
* DWR实现推技术
* @param request DWR当前请求
* @param local 页面地址,以工程同目录真实地址为准,如:/部署名/pages/index.jsp
* @param callFunction 回调JS方法名称,如:"count"
* @param parameter 回调方法参数数组,最多支持5个参数,数组0-4
*/
public void bunt(HttpServletRequest request,String local,String callFunction,List parameter){
try{
Collection scriptSessionsByPage = ServerContextFactory.get(request.getSession().getServletContext()).getScriptSessionsByPage(local);
Util util = new Util(scriptSessionsByPage);
int size=parameter.size();
if(size==5){
util.addFunctionCall(callFunction,parameter.get(0),parameter.get(1),parameter.get(2),parameter.get(3),parameter.get(4));
}else if(size==4){
util.addFunctionCall(callFunction,parameter.get(0),parameter.get(1),parameter.get(2),parameter.get(3));
}else if(size==3){
util.addFunctionCall(callFunction,parameter.get(0),parameter.get(1),parameter.get(2));
}else if(size==2){
util.addFunctionCall(callFunction,parameter.get(0),parameter.get(1));
}else if(size==1){
util.addFunctionCall(callFunction,parameter.get(0));
}else if(size==0){
util.addFunctionCall(callFunction);
}
scriptSessionsByPage=null;
util=null;
}catch(Exception e){
//throw e;
}
}
}
5、jsp引用,1、3包为必须引用,2包如果没有用到UTIL类可以不引。
testDwr.jsp
<script type='text/javascript' src='/newsx/dwr/engine.js'></script>
<script type='text/javascript' src='/newsx/dwr/util.js'></script>
<script type='text/javascript' src='/newsx/dwr/interface/TestDwService.js'></script>
6、js调用,最后一参数默认为回掉方法,使用推技术此方法无效,所以置成NULL
test.js
function queryDwr(){
setActiveReverseDwr(dwr,true,true);
TestDwService.jsonForDw(0,"/newsx/pages/test/testDwr.jsp","jspalert",null);
}
function jspalert(str){
lovDwStore.loadData(Ext.decode(str));
setActiveReverseDwr(dwr,false,false);
}
7、封装JS,本项目使用了EXT,没用的可以自行改造。
common.js
/**
* DWR设置长连接/取消长连接(dwr,true/false,true/false)
* (dwr对象,长连接控制,MASK控制)
*/
function setActiveReverseDwr(obj,boo,mask){
obj.engine.setActiveReverseAjax(boo);
if(typeof mask != "undefined"){
使用DWR2异步实现服务器推技术
中国自学编程网
因IE下AJAX最长连接为1小时,无法满足部分变态需求,特此使用DWR推技术实现请求SESSION传输。
前提:系统支持SESSION,这只是工程下例子,别问我为什么不能在你工程下运行。。。。
1、在工程下配置DWR,activeReverseAjaxEnabled属性为允许反转。web.xml和dwr.xml在同一目录,因此没有进行dwr.xml目录引用,如果配置多DWR文件参照config-1,名称必须已config开头进行配置。
web.xml
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>false</param-value>
</init-param>
<!--<init-param>
<param-name>config-1</param-name>
<param-value>/WEB-INF/dwr/dwr.xml</param-value>
</init-param>-->
<init-param>
<param-name>maxCallCount</param-name>
<param-value>1000</param-value>
</init-param>
<init-param>
<param-name>scriptSessionTimeout</param-name>
<param-value>259200000</param-value>
</init-param>
<init-param>
<param-name>activeReverseAjaxEnabled</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>classes</param-name>
<param-value>java.lang.Object</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
2、配置DWR文件,略
dwr.xml
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"
"http://www.getahead.ltd.uk/dwr//dwr20.dtd">
<dwr>
<allow>
<create creator="spring" javascript="TestDwService">
<param name="beanName" value="TestDwr"/>
<include method="jsonForDw"/>
</create>
</allow>
</dwr>
3、实现类,默认最后一参数为HttpServletRequest,只发现支持5参数的方法,所以至此回调函数参最多支持5个。
TestDwr.java
public void jsonForDw(Integer st,String local,String callFunction,HttpServletRequest request) {
省略了其他操作。
DwrBuntUtil dwrBunt=new DwrBuntUtil();
List dwrList=new ArrayList();
dwrList.add("xxoo");
dwrBunt.bunt(request, local, callFunction, dwrList);
}
4、封装类,实现推过程,因util.addFunctionCall支持不够强,也没找到好的解决办法。。自己便利吧。。
DwrBuntUtil.java
package com.vstsoft.csi.util;
import java.util.Collection;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.directwebremoting.ServerContextFactory;
import org.directwebremoting.proxy.dwr.Util;
/**
* 使用DWR服务器推技术实现客户端访问超长连接(解决IE下AJAX一小时支持问题)
* @author chenyanji
*
*/
public class DwrBuntUtil {
/**
* DWR实现推技术
* @param request DWR当前请求
* @param local 页面地址,以工程同目录真实地址为准,如:/部署名/pages/index.jsp
* @param callFunction 回调JS方法名称,如:"count"
* @param parameter 回调方法参数数组,最多支持5个参数,数组0-4
*/
public void bunt(HttpServletRequest request,String local,String callFunction,List parameter){
try{
Collection scriptSessionsByPage = ServerContextFactory.get(request.getSession().getServletContext()).getScriptSessionsByPage(local);
Util util = new Util(scriptSessionsByPage);
int size=parameter.size();
if(size==5){
util.addFunctionCall(callFunction,parameter.get(0),parameter.get(1),parameter.get(2),parameter.get(3),parameter.get(4));
}else if(size==4){
util.addFunctionCall(callFunction,parameter.get(0),parameter.get(1),parameter.get(2),parameter.get(3));
}else if(size==3){
util.addFunctionCall(callFunction,parameter.get(0),parameter.get(1),parameter.get(2));
}else if(size==2){
util.addFunctionCall(callFunction,parameter.get(0),parameter.get(1));
}else if(size==1){
util.addFunctionCall(callFunction,parameter.get(0));
}else if(size==0){
util.addFunctionCall(callFunction);
}
scriptSessionsByPage=null;
util=null;
}catch(Exception e){
//throw e;
}
}
}
5、jsp引用,1、3包为必须引用,2包如果没有用到UTIL类可以不引。
testDwr.jsp
<script type='text/javascript' src='/newsx/dwr/engine.js'></script>
<script type='text/javascript' src='/newsx/dwr/util.js'></script>
<script type='text/javascript' src='/newsx/dwr/interface/TestDwService.js'></script>
6、js调用,最后一参数默认为回掉方法,使用推技术此方法无效,所以置成NULL
test.js
function queryDwr(){
setActiveReverseDwr(dwr,true,true);
TestDwService.jsonForDw(0,"/newsx/pages/test/testDwr.jsp","jspalert",null);
}
function jspalert(str){
lovDwStore.loadData(Ext.decode(str));
setActiveReverseDwr(dwr,false,false);
}
7、封装JS,本项目使用了EXT,没用的可以自行改造。
common.js
/**
* DWR设置长连接/取消长连接(dwr,true/false,true/false)
* (dwr对象,长连接控制,MASK控制)
*/
function setActiveReverseDwr(obj,boo,mask){
obj.engine.setActiveReverseAjax(boo);
if(typeof mask != "undefined"){
if(mask){
Ext.getBody().mask("正在查询,请稍后...","x-mask-loading");
}else{
Ext.getBody().unmask();
}
}
}
重要:在JS中调用DWR前加允许长连接,后台配置为activeReverseAjaxEnabled:true支持轮循,当执行成功后回调JS中一定要对当前连接进行关闭,否则直到页面关闭前一直轮循;默认长轮循间隔为1分钟。
if(mask){
Ext.getBody().mask("正在查询,请稍后...","x-mask-loading");
}else{
Ext.getBody().unmask();
}
}
}
重要:在JS中调用DWR前加允许长连接,后台配置为activeReverseAjaxEnabled:true支持轮循,当执行成功后回调JS中一定要对当前连接进行关闭,否则直到页面关闭前一直轮循;默认长轮循间隔为1分钟。
- chat.rar (827.1 KB)
- 下载次数: 47
发表评论
-
JSESSIONID介绍
2013-02-28 17:32 0这个jsessionid是session的一个标识。 ... -
forward与sendRedirect区别
2013-02-28 11:17 01.请求转发数据还在,而重定向数据丢失了,而且重定向不需要di ... -
JSP中动态INCLUDE与静态INCLUDE的区别
2013-02-28 11:09 01。动态INCLUDE用<jsp:include> ... -
request中getparameter与getattribute区别
2013-02-28 10:50 0request.getParameter()方法传递的数据,r ... -
Servlet中的八大Listener
2012-08-17 13:20 1138JSP/Servlet 中的事件处理写过AWT或Swing程序 ... -
Servlet 介绍 以及Servlet生命周期(详细)
2012-08-11 22:24 962Servlet 只是一个名词,具体的解释就是使用JAVA编写的 ... -
通俗易懂客户端与服务器端交互原理(HTTP数据请求与HTTP响应,包括Servlet部分)
2012-08-11 22:23 1461HTTP 介绍 1.HTTP 是一种超文本传送协议(Hyp ... -
Comet学习笔记(二)
2012-05-28 17:54 967理解 Comet 您可能已经 ... -
Comet学习笔记
2012-05-28 17:49 1037Comet技术被称为下一代Ajax技术,主要通过实现serve ... -
开源项目重点类
2011-04-22 16:23 0一:工具类 1.xwork.jar中获取国际化文件工具类Lo ... -
子类化HttpServletResponseWrapper
2011-04-11 10:41 1050HttpServletResponseWrapper为我们实现 ...
相关推荐
Direct Web Remoting (DWR) 是一种开源的Java库,它允许JavaScript在浏览器和服务器之间进行交互,从而实现在Web应用程序中的Ajax(异步JavaScript和XML)功能。DWR的独特之处在于它的“反转Ajax”(Reverse Ajax)...
在这个"**dwr实现的服务器推demo**"中,我们看到一个实例,展示了如何利用DWR的技术来实现实时的、无需刷新的服务器推送功能。 服务器推是一种技术,它允许服务器主动地将数据发送到客户端,而不需要客户端(通常是...
在IT行业中,消息推送是一项重要的技术,它使得服务器能够实时地向客户端发送数据,而无需客户端不断地轮询请求。在本教程中,我们将探讨如何利用Direct Web Remoting (DWR) 和Spring框架来实现这样的功能。 DWR是...
在本文中,我们将深入探讨如何使用Direct Web Remoting (DWR) 2.0来实现服务器推技术,以便实时地将信息传递给客户端。DWR是一个JavaScript库,它允许Web应用进行异步通信,实现类似Ajax的效果,但支持服务器向...
DWR通过使用ActiveXObject和IFrame等技术,能够在这些旧版本的IE上实现Ajax和服务器推送功能。同时,开发者需要注意IE的内存管理和兼容性问题,确保应用程序的稳定性和性能。 4. **DEMO项目结构** - `.classpath`...
DWR使用一种称为Reverse Ajax或Comet的技术来实现服务器推送。它创建了一个持久化的HTTP连接,使得服务器可以在准备好新数据时立即发送,而不需要等待客户端的请求。DWR提供了一种简单的方式来注册JavaScript函数,...
Java+dwr框架实现聊天室是使用Java语言和dwr框架实现的服务器推技术,实现了实时通信的聊天室功能。下面将详细介绍该技术的实现过程和相关知识点。 一、dwr 框架简介 dwr(Direct Web Remoting)是一种基于Ajax...
**DWR(Direct Web Remoting)服务器推送技术详解与WebQQ实现** DWR,全称为Direct Web Remoting,是一种在JavaScript和Java之间进行远程方法调用(Remote Method Invocation,RMI)的技术,允许Web应用程序实现...
通过这样的方式,ZTree和DWR的结合使用,不仅提升了用户体验,减少了不必要的网络传输,还使得后台数据的更新与前台展示无缝对接,实现了高效、流畅的异步加载树形菜单。在实际项目中,这种技术组合广泛应用在权限...
在DWR异步提交的场景中,Struts可以用来接收和处理DWR发起的请求,并调用业务逻辑层。 2. **Hibernate 3.0**:作为ORM框架,Hibernate负责将Java对象映射到数据库表,简化数据操作。在Spring中,我们可以使用`...
服务器推送技术在DWR中的实现主要通过以下几种方式: - **Polling**:定时轮询是最常见的实现方式,客户端以一定的频率向服务器发送请求,询问是否有新的数据。 - **Reverse Ajax**:DWR支持真正的服务器推送,即当...
在这个“DWR简单服务器推送技术DEMO”中,我们将探讨如何利用DWR来实现在服务器端向特定客户端页面推送数据,即使这些页面并未主动发起请求。 服务器推送技术是相对于传统的客户端请求、服务器响应模式而言的。在...
**DWR(Direct Web Remoting)**是一种JavaScript库,它允许Web应用程序与服务器进行异步交互,实现Ajax功能。在本“DWR与后台异步交互简单例子”中,我们将探讨如何利用DWR来实现前后端的数据通信,提高用户体验。 ...
标题“Dwr异步刷新事例”表明我们将探讨如何使用DWR来实现在Web页面上的异步刷新。在传统的Web应用中,用户每次交互都需要重新加载整个页面,而异步刷新则只更新页面的部分内容,提高了用户体验。 首先,DWR的工作...
DWR (Direct Web Remoting) 是一种用于Java Web应用程序的开源框架,它允许在客户端JavaScript和服务器端Java之间进行...在客户端,可以通过引入DWR生成的JavaScript文件来调用服务器端的方法,实现异步刷新的功能。
Direct Web Remoting (DWR) 是一个开源Java库,它允许Web应用程序在浏览器和服务器之间进行异步交互,实现JavaScript与服务器端Java对象的直接调用。...正确配置和使用这些文件是实现DWR异步交互的关键步骤。
在"dwr异步操作"这个主题中,我们需要关注以下几个关键知识点: 1. **DWR架构**:DWR由三部分组成:`Client-side API`、`Server-side Engine` 和 `Configuration`。Client-side API包含JavaScript库,允许前端与...
本示例将深入探讨如何使用DWR与Spring框架集成,实现服务器主动推送功能。 首先,我们需要理解DWR的核心概念: 1. **DWR Engine**: 是DWR的核心组件,它处理客户端和服务器之间的通信,包括JavaScript到Java的调用...
DWR (Direct Web Remoting) 是一个开源的Java库,它允许JavaScript在浏览器端与服务器端的Java对象进行交互,从而实现AJAX(Asynchronous JavaScript and XML)应用。在DWR 3版本中,它提供了丰富的API和工具,使得...
5. **前端页面**:使用JavaScript和DWR API调用服务器端的方法,实现实时消息的推送和显示。 在前端,我们可以利用JavaScript事件监听器来触发DWR调用,当有新的消息时,前端页面会立即更新。此外,DWR还支持异步...