一、DWR是什么
DWR 可以把服务器端 Java 对象的方法公开给 JavaScript 代码,可用于服务器向客户端推送消息
二、DWR的简单应用
1.引入dwr.jar
<!-- DWR -->
<dependency>
<groupId>org.directwebremoting</groupId>
<artifactId>dwr</artifactId>
<version>3.0.2-RELEASE</version>
</dependency>
2.web.xml新增配置
<!-- DWR -->
<servlet>
<servlet-name>dwr</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<!-- 使用服务器反转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>allowScriptTagRemoting</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr</servlet-name>
<url-pattern>/js/dwr/*</url-pattern>
<!-- 该路径和JSP页面中引入js路径相对应 -->
</servlet-mapping>
3.创建dwr.xml(与web.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="SendMessage" >
<param name="class" value="com.demo.js.SendMessage" />
</create>
</allow>
</dwr>
其中,javascript属性值是:通过java类生成的js文件的名称,对应的value属性值是java类全路径
4.jsp中引入js
<script type='text/javascript' src='js/dwr/engine.js'></script>
<script type='text/javascript' src='js/dwr/util.js'></script>
<script type='text/javascript' src='js/dwr/interface/SendMessage.js'></script>
其中SendMessage.js与dwr文件中相对应
5.jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<body>
<h2 id="hello">Hello World!</h2>
<button id="button" >点击</button>
<script src="js/jquery.min.js"></script>
<script type='text/javascript' src='js/dwr/engine.js'></script>
<script type='text/javascript' src='js/dwr/util.js'></script>
<script type='text/javascript' src='js/dwr/interface/SendMessage.js'></script>
<script type="text/javascript">
$(document).ready(function() {
//翻转激活
dwr.engine.setActiveReverseAjax(true);
$("#button").click(function() {
var hello = "Hello DWR";
//调用java类生成的js
SendMessage.send(hello);
});
});
//供java类生成的js调用的函数
function callBack(msg) {
$("#hello").html(msg);
}
</script>
</body>
</html>
6.java类
package com.demo.js;
import org.directwebremoting.ScriptBuffer;
import org.directwebremoting.ScriptSession;
import org.directwebremoting.WebContext;
import org.directwebremoting.WebContextFactory;
import org.directwebremoting.proxy.dwr.Util;
public class SendMessage {
public void send(String msg) {
ScriptBuffer scriptBuffer = new ScriptBuffer();
WebContext webContext=WebContextFactory.get();
ScriptSession myScSession = webContext.getScriptSession();
scriptBuffer.appendScript("callBack("); //调用JS中的函数
scriptBuffer.appendData(msg);
scriptBuffer.appendScript(")");
Util util = new Util(myScSession);
util.addScript(scriptBuffer);
}
}
7.运行效果
当打开多个客户端页面显示Hello World时,点击任一个按钮,虽有的客户端页面都讲变成Hello DWR