`
lucifinilhades
  • 浏览: 87285 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

DWR的engine.js引擎属性及调用

阅读更多

在DWR中,engine.js是用来转换动态生成接口的JavaScript函数,它是DWR的工作引擎,所以一个引用DWR应用的页面都要使用它。

<c:set var="base">
${pageContext.request.scheme}://
${pageContext.request.serverName}:${pageContext.request.serverPort}
${pageContext.servletContext.contextPath}
</c:set>
<script type="text/javascript" src="${base}/dwr/engine.js"></script>

可以通过dwr.engine.setX()函数来设置全局属性。例如:

dwr.engine.setTimeout(2000);

或者在单次调用级别上假设Remote被DWR暴露出来设置,例如:

Remote.singleMethod(params, {
    callback: function(data) { /* code */ },
    timeout: 2000
});

批量执行的属性

选项
说明
async
设置是否为异步调用。如果为true则为异步调用。
headers
在XHR调用中加入额外的头信息。
parameters
可以通过Meta-datarequest.getParameter()取得元数据。
httpMethod
选择GET或者POST。
rpcType
选择是使用xhr、iframe或者script-tag来实现远程调用。
timeout
设定超时时长,单位是ms。

可以通过使用batch来批量执行远程调用。这样可以减少与服务器的交互次数、提高程序的响应速度。一个batch调用以dwr.engine.beginBatch()开始,并以dwr.engine.endBatch()结束。当调用endBatch()后,就结束了本次批量远程调用,这样DWR在与服务器的一次交互中执行它们。例如:

dwr.engine.beginBatch();
Remote.methodInBatch1(params, callback1);
Remote.methodInBatch2(params, callback2);
dwr.engine.endBatch({timeout: 1000});

可以通过调用dwr.engine.setTimeout()来设置单次调用和批量调用级别的元数据选项的超时值。如果设置值为0(默认)可以将超时关闭。它的单位是毫秒。如果调用超时发生,错误处理器就会被调用。例如:

Remote.method(params, {
    callback: function(data) { alert("进行远程调用"); },
    errorHandler: function(msg) { alert("远程调用出错:" + msg); },
    timeout: 2000
});

提示:如果把一些远程调用放在一起执行也会产生一些影响,例如不能在batch里执行同步调用。所有的元数据选项,例如hooks、timeout、errorHandler都是batch级别的,而不是单次调用级别上的,所以如果一个batch中有两个调用设置了不同的超时,除了最后一个起作用,其他的设置都被忽略。

在DWR中有一些选项用来控制远程调用的处理方式。

dwr.engine.setAsync(flag)

该选项指定XHR是否为异步调用,默认为true。如果使用的是IFrame或者ScriptTag,这一选项将被忽略。一般来说把它设置为false会使浏览器运行变慢。设置全局同步机制的方法为:

dwr.engine.setAsync(true);

设置成单次调用同步的方法为:

Remote.method(params, {
    callback: function(data) {/* code */},
    async: true
});

dwr.engine.setMethod(newmethod)

该选项用来设置新的方法。它不能保证使用选择的方法,它只是保证首先尝试使用那个方法。newmethod必须是dwr.engine.XMLHttpRequest、dwr.engine.IFrame或dwr.engine.ScriptTag。其中XMLHttpRequest是默认值。当ActiveX被禁时,可以使用IFrame,尽管DWR能自动检测出这种情况并切换到IFrame。当要突破跨域调用的限制时,就可以使用ScriptTag。例如,要设置全局的远程调用方法:

dwr.engine.setMethod(dwr.engine.IFrame);

设置成单次调用同步的方法为:

Remote.method(params, {
    callback: function(data) {/* code */},
    method: dwr.engine.IFrame
});

在batch里设置的方法为:

dwr.engine.beginBatch();
Remote.methodInBatch1(params, callback1);
Remote.methodInBatch2(params, callback2);
dwr.engine.endBatch({method: dwr.engine.IFrame});

dwr.engine.setVerb(verb)

该选项允许选择POST和GET方法,无论使用IFrame还是XMLHttpRequest方法,当一些浏览器不支持XHR-POST方法时,DWR就自动切换到GET,即使设置POST为verb,所以setVerb()应当被仅仅作为一个提示。如果使用ScriptTag来远程调用,没有verb的设置,例如,设置全局远程调用的verb方法为:

dwr.engine.setVerb("GET");

设置单次调用verb方法为:

Remote.method(params, {
    callback: function(data) {/* code */},
    verb: "GET"
});

在batch中调用verb的方法为:

dwr.engine.beginBatch();
Remote.methodInBatch1(params, callback1);
Remote.methodInBatch2(params, callback2);
dwr.engine.endBatch({verb: "GET"});

处理器及回调处理器的属性

选项 说明
errorHandler 当出现错误时的动作。服务器端的异常通过exceptionHandler来处理。
warningHandler 由于浏览器的bug引起问题时的动作,默认值设置为null(关闭)。
textHtmlHandler 当得到不正常的text/html页面时的动作(通常表示超时)。
callback 调用成功以后的要执行的回调函数,应该只有一个参数:远程调用得到的数据。
exceptionHandler 远程调用失败的动作,一般是服务器端异常或者数据转换问题。

如果DWR远程调用失败,就会调用错误和警告handler并传递错误消息。可以用在alert()窗口或状态栏中来显示错误信息。也可以使用dwr.engine.setErrorHandler(function)来改变错误处理函数,同样通过dwr.engine.setWarningHandler(function)来改变警告处理方式。

Hooks的属性

选项 说明
preHook 远程调用前执行的函数。
postHook 远程调用后执行的函数。

可以通过调用dwr.engine.setPreHook(function)和dwr.engine.setPostHook(function)来设置远程Hooks,如果想在DWR调用之前显示一个提示,可以设置pre-hooks函数。它将会被调用,但是没有参数传递到这个函数。为防止一些按钮在调用期间被多次单击,可以使用一些按钮在调用期间不可用,可以应用pre-hooks这一功能。pre-hooks和post-hooks一起使用来逆转pre-hooks产生的一些改变。

全局选项

选项 说明
ordered DWR是否支持顺序调用。
pollType 选择xhr或iframe的反转Ajax。
reverseAjax 是否查找inbound调用。
onBackButton 用户按了back按钮后的动作。
onForwardButton 用户按了forward按钮的动作。

因为Ajax一般是异步调用,所以远程调用不会按照调用时发送的顺序返回。可通过用dwr.engine.setOrdered(boolean)来设置返回的结果严格按照发送时的顺序返回。DWR在上一个请求安全返回后才会发送下一个请求。DWR的默认值为false,表示不能保证远程调用不会按照调用时发送的顺序返回。

提示:把这个属性的值设置为true,会减慢应用程序的运行,如果一个消息丢失。浏览器就不会再响应,所以在使用这一功能之前需要综合考虑。

分享到:
评论

相关推荐

    DWR(包括engine.js+util.js).rar

    `engine.js`是DWR的核心脚本,它实现了JavaScript和Java之间的远程调用(Remote Procedure Calls, RPC)。这个文件处理了请求的发送、响应的接收以及结果的处理。通过`engine.js`,前端开发者可以轻松地创建Java对象...

    dwr util.js engine.js

    总结来说,DWR提供了一个强大的工具,使得Web开发者可以通过JavaScript轻松地调用服务器端的Java方法,而`util.js` 和 `engine.js` 分别作为工具库和核心引擎,是实现这一功能的关键组件。在实际开发中,理解和掌握...

    dwr.jar engine.js util.js,Dwr相关

    "engine.js"是DWR的客户端引擎文件,它包含了一组JavaScript库,使得在浏览器中可以轻松地调用服务器端的Java方法。这个文件应该被包含在Web页面中,以便Web应用能够利用DWR的功能。`engine.js`提供了诸如对象转换、...

    dwr教程+dwr.jar+util.js+engine.js

    `engine.js` 是DWR引擎的核心,负责处理与服务器的通信,包括请求的发送、响应的处理以及错误管理。这两个文件是DWR运行的基础,通常会被包含在HTML页面中,以便在客户端执行DWR相关的操作。 `DWR_...

    dwr 例子,jar包,engine.js util.js 学习笔记

    这个压缩包包含的是DWR的实例、相关的jar包以及两个重要的JavaScript文件——`engine.js`和`util.js`,这些都是学习DWR的关键组件。 1. **DWR基础概念**: DWR的核心功能是提供一种方式,使得客户端JavaScript可以...

    dwr js包 DwrEngine.js+DwrUtil.js

    2. 接口暴露:在Java代码中,通过使用DWR的注解(如@RemoteInterface)来标记可被JavaScript调用的方法。 3. 引入库文件:在HTML页面中,需要引入DWR的JavaScript库文件(如DwrEngine.js和DwrUtil.js),以便在...

    dwr需要的js(searchaAuthor+engine.js+util.js).rar

    5. **DWR的使用**:在实际项目中,开发人员首先需要在服务器端设置DWR引擎,然后在客户端引用DWR的JavaScript库(如engine.js)。接着,可以定义JavaScript对象来映射服务器端的Java类,并使用这些对象来调用远程...

    JavaScript调用java方法——dwr步骤.docx

    ### JavaScript调用Java方法——DWR使用步骤详解 #### 一、DWR简介 DWR (Direct Web Remoting) 是一种使服务器端的Java对象能够被客户端JavaScript代码直接调用的技术。通过这种方式,开发人员可以轻松地实现客户端...

    DWR.xml配置文件说明书(含源码)

    默认的时候DWR将java void值转换成javascript的null值就是这样设置&lt;convert converter="null" match="void"/&gt;. 有时java.lang.Void也需要进行这样的转换,所以设置也是相似的&lt;convert converter="null" match="java....

    dwr.rar_dwr jar_dwr j_dwr jar_dwr.j_dwr.jar2

    DWR的主要目的是简化AJAX(异步JavaScript和XML)开发,通过提供一种方式,使得前端JavaScript可以直接调用后端Java方法,从而实现实时的数据交互,提高用户体验。 **dwr.jar**是DWR的核心库,包含了许多关键类和...

    dwr.xml配置描述及JSP上的引用_1

    &lt;script type="text/javascript" src="/dwr/engine.js"&gt; &lt;script type="text/javascript" src="/dwr/util.js"&gt; &lt;script type="text/javascript"&gt; DWRUtil.useLoadingMessage("正在处理..."); MyService....

    dwr所需的jar包及配置

    3. **engine.js** 和 **util.js**:这两个是DWR的JavaScript库。`engine.js`包含了与服务器通信的主要函数,它负责创建与服务器的连接、执行远程方法调用和处理返回的数据。`util.js`是一些实用函数的集合,用于辅助...

    ajax框架dwr例子.rar

    - **安全机制**:DWR提供了安全机制,包括签名、白名单和过滤器,以防止未授权的JavaScript调用服务器端方法。 2. **DWR的组成**: - **DWR Engine**:负责处理与服务器的通信,管理JavaScript与Java之间的映射。...

    DWR.xml.rar_dwr.xml

    这部分定义了哪些Java类可以被JavaScript调用。例如: ```xml &lt;create class="com.example.MyClass" javascript="myClass"&gt; ``` 这里,`MyClass`类可以被JavaScript通过`myClass`变量访问,并且可以...

    dwrDemo.war.zip_dwr_dwr.w

    1. **DWR引擎(DWR Engine)**:这是DWR的核心组件,它负责处理客户端请求,并将它们转发到相应的Java方法。同时,它也负责将Java对象转换成JavaScript可以理解的形式,反之亦然。 2. **配置(Configuration)**:...

    dwr用到的2个js文件

    2. **初始化**:在HTML页面中,引入`engine.js`和`util.js`,然后调用`DWREngine.init`来启动DWR引擎。 3. **调用**:使用`DWREngine.execute`或者其他由`engine.js`提供的方法,你可以直接在JavaScript中调用服务器...

    dwr所需要的jar包

    &lt;script src="/dwr/engine.js"&gt; &lt;script src="/dwr/util.js"&gt; ()"&gt;调用服务器 &lt;div id="result"&gt;&lt;/div&gt; function callServer() { MyService.sayHello(function(response) { document.getElementById('...

    dwr 各种调用方法

    JavaScript调用这部分非常直接,只需引入由DWR自动生成的接口文件`TestClass.js`,以及DWR的核心库`engine.js`和工具库`util.js`。然后,你可以直接调用`testClass.testMethod1()`执行Java方法。 2. **有简单...

    dwr-src.zip

    - **配置**:首先,开发者需要在Web应用的配置文件中配置DWR,指定哪些Java类和方法可以被JavaScript调用。 - **编译**:DWR会自动生成JavaScript文件,这些文件包含了Java方法的客户端代理,以便JavaScript可以...

Global site tag (gtag.js) - Google Analytics