下面我为大家提供一份详细的DWR内存兼容及无法调用问题解决方案攻略。
问题背景
当使用DWR技术开发应用程序时,可能会遇到以下两种问题:
- 内存兼容问题:当客户端和服务端的JDK版本不一致时,可能导致DWR转换音序列时,字节码不兼容,无法正常工作。
- 无法调用问题:当客户端和服务端分别位于不同的域名下时,由于浏览器的同源政策限制,有些浏览器可能会阻止客户端调用服务端的Java方法,导致无法正常工作。
解决方案
为了解决以上问题,我们可以采取以下措施:
解决内存兼容问题
- 确保客户端和服务端的JDK版本一致。
- 使用DWR提供的
<exclude>
标签过滤掉与转换不兼容的类。
例如:如下代码表示在调用xxxService
类的方法时,将排除转换不兼容的xxx
类和yyy
类。
<dwr>
<allow>
<convert converter="bean" match="xxxService">
<exclude name="xxx"/>
<exclude name="yyy"/>
</convert>
</allow>
</dwr>
解决无法调用问题
- 部署客户端和服务端在同一域名下。
- 配置客户端和服务端的CORS策略,允许跨域请求。
例如:在服务端添加以下代码,表示允许所有域名下的请求访问。
@CrossOrigin("*")
@RestController
public class XxxController {
//...
}
在客户端请求时添加Access-Control-Allow-Origin
头部信息。
$.ajax({
type: 'POST',
url: 'http://xxx.com/testService',
data: {testObject:testObject},
crossDomain: true,
success: function(result){
console.log(result);
}
});
示例说明
示例1:DWR内存兼容问题
假设我们使用的是JDK 1.7,而客户端电脑上是JDK 1.8,由于JDK 1.8的字节码不兼容,导致DWR无法正常调用服务端的方法。此时,我们需要采取如下措施:
- 确保客户端和服务端的JDK版本一致,即都为JDK 1.7或都为JDK 1.8。
- 使用DWR提供的
<exclude>
标签过滤掉与转换不兼容的类。例如,在DWR配置文件中添加以下代码:
<dwr>
<allow>
<convert converter="bean" match="xxxService">
<exclude name="xxx"/>
<exclude name="yyy"/>
</convert>
</allow>
</dwr>
以上代码表示在调用xxxService
类的方法时,将排除转换不兼容的xxx
类和yyy
类。经过以上配置后,DWR就可以正常工作了。
示例2:DWR无法调用问题
假设我们的服务端代码和客户端代码部署在不同的域名下,例如服务端为http://server.xxx.com
,而客户端为http://client.yyy.com
。当客户端使用DWR技术调用服务端的方法时,由于浏览器的同源政策限制,DWR会因无法调用服务端的方法而报错。此时,我们需要采取如下措施:
- 部署客户端和服务端在同一域名下,例如都为
http://xxx.com
。 - 配置客户端和服务端的CORS策略,允许跨域请求。
例如,在服务端添加以下代码,表示允许所有域名下的请求访问。
@CrossOrigin("*")
@RestController
public class XxxController {
//...
}
在客户端请求时添加Access-Control-Allow-Origin
头部信息。
$.ajax({
type: 'POST',
url: 'http://xxx.com/testService',
data: {testObject:testObject},
crossDomain: true,
success: function(result){
console.log(result);
}
});
以上配置经过部署后,DWR就可以正常跨域调用服务端的方法了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:DWR内存兼容及无法调用问题解决方案 - Python技术站