zoukankan      html  css  js  c++  java
  • DWR3.0(Direct Web Remoting)实践

    “DWR is a Java library that enables Java on the server and JavaScript in a browser to interact and call each other as simply as possible. With Reverse Ajax, DWR allows Java code running on a server to use client side APIs to publish updates to arbitrary groups of browsers. This allows interaction 2 ways - browser calling server and server calling browser. DWR supports Comet, Polling and Piggyback (sending data in with normal requests) as ways to publish to browsers.”

    上面的话是DWR官网给出的,浏览器请求服务器是很容易做到的,但是服务端主动与浏览器客户端的交互是一个难点。

    如果服务端主动而且实时的往浏览器上push数据,有哪些办法可以做到呢?

    1.       浏览器ajax请求

    浏览器被动利用ajax每隔一段时间进行请求,这样的做法有些盲目且给服务端带来较大的压力。

    2.       利用reverse ajax技术

    服务端可以主动调用客户端的js函数,来多浏览器的内容进行实时的更新,下面通过一个实例对DWRreverse ajax技术进行更深入的理解。

    首先,需要说明的是DWR是一个基于Java的开源library,所以实例的服务端语言限定在Java;其次,这个例子的目的是服务端主动而且实时的网客户端的textarea中写数据,达到模拟console输出的效果。

    eclipseDynamic Web Project类型的项目中进行如下的配置开发:

    1.       导入dwr.jarcommons-logging.jar

    2.       配置web.xml

    web.xml中加入如下的配置:

     

      

     dwr-invoker 
       org.directwebremoting.servlet.DwrServlet
    
       <init-param> 
              debug 
              true 
       param>
    
       <init-param> 
              pollAndCometEnabled 
              true 
        param>
    
        <init-param> 
                在WEB启动时是否创建范围为application的creator 
                initApplicationScopeCreatorsAtStartup 
                true 
        param>
    
        1
    
       dwr-invoker 
       /dwr/*

     

    3.       配置dwr.xml

    web.xml同级的目录中新建dwr.xml并进行如下配置:

    <?xml version="1.0" encoding="UTF-8"?> 
    <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://getahead.org/dwr/dwr10.dtd"> 
    
    <dwr> 
    
      <allow> 
    
        <create creator="new" javascript="Demo"> 
          <param name="class" value="com.demo.redirect.DwrDemo"/> 
        create> 
    
      allow> 
    
    dwr>

    4.       服务端Java开发

     

    package com.demo.redirect;
    
    import org.directwebremoting.Browser;
    import org.directwebremoting.ScriptSessions;
    
    publicclass DwrDemo {
    
    publicstaticvoid sendMsg(final String msg){
    
    Browser.withPage("/DeNA_Dynamic/index.html",new Runnable(){
    publicvoid run(){
    ScriptSessions.addFunctionCall("show", msg);
    }
    });
    
    }
    
    }

    /DeNA_Dynamic/index.html/项目名称/page名称,show为前端的js函数,msg为参数。

    5.       客户端JavaScript开发

    $(document).ready(function(){
    dwr.engine.setActiveReverseAjax(true);
    });
    
    function show(msg){
    var textarea = $("#text").append(msg+"
    ");
    textarea.scrollTop(textarea[0].scrollHeight - textarea.height());
    }

    服务端如果想往客户端push数据,在Java代码中调用sendMsg函数即可。

     

    Reference: http://directwebremoting.org/dwr/index.html

     

     

  • 相关阅读:
    Hive metastore三种配置方式
    hive学习(一)hive架构及hive3.1.1三种方式部署安装
    hiveserver2的配置和启动
    spark安装配置
    Sqoop-1.4.6安装部署及详细使用介绍
    搭建本地yum源服务器
    Centos7.X安装impala(RPM方式)
    Hive安装与配置详解
    【图文详解】Hadoop集群搭建(CentOs6.3)
    Linux下实现免密码登录(超详细)
  • 原文地址:https://www.cnblogs.com/williamxiao/p/3499975.html
Copyright © 2011-2022 走看看