加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

DWR初识

发布时间:2020-12-15 21:43:01 所属栏目:百科 来源:网络整理
导读:一、DWR的作用: DWR(Direct Web Remoting)是一个开源的类库,可以帮助开发人员开发包含AJAX技术的网站.它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一样. 它包含两个主要的部分:允许JavaScript从WEB服务器上一个遵循了AJ
一、DWR的作用:

DWR(Direct Web Remoting)是一个开源的类库,可以帮助开发人员开发包含AJAX技术的网站.它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一样.

  它包含两个主要的部分:允许JavaScript从WEB服务器上一个遵循了AJAX原则的Servlet(小应用程序)中获取数据.另外一方面一个JavaScript库可以帮助网站开发人员轻松地利用获取的数据来动态改变网页的内容.

  DWR采取了一个类似AJAX的新方法来动态生成基于JAVA类的JavaScript代码.这样WEB开发人员就可以在JavaScript里使用Java代码就像它们是浏览器的本地代码(客户端代码)一样;但是Java代码运行在WEB服务器端而且可以自由访问WEB 服务器的资源.出于安全的理由,WEB开发者必须适当地配置哪些Java类可以安全的被外部使用.

  这个从JAVA到JavaScript的远程功能方法给DWR的用户带来非常像传统的RPC机制,就像RMI或者SOAP一样,而且拥有运行在WEB上但是不需要浏览器插件的好处.

  DWR不认为浏览器/WEB服务器协议是重要的,而更乐于保证编程界面的简单自然.对此最大的挑战就是把AJAX的异步特性和正常JAVA方法调用的同步特性相结合.在异步模式下,结果数据在开始调用之后的一段时间之后才可以被异步访问获取到.DWR允许WEB开发人员传递一个回调函数,来异步处理Java函数调用过程.


二、DWR的环境搭建:
1、下载commons-logging.jar, dwr.jar这两个Jar包。
2、把这两个JSR包复制到lib目录下。
通过上面的两步,就把DWR集成到我们的开发环境中去了。

三、第一个DWR例子
功能: 在web页面,通过JS接收DWR返回的数据,局部刷新界面。
工程目录结构图:




1、服务端的Java代码:
package com.xm.dwr;
public class StuDWR {
public String say(int name) {
return "Hello "+name;
}
}

2、dwr.xml配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" " http://www.getahead.ltd.uk/dwr/dwr20.dtd">
<dwr>
<allow>
<create creator="new" javascript="stu">
<param name="class" value="com.xm.dwr.StuDWR" />
</create>
</allow>
</dwr>

说明:

  1. <allow>:标签中包括可以暴露给javascript访问的东西。
  2. <create>:标签中指定javascript中可以访问的java类,并定义DWR应当如何获得要进行远程的类的实例。
  3. creator="new":属性指定java类实例的生成方式,new意味着DWR应当调用类的默认构造函数来获得实例,其他的还有spring方式,通过与IOC容器Spring进行集成来获得实例等等。
  4. javascript=" testClass ":属性指定javascript代码访问对象时使用的名称。标签指定要公开给javascript的java类名。
  5. <include>:标签指定要公开给javascript的方法。不指定的话就公开所有方法。
  6. <exclude>:标签指定要防止被访问的方法。


3、web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns=" http://java.sun.com/xml/ns/javaee"
xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=" http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>wgrDWR</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>wgrDWR</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
</web-app>

说有: 该servlet与普通的servlet配置形式没有区别。只是要注意到具体的配置内容之间的区别。红色加粗部分是要注意的地方。

4、index.jsp部分代码:
<script type='text/javascript' src='/HelloDWR/dwr/interface/stu.js'></script>
<script type='text/javascript' src='/HelloDWR/dwr/engine.js'></script>
<script type='text/javascript' src='/HelloDWR/dwr/util.js'></script>

<script type="text/javascript">
function test() {
//此处的stu就是第2步中 <create creator="new" javascript="stu" >
//say函数,就是在Java代码中定义的say函数。这里的say是一个代理函数
//该代理函数比java中,在原来参数后面要始终多出一个回调参数。
stu.say(12,cb);
}
function cb(data) { //cb回调函数,用于接收从服务端返回的值。且返回值保存到data当中。
document.getElementById("in").innerHTML = data;
}
</script>
</head>
<body>
<a href="javascript:test();">ok</a> //JS的伪链接。
<div id="in"></div>
</body>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读