`
zerozone
  • 浏览: 203749 次
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多
有些情况下,你可能需要把DWR的客户端部署到别的机器并从该机器远程访问DWR服务。例如我们有个Library App用到了DWR,但需要支持跨域(Cross Domain)访问该Library的服务。

类似文章:
http://www.iteye.com/topic/337460

实际上DWR是支持跨域访问的。不过这样做会带来一些不安全因素。本质上,DWR的跨域访问还是通过script tag,没啥新鲜的,只不过现在做的比较简单,不像以前还需要手工设置为script tag。

分析:
DWR Engine下载到客户端之后需要与服务器端建立连接。但下载的文件包含很多被DWR框架替换过的变量,例如版本号以及一个重要属性_pathToDwrServlet。这个属性用于存储DWR应用的路径(默认情况下,它是不完整的。它仅包含应用名及路径名,而不包括服务器地址及端口,如http://10.32.98.124:8080。完整的Path应该是"http://10.32.98.124:8080/myapp/dwr/"。这将导致当从其他域下载该文件时,客户端无法连接提供服务的应用)。

思路:
1)修改engine,不允许DWR替换该路径(留待我们自己设置)
2)不连接服务器(留待路径设置正确之后,再建立该连接)

步骤如下:
1)更改engine.js
   打开dwr.jar,在org.directwebremoting目录下找到engine.js,将如下两行代码注释掉:
  /** The default path to the DWR servlet */
  //dwr.engine._pathToDwrServlet = "${pathToDwrServlet}";
  
  // Fetch the scriptSessionId from the server
  //eval("${initCode}");
  

  修改_execute方法,添加如下代码:
 
dwr.engine._execute = function(path, scriptName, methodName, args) {
    if (path.indexOf("http://") < 0) {
		if (dwr.engine._pathToDwrServlet) {
			path = dwr.engine._pathToDwrServlet;
		}
	}
    var singleShot = false;
    ...
  }


2) 服务器配置
  
      <init-param>
          <param-name>crossDomainSessionSecurity</param-name >
          <param-value>false</param-value>
      </init-param >
      <init-param >
          <param-name>activeReverseAjaxEnabled</param-name>
          <param-value>true</param-value>
      </init-param>
      <init-param>
          <param-name>allowScriptTagRemoting</param-name >
          <param-value>true</param-value>
      </init-param>
      <init-param>
          <param-name>allowGetForSafariButMakeForgeryEasier</param-name> 
          <param-value>true</param-value>
      </init-param>

3) 在客户端加载dwr/engine.js之后,手工执行下列代码:
  
dwr.engine._pathToDwrServlet = "http://10.32.98.124:8080/myapp/dwr";
eval("dwr.engine._execute(dwr.engine._pathToDwrServlet, '__System', 'pageLoaded', [ function() { dwr.engine._ordered = false; }]);");


完。
分享到:
评论
2 楼 xinhud 2017-05-09  
改完之后特别慢。楼主知道是什么原因不?
1 楼 liuting 2011-05-30  
engine.js是跨域访问的,改如何写引用它的路径啊

相关推荐

    dwr跨域访问以及dwr的使用+dwr.jar

    **一、DWR跨域访问** 1. **什么是跨域访问**:跨域是指浏览器出于安全原因,不允许不同源的页面之间进行交互。源由协议、主机名和端口号组成。DWR通过设置CORS(Cross-Origin Resource Sharing)策略,允许不同源的...

    dwr实现ajax功能ajax+dwr

    2. **创建可远程调用的Java类和方法**: 标记这些类和方法为可被DWR访问。 3. **生成JavaScript接口**: DWR会自动根据Java类生成对应的JavaScript接口,这些接口可以直接在客户端调用。 4. **在HTML/JavaScript中使用...

    dwr实例,从后台取数据显示

    它处理了跨域问题,自动序列化和反序列化数据,并且支持异步调用,减少了页面刷新的需求。 2. **DWR的核心组件**: - **Engine**:引擎是DWR的核心,负责处理所有与远程调用相关的任务,包括安全、缓存、转换等。 ...

    dwr.jar/dwr-2.0.5-src.zip/dwr.zip

    DWR简化了跨域问题,让开发者可以像调用本地函数一样调用远程服务。 6. **学习和开发**: 对于初学者,可以通过阅读官方文档和示例代码了解如何配置DWR,以及如何在项目中使用它。熟练掌握DWR后,可以尝试自定义...

    DWR中文文档

    Remoting允许你在浏览器中直接调用服务器端的方法,Reverse Ajax则是指服务器可以主动向客户端推送数据,而CORS则解决了跨域访问的问题。 2. **DWR架构**:DWR由三个主要部分组成:`Engine`、`Servlet`和`...

    ssh+dwr 整合案例

    1. **远程调用**:DWR创建了一个安全的跨域JavaScript API,允许浏览器端的脚本直接调用服务器端的Java方法,实现数据的实时更新。 2. **批量调用与异步更新**:DWR支持批量调用多个服务器方法,以及异步处理,提高...

    DWR中文教程(教程实在不可多得)

    - **Web Remoting**:远程调用技术,让客户端能够跨域访问服务器端的资源。 - **AJAX**:异步JavaScript和XML,用于创建更动态、响应更快的网页,无需刷新整个页面即可更新内容。 - **JavaScript Framework**:...

    验证码 spring + dwr

    DWR的配置包括设置允许跨域访问,暴露Spring Bean为JavaScript可用的方法,以及处理错误和异常。这样,当用户点击提交按钮时,JavaScript可以立即发送请求到服务器,验证验证码的正确性,然后根据结果给出反馈。 ...

    DWR所需js文件及jar包以及配置说明

    例如,你可以在这里指定允许跨域访问的IP或域名,以及启用或禁用CSP(内容安全策略)。 4. **DWR配置说明**: - 在`dwr.xml`中,你可以配置`&lt;allow&gt;`元素来指定哪些Java类和方法可以暴露给JavaScript。例如: ```...

    dwr可以直接运行的eclipse工程

    同时,需要在Web-INF目录下配置dwr.xml文件,定义允许客户端访问的服务器端方法。 4. **HelloDwr文件**: 这个文件很可能是项目中的一个示例,用于演示如何使用DWR。通常,它会包含一个简单的服务器端Java类,暴露一...

    struts2与dwr整合实例

    同时,由于DWR默认不允许跨域访问,可能需要配置CORS策略或者使用DWR的`crossDomain`属性。此外,对于返回的数据类型,DWR默认支持基本类型和部分复杂类型,如果需要返回自定义对象,需要实现序列化。 综上所述,...

    dwr中文文档pdf格式

    3. **生成配置文件**:使用DWR生成器生成dwr.xml配置文件,定义允许客户端访问的Java方法。 4. **编写JavaScript代码**:使用DWR提供的API调用服务器方法,处理响应数据。 **4. DWR的典型应用场景** - **实时数据...

    Spring与DWR结合

    3. **DWR与Spring集成**:为了使DWR能访问到Spring管理的Bean,我们需要在DWR的`web.xml`配置文件中添加Spring的`ContextLoaderListener`,以及DWR的`ContextProvider`,以便在DWR初始化时加载Spring上下文。...

    dwr软件包,文档、源代码、示例

    3. **安全性**:DWR提供了安全机制,如访问控制和签名,以确保跨域请求的安全性。 4. **实时更新**:DWR支持双向通信,可以实现实时的数据推送,如聊天室或股票报价应用。 5. **Ajax支持**:DWR使开发者能够轻松...

    DWR教程

    这将允许你访问`http://localhost:port/app/dwr`,查看自动生成的测试页面并测试Java方法。 #### 1.3 多个`dwr.xml`配置文件 - **一个Servlet,多个`dwr.xml`**:你可以通过`init-param`指定多个配置文件,如: ```...

    DWR与后台异步交互简单例子

    1. **dwr.xml**:这是DWR的自定义配置文件,用于定义哪些Java方法可以被JavaScript访问。例如,你可以指定某个服务类及其公开的方法,以及这些方法的输入参数类型等。这样,JavaScript代码就可以安全地调用这些方法...

    dwr-1.1.3-src.zip

    1. **配置**:在服务器端,你需要在web.xml中配置DWR的Servlet,定义允许访问的Java类和方法。 2. **编译**:DWR通过动态生成JavaScript文件,这些文件包含了对服务器端方法的引用,使得客户端可以直接调用。 3. **...

    DWR开发步骤与配置文件详解

    另外,注释掉的部分`&lt;init-param&gt;`涉及跨域会话安全,如果需要允许跨域请求,可以取消注释并调整其值。 3. **创建类** 创建一个简单的Java类,例如`Service`,在这个类中定义你希望在客户端调用的方法。例如,`...

    关于dwr的api的中文官方文档

    1. **白名单配置**:为了防止跨站脚本攻击,需要在`dwr.xml`中配置允许访问的类和方法。 2. **使用安全过滤器**:DWR提供了一种名为`CORSFilter`的过滤器,用于处理跨域请求的安全问题。 3. **数据验证**:在服务器...

    dwr3实现推送功能

    确保正确配置DWR的安全设置,例如限制可访问的Java方法、启用CSRF保护等。 9. **调试与监控** DWR 3 提供了内置的调试工具,可以帮助开发者查看和调试DWR请求和响应。此外,通过监控服务器日志,可以了解推送服务...

Global site tag (gtag.js) - Google Analytics