近日闲来无聊,研究DWR,配置了半天终于搞定,遇到的问题记录一下,呵呵
开发环境:NetBeans6.5/Jdk1.6.10/Tomcat5.5.27/Dwr2.0.5
我的web.xml文件配置如下:
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<!--crossDomainSessionSecurity:设置成false能够从其他域进行请求-->
<init-param>
<param-name>crossDomainSessionSecurity</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>allowScriptTagRemoting</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
dwr.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd">
<dwr>
<allow>
<create creator="new" javascript="dwrService">
<param name="class" value="com.ffms.system.web.DWRService"/>
</create>
</allow>
</dwr>
页面部分代码如下:
<script type='text/javascript' src='/FFMS/dwr/interface/dwrService.js'></script>
//输入到方法中 参数 格式转换
function objectEval(text){
text = text.replace(/\n/g, ' ');
text = text.replace(/\r/g, ' ');
if (text.match(/^\s*\{.*\}\s*$/))
{
text = '[' + text + '][0]';
}
return eval(text);
}
//本例 alert 展现
var reply = function(data){
alert("ssss");
alert(dwr.util.toDescriptiveString(data, 2));
}
<html:password styleId="newPwd" property="newPwd" name="SmOperMngForm" maxlength="6" onchange="dwrService.checkPassword(objectEval($('newPwd').value), reply);"/>
java类源码如下:
package com.ffms.system.web;
/**
* 采用dwr框架进行动态ajax验证
* @author MalColm Mao
*/
public class DWRService {
public String checkPassword(String pwd){
System.out.println("pssswork is ok:" + pwd);
return "dwr success";
}
}
主要遇到两个问题:
(1)A request has been denied as a potential CSRF attack
解决该问题在web.xml中如上述设置crossDomainSessionSecurity为false即可
(2)allowScriptTagRemoting is false
解决该问题在web.xml中如上述设置allowScriptTagRemoting为true即可