`
zerozone
  • 浏览: 206118 次
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多
有些情况下,你可能需要把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.jar/dwr-2.0.5-src.zip/dwr.zip

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

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

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

    DWR中文文档

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

    dwr3.0搭建与讲解

    DWR提供了一些安全机制,如跨域访问控制、JavaScript混淆等,以防止未经授权的访问。同时,DWR还支持批处理、缓存策略等优化手段,以提升应用性能。 ### 8. DWR与其他技术结合 DWR可以与Spring、Hibernate等其他...

    dwr推送及js访问java代码

    在“dwr推送及js访问java代码”的项目中,我们可以看到如何利用DWR进行双向通信。首先,DWR的核心组件包括`DWR Engine`、`Servlet`和`AutoBean`等。`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默认支持基本类型和部分复杂类型,如果需要返回自定义对象,需要实现序列化。 综上所述,...

    java 采用dwr框架构实现ajax

    DWR提供了一些安全特性,如CSRF防护、方法访问控制等。同时,可以通过配置减少网络传输的数据量,比如启用GZIP压缩,或者使用批处理调用来合并多个请求。 **七、实际应用** DWR常用于构建富互联网应用(RIA),例如...

    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.rar_dwr_dwr jsp_jsp d_jsp dwr

    首先,DWR的核心功能是创建了一个安全的、跨域的AJAX(Asynchronous JavaScript and XML)桥梁,使得开发者能够在不刷新整个页面的情况下更新部分网页内容。通过使用DWR,你可以直接调用服务器上的Java方法,并将...

Global site tag (gtag.js) - Google Analytics