dwr使用

作者: 不二不二熊 | 来源:发表于2019-09-28 22:16 被阅读0次
    一、起始

    尽管现在websocket通信十分流行,但是在很早之前的某个项目中还是使用到了dwr后台主动向前台推送消息,现在记录下用法。

    二、使用
    • 引入dwr包
    <dependency>
        <groupId>org.directwebremoting</groupId>
        <artifactId>dwr</artifactId>
        <version>3.0.2-RELEASE</version>
        <type>pom</type>
    </dependency>
    
    • web.xml配置
      <!-- DWR -->
      <servlet>
        <servlet-name>dwr-invoker</servlet-name>
        <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
        <!-- <init-param> <param-name>config-1</param-name> <param-value>WEB-INF/dwr.xml</param-value>
            </init-param> -->
        <init-param>
          <param-name>debug</param-name>
          <param-value>false</param-value>
        </init-param>
        <init-param>
          <param-name>pollAndCometEnabled</param-name>
          <param-value>true</param-value>
        </init-param>
        <init-param>
          <param-name>classes</param-name>
          <param-value>java.lang.Object</param-value>
        </init-param>
        <init-param>
          <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>
        <!-- polling方式:在comet方式的基础之上,再配置以下参数 -->
        <!-- <init-param>
             <param-name>org.directwebremoting.extend.ServerLoadMonitor</param-name>
             <param-value>org.directwebremoting.impl.PollingServerLoadMonitor</param-value>
         </init-param>-->
    
        <!-- 毫秒数。页面默认的请求间隔时间是5秒 -->
        <init-param>
          <param-name>disconnectedTime</param-name>
          <param-value>3000</param-value> <!-- 60000 -->
        </init-param>
    
        <init-param>
          <param-name>crossDomainSessionSecurity</param-name>
          <param-value>false</param-value>
        </init-param>
        <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-invoker</servlet-name>
        <url-pattern>/dwr/*</url-pattern>
      </servlet-mapping>
      <!-- DWR END -->
    
    • 前端引入js与配置
    <script src="${rc.contextPath}/dwr/engine.js"></script>
    <script src="${rc.contextPath}/dwr/util.js"></script>
    ···
       function addAlarm(info){
        var message = $.parseJSON(info);
           //业务逻辑
        }
    ...
    $(function(){
            //消息推送初始化
            dwr.engine.setActiveReverseAjax(true);
            //设置在页面关闭时,通知服务端销毁会话
            dwr.engine.setNotifyServerOnPageUnload(true);
        });
    
    • 后台
    Browser.withPage(ServerContextFactory.get().getContextPath()+pageUrl, new Runnable() {
                @Override
                public void run() {
                    ScriptSessions.addFunctionCall(funcName, json);
                }
            });
    

    相关文章

      网友评论

          本文标题:dwr使用

          本文链接:https://www.haomeiwen.com/subject/qhvquctx.html