• 认识DWR


    Direct Web Remoting 

    DWR的官网:http://directwebremoting.org/dwr/index.html

    什么是DWR?  DWR是一个Java库,使服务器上的Java和JavaScript的浏览器进行交互和相互调用尽可能简单。

      DWR 是一个可以允许你去创建 AJAX WEB 站点的 JAVA 开源库。它可以让你在浏览器中的 Javascript 代码调用 Web 服务器上的 Java 代码,就像在 Java 代码就在浏览器中一样。

    DWR 包含 2 个主要部分:

      •一个运行在服务器端的 Java Servlet,它处理请求并且向浏览器发回响应。

      •运行在浏览器端的 JavaScript,它发送请求而且还能动态更新网页。

    DWR 工作原理:

      是通过动态把 Java 类生成为 Javascript。它的代码就像 Ajax 魔法一样,你感觉调用就像发生在浏览器端,但是实际上代码调用发生在服务器端,DWR 负责数据的传递和转换。这种从 Java 到JavaScript的远程调用功能的方式使DWR用起来有种非常像RMI或者SOAP的常规RPC机制,而且DWR的优点在于不需要任何的网页浏览器插件就能运行在网页上。

      Java 从根本上讲是同步机制,然而 AJAX 却是异步的。所以你调用远程方法时,当数据已经从网络上返回的时候,你要提供有反调 (callback) 功能的 DWR。

      DWR 动态在 JavaScript 里生成一个 AjaxService 类,去匹配服务气端的代码。eventHandler 去调用它,然后 DWR 处理所有的远程细节,包括倒置 (converting) 所有的参数以及返回 Javascript 和 Java 之的值。在示例中,先在 eventHandler 方法里调用 AjaxService 的 getOptions() 方法,然后通过反调 (callback)方法 populateList(data) 得到返回的数据,其中 data 就是 String[]{"1", "2", "3"},最后再使用 DWR utility 把data 加入到下拉列表。

    =======================================================

    web.xml配置
    1.主要配置
      要加入到你的 web.xml 最少的代码就是简单地去申明 DWR servlet,没有它 DWR 就不起作用。
      有些额外的 servlet 参数,在有些地方很重要。

      尤其 debug 参数。这个扩展 DWR 的标准结构是使用<init-params>。
      

     1 <servlet>
     2       <servlet-name>dwr-invoker</servlet-name>
     3       <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
     4       <init-param>
     5           <param-name>debug</param-name>
     6           <param-value>true</param-value>
     7       </init-param>
     8  </servlet>
     9  <servlet-mapping>
    10       <servlet-name>dwr-invoker</servlet-name>
    11       <url-pattern>/dwr/*</url-pattern>
    12  </servlet-mapping>

      在 DWR2.x 之后,DwrServlets 是类 org.directwebremoting.servlet.DwrServlet ,尽管uk.ltd.getahead.dwr.DWRServlet 仍然可以用。在 DWR 1.x 你不得不使用后者。

      另外,启动服务时,如果报如下错。 

    java.lang.IllegalArgumentException: DefaultContainer can't find a classes
    

      是 DWR2.0 加入了 JDK5 的注释(annotations).DwrServlet 初始化的时候会去检查注释的类,找不到就抱错了。如果你不用 annotations 也可以忽略掉这个错误。不过看起来总是不爽。解决方案如下:

      

     1 <servlet>
     2     <servlet-name>dwr-invoker</servlet-name>
     3     <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
     4     <init-param>
     5 
     6         <param-name>debug</param-name>
     7         <param-value>true</param-value>
     8     </init-param>
     9     <init-param>
    10         <param-name>classes</param-name>
    11         <param-value>java.lang.Object</param-value>
    12     </init-param>
    13 </servlet>                

    ===================================================

    日志配置

      如果你正在使用 HttpServlet.log(), 以下的代码用来控制 DWR 日志

      

    1 <init-param>
    2     <param-name>logLevel</param-name>
    3     <param-value>DEBUG</param-value>
    4 </init-param>

    ===================================================

    多个 dwr.xml 配置和 J2EE 角色定义

      一般来说只需要一个 dwr.xml 文件,并且会被设为默认位置 WEB-INF/dwr.xml。所以你不需要配置。有 3 个原因说明你为何需要指定不同位置的 dwr.xml 文件:

      •你想保持 dwr.xml 的文件请参照下面的例子 

    <param-value>WEB-INF/classes/com/yourco/dwr/dwr.xml</param-value>

      •你可以有很多的远程方法类并且希望指定文件。在这个例子里将指定不同文件开始配置,不同的 param-name 将重复多次 DWR 将轮流读取它们。

       •DWR 能够使 J2EE URL 具有给与不同用户组不同权限的安全机制。通过起不同名字,URL 和权限。

    就像如下例子去使用 

    1 <init-param>
    2     <param-name>config*****</param-name>
    3     <param-value>WEB-INF/dwr.xml</param-value>
    4     <description>What config file do we use?</description>
    5 </init-param>

    用一个字符串”config” 作为开始,设置 param-name,每个 param-name 必须不同。

     1 <servlet>
     2     <servlet-name>dwr-user-invoker</servlet-name>
     3     <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
     4     <init-param>
     5         <param-name>config-user</param-name>
     6         <param-value>WEB-INF/dwr-user.xml</param-value>
     7     </init-param>
     8 </servlet>
     9 <servlet>
    10     <servlet-name>dwr-admin-invoker</servlet-name>
    11     <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
    12     <init-param>
    13         <param-name>config-admin</param-name>
    14         <param-value>WEB-INF/dwr-admin.xml</param-value>
    15     </init-param>
    16 </servlet>
    17 <servlet-mapping>
    18     <servlet-name>dwr-admin-invoker</servlet-name>
    19     <url-pattern>/dwradmin/*</url-pattern>
    20 </servlet-mapping>
    21 <servlet-mapping>
    22     <servlet-name>dwr-user-invoker</servlet-name>
    23     <url-pattern>/dwruser/*</url-pattern>
    24 </servlet-mapping>
    25 <security-constraint>
    26     <display-name>dwr-admin</display-name>
    27     <web-resource-collection>
    28         <web-resource-name>dwr-admin-collection</web-resource-name>
    29         <url-pattern>/dwradmin/*</url-pattern>
    30     </web-resource-collection>
    31     <auth-constraint>
    32         <role-name>admin</role-name>
    33     </auth-constraint>
    34 </security-constraint>
    35 <security-constraint>
    36     <display-name>dwr-user</display-name>
    37     <web-resource-collection>
    38         <web-resource-name>dwr-user-collection</web-resource-name>
    39         <url-pattern>/dwruser/*</url-pattern>
    40     </web-resource-collection>
    41     <auth-constraint>
    42         <role-name>user</role-name>
    43     </auth-constraint>
    44 </security-constraint>

    ====================================================

    插件配置

      大多数 DWR 的功能是可以作为插件的,所以就通过替换默认的类可以改变 DWR 的功能。你可以通过包含<init-param>去覆盖默认的实现。举个例子:

      

    1 <init-param>
    2     <param-name>
    3         org.directwebremoting.extend.ServerLoadMonitor
    4     </param-name>
    5     <param-value>com.example.MyCustomServerLoadMonitor</param-value>
    6 </init-param>    
    走在一起是缘分,在一起走是幸福; 在一起走是缘分,走在一起是幸福
  • 相关阅读:
    shell 环境变量
    websphere 进程
    shell 安装使用VIM
    shell seq 用法
    shell 变量自增
    WebService学习笔记系列(二)
    WebService学习笔记系列(一)
    类加载器及其委托机制的深入分析
    Java工具类:给程序增加版权信息
    QQ互联API接口失效,第三方网站的死穴
  • 原文地址:https://www.cnblogs.com/tarena/p/3675860.html
Copyright © 2020-2023  润新知