Dwr实现JAVA服务器端向客户端推送消息

2018-05-04  本文已影响70人  Hey_Shaw

1、服务器端推送技术的产生和应用场景

2、客户端得到通知的方式

web的访问机制中,天生就是用来pull数据的,只允许Browser端主动发起请求,像Server端请求数据,而Server端是被动的响应,不允许Server端向Browser端发送一个collection请求。没有为Server端向Browser端push数据提供一个设计实现。

变通方式实现:

3、什么事Dwr及其运行原理

4、XML配置

web.xml

<servlet>
    <servlet-name>dwr-invoker</servlet-name>
<!--    <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class> dwr2.x版本 -->
    <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class><!-- dwr3版本 -->
    <!-- 初始化参数 -->
    <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-invoker</servlet-name>
    <url-pattern>/dwr/*</url-pattern>
</servlet-mapping>

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元素中,creater="new"表示每调用一次MyDwr时,需要new一个这样的类; -->
        <create creator="new" javascript="service">
            <param name="class" value="全路径类" />
        </create>
    </allow>
</dwr>

创建页面

<@ page language="java" pageEncoding="UTF-8">
<!DOCTYPE html>
<html>
<head>
    <title>My JSP 'first_dwr.jsp' starting page</title>
    <script type="text/javascript" src="js/util.js"></script>
    <script type="text/javascript" src="js/engine.js"></script>
    <script type="text/javascript" src="dwr/interface/service.js"></script>
    <script type="text/javascript">
        function firstDwr(){
            service.sayHello("Jorwen",callBackHello) ;
        }

        function callBackHello(data){
            alert(data) ;
        }
    </script>
</head>
<body>
    <input type="button" name="button" value="测试" onclick="firstDwr()">
</body>
</html>

创建推送方法

public class SendPushService {
    
    // 发送消息
    public void send(String msg){
        System.out.println("==========调用了send方法===========") ;
        ScriptBuffer scriptBuffer = new ScriptBuffer() ; // 构造js脚本
        WebContext webContext = WebContextFactory.get() ;
        ScriptSession myScSession = webContext.getScriptSession() ;
        scriptBuffer.appendScript("dwrtest(") ;
        scriptBuffer.appendScript(msg) ;
        scriptBuffer.appendScript(")") ;
        Util util = new Util(myScSession) ;
        util.addScript(scriptBuffer) ;  // 向客户端推送消息
    }

}
上一篇 下一篇

猜你喜欢

热点阅读