1、下载 dwr.jar 包,把它放到你的 webapp 的 WEB-INF/lib 目录下。
2、编辑配置文件,需要把下面的代码加到 WEB-INF/web.xml 文件中。<servlet> 那部分需要和其他的 <servlet> 在一起,<servlet-mapping> 部分也一样。
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>config-newbeeg</param-name>
<param-value>/WEB-INF/dwr-newbee.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
注意:debug参数在正式发布时要设为false;configXXXX参数指定了dwr的主配置文件。
3、开发DWR服务组件和数据组件
3.1、使用jre已有类作为服务组件。比如:java.util.Date
3.2、开发单实例公用服务组件。
public class ServicFactory {
// 以下为类域
private static final ServicFactory instance = new ServicFactory();
@SuppressWarnings("unused")
private static ServicFactory getInstance() {
return instance;
}
/**
* 用户登录验证
*
* @param userName 用户名
* @param password 用户密码
* @return boolean 返回true表示可以登录,false表示不能登录
* @Author guo
* @EditTime 2008-9-26 下午09:17:16
*/
public static boolean canLogin(String userName, String password){
return true;
}
// 以下为对象域
private ServicFactory() {
}
}
3.3、开发对象隔离服务组件
public class ServiceSum {
public ServiceSum() {
}
public int sum(int[] array){
int result = 0;
for (int i = 0; i < array.length; i++) {
result+=array[i];
}
return result;
}
public void setNCount(int count) {
System.out.println(count);
}
}
3.4、数据Bean
public class User {
private String id;
private String name;
public User() {
}
public User(String id,String name) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
4、在WEB-INF目录下的web.xml旁边创建一个dwr.xml文件。可以从最简单的配置开始:
<!DOCTYPE dwr PUBLIC
"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
"http://www.getahead.ltd.uk/dwr/dwr10.dtd">
<dwr>
<allow>
<create creator="new" javascript="JDate">
<param name="class" value="java.util.Date"/>
</create>
<create creator="new" javascript="ServiceSum">
<param name="class" value="com.newbee.service.ServiceSum"/>
<include method="sum"/>
<include method="setNCount"/>
</create>
<create creator="none" javascript="ServicFactory">
<param name="class" value="com.newbee.service.ServicFactory"/>
<include method="canLogin"/>
<include method="getUser" />
</create>
<convert match="com.newbee.bean.*" converter="bean"/>
</allow>
</dwr>
注意:
3.1、creator="new",表示生成一个对象;creator="none",表示调用类方法和属性(static)
3.2、javascript 指出在页面调用此方法活属性的js对象名称
3.3、include和exclude属性来更精确的控制远程可以被调用的方法
3.4、<convert match="com.newbee.bean.*" converter="bean"/>,把指定包中的Bean与页面中的js对象进行转换(bean必需包含无参数构造函数)
3.5、原生类型,String,像BigDecimal这样的简单对象及其数组和集合的转换器已经有了,不需要再指定。
5、获取DWR服务组件列表和使用某一组件需要引入的js文件
5.1、访问以下地址获取服务组件列表
http://localhost:8080/[YOUR-WEBAPP]/dwr/
5.2、获取使用某一组件要引入的js文件,点击上面列表中相应组件的链接可以看到如下的引入文件
<script type='text/javascript' src='/[应用名称]/dwr/interface/[组件名称].js'></script>
<script type='text/javascript' src='/[应用名称]/dwr/engine.js'></script>
<script type='text/javascript' src='/[应用名称]/dwr/util.js'></script>
注意: /[应用名称] 路径可以用 request.getContextPath() 替代。
6、在页面中使用定义的js对象
<script type='text/javascript' src='/newbee/dwr/interface/ServicFactory.js'></script>
<script type='text/javascript' src='/newbee/dwr/interface/ServiceSum.js'></script>
<script type='text/javascript' src='/newbee/dwr/interface/JDate.js'></script>
<script type='text/javascript' src='/newbee/dwr/engine.js'></script>
<script type='text/javascript' src='/newbee/dwr/util.js'></script>
<script language="javascript">
ServicFactory.canLogin('sean','123',
{
callback: function(msg) { alert(msg); },
timeout: 3000,
errorHandler: function(msg) { alert(msg); }
}
);
ServicFactory.getUser('12',
{
callback: function(user) { debugger;alert(user.id+'#'+user.name); },
timeout: 3000,
errorHandler: function(msg) { alert(msg); }
}
);
var arr=[12,23,5,3,25,98,76,54,56,76,3000];
ServiceSum.sum(arr,
{
callback: function(msg) { alert(msg); },
timeout: 3000,
errorHandler: function(msg) { alert(msg); }
}
);
ServiceSum.setNCount(100);
JDate.toString({
callback: function(msg) { alert(msg); },
timeout: 3000,
errorHandler: function(msg) { alert(msg); }
});
</script>
7、使用DWR开发流程
7.1、开发新服务组件类或添加服务组件中的方法
7.2、修改dwr配置文件
7.3、如果是开发的新服务器组件就需要在页面文件中引入对应的js文件