项目中有个需求,把服务器端一些操作都输出到页面上显示,类似一个日志功能的操作.针对这样的需求,我反复想想,还是觉得用服务器的推送技术比较好,正好看到网上有人用dwr实现了这个功能,因此我也尝试着做了下.呵呵,成绩斐然啊,不过不算完全满意,有些东西没想明白怎么回事.
我用struts2+spring+hibernate,ajax库用的jquery,发现jquery跟dwr的util.js冲突,不知道如何使用dwr的util.js.
首先,在web.xml中配置dwr(dwr版本为version: 2.0.3):
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>
org.directwebremoting.servlet.DwrServlet
</servlet-class>
<init-param>
<description>false</description>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<description>AJAX</description>
<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>maxWaitAfterWrite</param-name>
<param-value>100</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
然后,写struts2的action类:
public class BaseAction extends ActionSupport implements ServletContextAware,java.io.Serializable
{
protected ServletContext servletContext;
public void setServletContext(ServletContext arg0)
{
this.servletContext = arg0;
}
public void outMessage(String msg)
{
ServerContext wctx = ServerContextFactory.get(this.servletContext);
ScriptSession scriptSessions = null;
Collection<ScriptSession> sessions = wctx.getAllScriptSessions ();
msg = MessageUtil.formatDate(new Date(),"yyyy-MM-dd HH:mm:ss") + " \t"+ msg;
ScriptBuffer script = new ScriptBuffer();
script.appendScript("
showMessage(")
.appendData(msg)
.appendScript(");");
for (ScriptSession session : sessions) {
session.addScript(script);
}
}
}
然后,注册action到spring中:
<bean id="baseAction" class="com.fsc.frame.base.web.BaseAction" />
然后,注册dwr.xml文件:
<allow>
<create creator="spring" javascript="Msg">
<param name="beanName" value="baseAction"/>
</create>
</allow>
然后就是写页面,即将服务器消息推送到页面上:
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<table CLASS="body_bottom" width="98%" align="center">
<tr>
<td width="95%">
<textarea rows='5' id="message" name="STATUS_MESSAGE" ReadOnly style="width:100%" class="CSS_TextArea"></textarea>
</td>
</tr>
</table>
<script type='text/javascript' src='dwr/interface/Msg.js'></script>
<script type='text/javascript' src='dwr/engine.js'></script>
<script type='text/javascript'>
/**
* 页面初始化
*/
function init()
{
dwr.engine.setActiveReverseAjax(true); // 激活反转 重要
}
window.onload = init;//页面加载完毕后执行初始化方法init
function
showMessage(msg)
{
var htmlMsg = $("#message").val() + msg + "\n";
$("#message").val(htmlMsg);
document.all.STATUS_MESSAGE.scrollTop = document.all.STATUS_MESSAGE.scrollHeight;
}
</script>
这样一个完整的应用就完成了.
需要注意的是,在action里输出到页面上的script方法必须要先在页面上进行定义.
问题:
1.
Collection<ScriptSession> sessions = new HashSet<ScriptSession>();
sessions.addAll(ServerContextFactory.get(this.servletContext).getScriptSessionsByPage("/framework/footer.jsp"));
为啥这么写得不到页面session呢?那位知道麻烦说下.
2. 如何才能避免jquery跟dwr的util.js的冲突?
分享到:
相关推荐
DWR推送技术的实现主要涉及以下几个关键组件: 1. **DWR Engine**:这是DWR的核心部分,负责处理JavaScript与服务器端Java对象之间的交互。它通过AJAX(Asynchronous JavaScript and XML)技术在客户端和服务器之间...
在“dwr推送及js访问java代码”的项目中,我们可以看到如何利用DWR进行双向通信。首先,DWR的核心组件包括`DWR Engine`、`Servlet`和`AutoBean`等。`DWR Engine`负责在客户端和服务器之间建立连接,`Servlet`处理...
在实际项目中,根据`dwrpush`这个文件名,我们可以推测这是一个关于DWR推送技术的示例或配置文件,可能包含了如何设置和使用DWR推送功能的代码示例。通过对这个文件的深入学习和实践,可以更好地理解和掌握DWR3的推...
在这个名为“dwr推送demo”的项目中,开发者提供了一个适合初学者理解DWR推送功能的实例。 DWR的核心特性在于它的Ajax(异步JavaScript和XML)支持,它允许JavaScript直接调用服务器端的Java方法,而无需传统的HTTP...
在“Dwr 推送简单列子”这个项目中,我们看到它是一个可以运行的示例,用于展示DWR的推送功能。推送技术是DWR的一个重要特性,它允许服务器主动将数据推送到客户端,而不是传统的客户端请求-服务器响应模式。这种...
这两个文件展示了DWR推送的两种不同实现方式。 1. `java-chat.html`:这个例子中,服务器端负责主动推送消息到客户端。在Java后端,开发者需要创建一个`PushEngine`实例,注册监听器,并在有新消息时触发推送。DWR...
在"**DWR推送功能实现实例(前段,后台函数互调)**"中,我们将深入探讨如何利用DWR来实现实时的双向通信。 **DWR的基本原理**: DWR的核心是通过动态生成JavaScript库,使JavaScript可以直接调用Java对象的方法。...
标题中的“接收Socket消息通过DWR推送到界面显示”涉及两个关键技术和概念:Socket通信和Direct Web Remoting(DWR)框架。 1. **Socket通信**:Socket是网络编程的基本接口,它允许应用程序通过网络进行双向通信。...
**基于DWR推送技术的聊天室** DWR(Direct Web Remoting)是一种JavaScript到Java的反向Ajax库,它允许Web应用在浏览器和服务器之间进行实时通信,从而实现动态、交互性强的Web应用。DWR的核心功能在于提供了一种...
在这个"**dwr推送消息**"的场景中,我们看到的是DWR被用来实现一个消息推送系统,通过后台消息队列(MQ)监听,一旦接收到新消息,便即时推送到前端进行展示。 首先,我们需要理解DWR的核心概念。DWR提供了几个关键...
通常,一个简单的DWR推送示例会包括以下组件: 1. **DWR Engine**:这是DWR的核心组件,负责处理JavaScript与Java之间的通信。在服务器端,你需要在web.xml中配置DWR Engine,指定允许访问的类和方法。 2. **...
在"**dwr推送消息模板**"中,我们关注的是DWR如何实现服务器向客户端的实时消息推送。在传统的HTTP协议下,服务器无法主动向客户端推送信息,除非客户端发起新的请求。DWR通过一种称为"Reverse Ajax"或"Comet"的技术...
- 实时数据显示:服务器端定期更新数据,通过DWR推送至客户端显示图表或仪表盘。 - 表单验证:在客户端提交表单前,通过DWR调用服务器端的验证方法。 综上所述,DWR是一个强大的工具,能够简化Web应用的开发,...
dwr推送jar包 DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站。它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,...
【基于DWR推送的Web聊天系统】是一种利用Direct Web Remoting (DWR) 技术构建的实时交互式在线聊天应用。DWR是一款开源的Java库,它允许JavaScript在浏览器端与服务器端的Java对象进行直接通信,实现了AJAX(异步...
通过以上分析,我们可以看出"Dwr推送技术实现BS即时通讯"这个项目涉及到了前端与后端的交互、即时通讯机制、数据存储和安全等多个方面的技术,是一个综合性的Web应用开发实践。通过学习和理解这个项目,开发者可以...
总的来说,结合DWR和Spring,我们可以构建出一个高效、可扩展的消息推送系统,使得Web应用能够实时地与用户互动,提升用户体验。在实际项目中,还需要考虑安全性、错误处理、性能监控等方面,确保系统的稳定性和可靠...
总结来说,DWR推技术是实现服务器主动向客户端推送数据的一种高效方式,尤其适用于需要实时数据更新的应用,如股票实时显示。通过反转Ajax,DWR简化了开发流程,提高了用户体验,是现代Web开发中的一个重要工具。
本实例是在一些网络资料的基础上整合出来的一个:以后台向前台页面推送消息的一个完整实例工程,采用了spring、dwr反转,实现的是后台向前台不断推送消息,并管理相关用户退出;可以用在如定时任务的桌面消息提醒之...