DWR实现服务器向客户端推送消息(可用于大屏消息墙等)JAVA

本文介绍了一个名为DWR的Web远程调用框架,并提供了详细的实战步骤和源码示例,包括如何配置DWR.xml和web.xml文件,以及如何在前端页面中调用后端Java方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、DWR介绍

DWR(Direct Web Remoting)是一个web远程调用框架,利用这个框架可以让AJAX变得很简单,通过DWR可以在客户端通过JavaScript直接调用服务器的Java方法并返回值给JavaScript,整个过程就好像通过本地客户端调用一样,DWR通过Java类动态生成JavaScript代码,它的最新版本DWR6.0添加许多特性:如支持Dom Trees的自动配置,支持Spring(JavaScript远程调用Spring bean),更好的浏览器支持,还支持可选的commons-logging日志操作。

二、开发准备工作

DWR需要engine.js、util.js、业务服务.js(框架自动生成,只需配置好路径)、jquery.js以及dwr.jar插件包的支持
现在方式可以在网上下载,也可以通过我的优快云资源地址下载。
相关jar及js下载地址: 点击下载(已包含所有需要的jar及js文件)
源码demo下载地址: 点击下载

三、实现步骤

1、导入需要的框架支持包(DWR.jar)
2、导入js(engine.js、util.js)
3、编写服务调用方法
4、配置dwr.xml配置文件
5、配置web.xml文件
6、编写前台页面
注:我这边直接将关键源码提供给大家参考。

四、源码展示

后台服务方法源码:
package com.xinxin.dwr;

import java.util.Collection;

import org.directwebremoting.ScriptBuffer;
import org.directwebremoting.WebContext;
import org.directwebremoting.WebContextFactory;
import org.directwebremoting.proxy.dwr.Util;

public class SendPushService {
	public void send(String msg){
		WebContext webContext = WebContextFactory.get();
		Collection collection = webContext.getAllScriptSessions();
		ScriptBuffer scriptBuffer = new ScriptBuffer();
		scriptBuffer.appendScript("callBack(");
		scriptBuffer.appendScript(msg);
		scriptBuffer.appendScript(")");
		Util util = new Util(collection);
		util.addScript(scriptBuffer);
	}
}
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>
		<create creator="new" javascript="SendPushService">
			<param name="class" value="com.xinxin.dwr.SendPushService" />
		</create>
	</allow>
</dwr>
web.xml文件配置源码:
<servlet>
  	<servlet-name>dwr</servlet-name>
  	<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
  	<!-- 使用服务器推技术(反转Ajax) -->
  	<init-param>
  		<param-name>activeReverseAjaxEnabled</param-name>
  		<param-value>true</param-value>
  	</init-param>
  	<!-- 使能够从其他域请求true:开启;false:关闭 -->
  	<init-param>
  		<param-name>crossDomainSessionSecurity</param-name>
  		<param-value>false</param-value>
  	</init-param>
  	<!-- 允许远程js -->
  	<init-param>
  		<param-name>allowScriptTagRemotion</param-name>
  		<param-value>true</param-value>
  	</init-param>
  </servlet>
  <servlet-mapping>
  	<servlet-name>dwr</servlet-name>
  	<url-pattern>/js/dwr/*</url-pattern>
  </servlet-mapping>
页面使用及实现源码:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>dwr-test</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<script type="text/javascript" src="js/dwr/util.js"></script>
	<script type="text/javascript" src="js/dwr/engine.js"></script>
	<script type="text/javascript" src="js/dwr/interface/SendPushService.js"></script>
	<script type="text/javascript" src="js/jquery-1.9.1.js"></script>
  </head>
  <script type="text/javascript">
  	$(document).ready(function(){
  		dwr.engine.setActiveReverseAjax(true);
  		$("#send").click(function(){
  			var msg = "'"+$("#msg").val()+"'";
  			SendPushService.send(msg);
  		});
  		$(document).keydown(function(event){ 
		if(event.keyCode==13){ 
			$("#send").click(); 
		} 
		}); 
  	});
  	function callBack(msg){
  		$("#show").html($("#show").html()+"</br>"+msg);
  	}
  </script>
  <body>
    <ul id="show"></ul>
    <input type="text" id="msg" size="30"/>
    <input id="send" type="button" value="submit"/>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值