参考博客:https://blog.csdn.net/Marksinoberg/article/details/55505423

下载Dwr.jar文件

到官网http://directwebremoting.org/dwr/index.html。下载这个jar即可。

下载commons-logging.jar

官网上清晰的说明了dwr工作的时候需要依赖于commons-logging,所以还需要下载一下这个jar包。下载地址:

http://commons.apache.org/proper/commons-logging/download_logging.cgi

项目目录

把上面下载好的jar包放到刚才创建的项目的WebContent/lib目录下。

依照dwr的功能:浏览器可以调用服务器端的java方法。

那么我们不难理解,项目中有自己写的java方法,有一个jsp页面。然后项目本身添加一些配置(具体是web.xml和dwr.xml)。最后完整的项目目录就是这样了。

web.xml

l  官网上示例

<servlet>

<display-name>DWR Servlet</display-name>

<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>

</servlet>

<servlet-mapping>

<servlet-name>dwr-invoker</servlet-name>

<url-pattern>/dwr/*</url-pattern>

</servlet-mapping>

l  我的配置

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">

<display-name>dwrtest</display-name>

<welcome-file-list>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>

<listener>

<listener-class>org.directwebremoting.servlet.DwrListener</listener-class>

</listener>

<servlet>

<servlet-name>dwr</servlet-name>

<!-- version 2 * -->

<!-- <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class> -->

<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>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>dwr</servlet-name>

<url-pattern>/dwr/*</url-pattern>

</servlet-mapping>

</web-app>

dwr.xml

关于dwr.xml的配置,其实还是很需要技巧的。当然了,这个小项目本身不需要配置得多么复杂,如果有兴趣,建议还是到官网上自习的阅读文档。

我的配置(由于我的jave文件在utils包下的DwrPush.java,所以我可以这么配置。)

<?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="DwrPush">

<param name="class" value="utils.DwrPush"></param>

<!-- 这个标签可以写也可以不写,无所谓的-->

<include method="Send"/>

</create>

</allow>

</dwr>

这里需要特别注意的是create标签中的javascript属性。这个值就作为你在页面上直接调用的js的名称,比如我这里写的是DwrPush,那么待会我在jsp文件中写js代码的时候,就得这个名称来写,比如:

var data = document.getElementById("data").value;

//这个DwrPush就是刚才声明的javascript属性的值,切记切记

DwrPush.Send(data);

$("#data").value = "";

java文件

好了,下面开始写被调用的后台java文件了。这些代码其实都是这么个套路,原理就是:

获取到服务器上当前在线的所有的session会话,然后组装一下js代码,最后发送给所有的这些用户。

这个java类文件可以随意的放置,只要按照刚才的dwr.xml中声明的那样放置就行了。

package utils;

import java.util.Collection;

import org.directwebremoting.ScriptBuffer;

import org.directwebremoting.ScriptSession;

import org.directwebremoting.WebContext;

import org.directwebremoting.WebContextFactory;

import org.directwebremoting.proxy.dwr.Util;

public class DwrPush {

@SuppressWarnings("deprecation")

public static void Send(String msg){

WebContext webContext = WebContextFactory.get();

@SuppressWarnings("deprecation")

Collection<ScriptSession> sessions = webContext.getAllScriptSessions();

// 构建发送所需的JS脚本

ScriptBuffer scriptBuffer = new ScriptBuffer();

// 调用客户端的js脚本函数

scriptBuffer.appendScript("callback(");

// 这个msg可以被过滤处理一下,或者做其他的处理操作。这视需求而定。

scriptBuffer.appendData(msg);

scriptBuffer.appendScript(")");

// 为所有的用户服务

@SuppressWarnings("deprecation")

Util util = new Util(sessions);

util.addScript(scriptBuffer);

}

}

jsp页面

util.js和engine.js是dwr.jar中本来就存在的,但是使用的时候需要注意一下。

注意一下访问的链接是在web.xml中配置好的,切记切记!!!

jsp页面的代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>首次环境搭建</title>

<script type='text/javascript' src='/dwrtest/dwr/util.js'></script>

<script type='text/javascript' src='/dwrtest/dwr/engine.js'></script>

<script type='text/javascript' src='/dwrtest/dwr/interface/DwrPush.js'></script>

<script type="text/javascript" src="http://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min.js"></script>

<script>

$(document).ready(function(){

alert('can get here!');

// 页面加载的时候进行反转的激活

/* dwr.engine.setActiveReverseAjax(true); */

dwr.engine.setActiveReverseAjax(true) ;

// 点击页面按钮的时候触发的方法

$("#button").click(function(){

// 此类即为根据java文件生成的js文件

var data = document.getElementById("data").value;

DwrPush.Send(data);

});

});

//////////////////////////////////////用于后台调取的函数

function callback(msg){

//alert('test!');

$("#ul").html($("#ul").html()+"<br />"+msg);

}

</script>

</head>

<body>

<ul id="ul">

</ul>

<br/>

<hr>

<input type="text" id="data" name='data' />&nbsp;&nbsp;&nbsp;&nbsp;

<input type='button' id="button" value="publish">

</body>

</html>

调试运行

关于自动生成的js文件?

自动生成?其实这就是一句空谈,子虚乌有的事嘛。刚才通过

http://localhost:8080/dwrtest/dwr/test/DwrPush

