有些情况下,你可能需要把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; }]);");
完。
分享到:
相关推荐
**一、DWR跨域访问** 1. **什么是跨域访问**:跨域是指浏览器出于安全原因,不允许不同源的页面之间进行交互。源由协议、主机名和端口号组成。DWR通过设置CORS(Cross-Origin Resource Sharing)策略,允许不同源的...
2. **创建可远程调用的Java类和方法**: 标记这些类和方法为可被DWR访问。 3. **生成JavaScript接口**: DWR会自动根据Java类生成对应的JavaScript接口,这些接口可以直接在客户端调用。 4. **在HTML/JavaScript中使用...
DWR简化了跨域问题,让开发者可以像调用本地函数一样调用远程服务。 6. **学习和开发**: 对于初学者,可以通过阅读官方文档和示例代码了解如何配置DWR,以及如何在项目中使用它。熟练掌握DWR后,可以尝试自定义...
它处理了跨域问题,自动序列化和反序列化数据,并且支持异步调用,减少了页面刷新的需求。 2. **DWR的核心组件**: - **Engine**:引擎是DWR的核心,负责处理所有与远程调用相关的任务,包括安全、缓存、转换等。 ...
Remoting允许你在浏览器中直接调用服务器端的方法,Reverse Ajax则是指服务器可以主动向客户端推送数据,而CORS则解决了跨域访问的问题。 2. **DWR架构**:DWR由三个主要部分组成:`Engine`、`Servlet`和`...
DWR提供了一些安全机制,如跨域访问控制、JavaScript混淆等,以防止未经授权的访问。同时,DWR还支持批处理、缓存策略等优化手段,以提升应用性能。 ### 8. DWR与其他技术结合 DWR可以与Spring、Hibernate等其他...
在“dwr推送及js访问java代码”的项目中,我们可以看到如何利用DWR进行双向通信。首先,DWR的核心组件包括`DWR Engine`、`Servlet`和`AutoBean`等。`DWR Engine`负责在客户端和服务器之间建立连接,`Servlet`处理...
1. **远程调用**:DWR创建了一个安全的跨域JavaScript API,允许浏览器端的脚本直接调用服务器端的Java方法,实现数据的实时更新。 2. **批量调用与异步更新**:DWR支持批量调用多个服务器方法,以及异步处理,提高...
- **Web Remoting**:远程调用技术,让客户端能够跨域访问服务器端的资源。 - **AJAX**:异步JavaScript和XML,用于创建更动态、响应更快的网页,无需刷新整个页面即可更新内容。 - **JavaScript Framework**:...
DWR的配置包括设置允许跨域访问,暴露Spring Bean为JavaScript可用的方法,以及处理错误和异常。这样,当用户点击提交按钮时,JavaScript可以立即发送请求到服务器,验证验证码的正确性,然后根据结果给出反馈。 ...
例如,你可以在这里指定允许跨域访问的IP或域名,以及启用或禁用CSP(内容安全策略)。 4. **DWR配置说明**: - 在`dwr.xml`中,你可以配置`<allow>`元素来指定哪些Java类和方法可以暴露给JavaScript。例如: ```...
同时,需要在Web-INF目录下配置dwr.xml文件,定义允许客户端访问的服务器端方法。 4. **HelloDwr文件**: 这个文件很可能是项目中的一个示例,用于演示如何使用DWR。通常,它会包含一个简单的服务器端Java类,暴露一...
同时,由于DWR默认不允许跨域访问,可能需要配置CORS策略或者使用DWR的`crossDomain`属性。此外,对于返回的数据类型,DWR默认支持基本类型和部分复杂类型,如果需要返回自定义对象,需要实现序列化。 综上所述,...
DWR提供了一些安全特性,如CSRF防护、方法访问控制等。同时,可以通过配置减少网络传输的数据量,比如启用GZIP压缩,或者使用批处理调用来合并多个请求。 **七、实际应用** DWR常用于构建富互联网应用(RIA),例如...
3. **生成配置文件**:使用DWR生成器生成dwr.xml配置文件,定义允许客户端访问的Java方法。 4. **编写JavaScript代码**:使用DWR提供的API调用服务器方法,处理响应数据。 **4. DWR的典型应用场景** - **实时数据...
3. **DWR与Spring集成**:为了使DWR能访问到Spring管理的Bean,我们需要在DWR的`web.xml`配置文件中添加Spring的`ContextLoaderListener`,以及DWR的`ContextProvider`,以便在DWR初始化时加载Spring上下文。...
3. **安全性**:DWR提供了安全机制,如访问控制和签名,以确保跨域请求的安全性。 4. **实时更新**:DWR支持双向通信,可以实现实时的数据推送,如聊天室或股票报价应用。 5. **Ajax支持**:DWR使开发者能够轻松...
首先,DWR的核心功能是创建了一个安全的、跨域的AJAX(Asynchronous JavaScript and XML)桥梁,使得开发者能够在不刷新整个页面的情况下更新部分网页内容。通过使用DWR,你可以直接调用服务器上的Java方法,并将...