这个本地链接大家也看到了,只需要按照提示的来书写就够了,这个框架会自动的帮助我们处理这些问题,而不是真的有这么个项目目录。

如何配置页面脚本?

多么直观啊,其中“/dwrtest/dwr/util.js”这些是下面的这个格式:

/您的项目名称/dwr/util.js

后面的dwr/util.js是固定的表达,项目名称按照自己的需求来写就行了。

客户端怎么调用服务器端方法?

通过刚才的js脚本配置,浏览器这端就可以调用WEB服务器的Java方法了。核心就是通过

<script type='text/javascript'src='/dwrtest/dwr/interfae/DwrPush.js'></script>

来实现的。DwrPush就是我们写的那个Java类,而这个Send函数就是类中的方法咯。

按照代码一步步的看下去,发现Send方法中构建了一段脚本调用了前端的一个函数,然后发送给所有会话用户。

这说明前后端已经全部打通了。前后端都可以自由的调用。

DWR服务器推送技术的更多相关文章

  1. Web端服务器推送技术原理分析及dwr框架简单的使用

    1 背景 “服务器推送技术”(ServerPushing)是最近Web技术中最热门的一个流行术语.它是继“Ajax”之后又一个倍受追捧的Web技术.“服务器推送技术”最近的流行跟“Ajax ”有着密切 ...

  2. web服务器推送技术

    传统模式的 Web 系统以客户端发出请求.服务器端响应的方式工作.不能满足很多现实应用的需求,譬如: 监控系统:后台硬件温度.电压发生变化: 即时通信系统:其它用户登录.发送信息: 即时报价系统:后台 ...

  3. PHP Web实时消息后台服务器推送技术---GoEasy

    越来越多的项目需要用到实时消息的推送与接收,怎样用php实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 ...

  4. Ruby Web实时消息后台服务器推送技术---GoEasy

    越来越多的项目需要用到实时消息的推送与接收,怎样用Ruby实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推 ...

  5. 深入了解 Dojo 的服务器推送技术

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...

  6. Server push(服务器推送技术)

    一.服务器推送技术Server Push详解:        推送技术Server Push的基础思想是将浏览器主动查询信息改为服务器主动发送信息.服务器发送一批数据,浏览器显示这些数据,同时保证与服 ...

  7. JavaEE开发之SpringMVC中的静态资源映射及服务器推送技术

    在上篇博客中,我们聊了<JavaEE开发之SpringMVC中的自定义拦截器及异常处理>.本篇博客我们继续的来聊SpringMVC的东西,下方我们将会聊到js.css这些静态文件的加载配置 ...

  8. 基于comet服务器推送技术(web实时聊天)

    http://www.cnblogs.com/zengqinglei/archive/2013/03/31/2991189.html Comet 也称反向 Ajax 或服务器端推技术.其思想很简单:将 ...

  9. HTML5中的SSE(服务器推送技术)

    本文原链接:https://cloud.tencent.com/developer/article/1194063 SSE技术详解:一种全新的HTML5服务器推送事件技术 前言 概述 基本介绍 与We ...

随机推荐

  1. weblogic启动节点服务java.lang.ClassCastException:com.octestring.vde.backend.BackendRoot cannot be cast to com.octestring.vde.backend.standard.BackendStandard类型转换异常

    weblogic启动节点服务器报错,java.lang.ClassCastException:com.octestring.vde.backend.BackendRoot cannot be cast ...

  2. 从零开始的vue学习笔记(六)

    混入 混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能.简单解释就是把一个Vue组件中的内容提供给别的组件来用.例子: // 定义一个混入对象 var myMixin ...

  3. Java生鲜电商平台-生鲜系统中微服务架构设计与分析实战

    Java生鲜电商平台-生鲜系统中微服务架构设计与分析实战 说明: Java生鲜系统中微服务的拆分应该如何架构设计与分析呢?以下是我的实战中的设计与经验分析. 目录 1. 微服务简介2. 当前现状3. ...

  4. Spring(4)AOP

    Spring(4)AOP 1.AOP概述 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种 ...

  5. C# 序列化和反序列化(xml 文件)

    序列化是将对象保存为文本文件或二进制文件: 反序列化则是读取文件信息,还原为对象: 序列化保存为文本内容,主要是 xml 和 json 两种,这里介绍序列化为 xml 文件的方式. 想要序列化,先要在 ...

  6. numpy函数查询手册

    写了个程序,对Numpy的绝大部分函数及其说明进行了中文翻译. 原网址:https://docs.scipy.org/doc/numpy/reference/routines.html#routine ...

  7. quarter软件的破解

    链接;http://www.openedv.com/forum.php?mod=viewthread&tid=275857&extra=page%3D1 这个是正点原子提供的破解方法, ...

  8. HTTP常见响应状态码及解释、常用请求头及解释

    1.HTTP常见响应状态码及解释2XX Success(成功状态码) 200 表示从客户端发来的请求在服务器端被正常处理204 该状态码表示服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主 ...

  9. [考试反思]1112csp-s模拟测试112:二返

    连着两场... 信心赛.但是题锅了,我也锅了. 然后Day2就不用考了. T1没开够long long.(a+b+c+0ll)与(0ll+a+b+c)还是有一点区别的. T2出题人用Windows出数 ...

  10. new String()与toString

    str.toString是调用了str这个object对象的类的toString方法.一般是返回这么一个String:[class name]@[hashCode].new String(str)是根 ...