Spring Framework 集成,从而允许用户直接向 Web 客户机公开 bean。
DWR 真正的巧妙之处是,在用户配置了要向客户机公开的服务之后,它使用反射来生成 JavaScript 对
象,以便 Web 页面能够使用这些对象来访问该服务。然后 Web 页面只需接合到生成的 JavaScript 对象,就
像它们是直接使用服务一样;DWR 无缝地处理所有有关 Ajax 和请求定位的琐碎细节。
让我们仔细分析一下示例代码,弄清它是如何工作的。
应用程序细节:DWR 分析
关于应用 程 序, 首先要注意的是 , 它 是一个标准的 Java 应 用程序,使用 分层架构( Layered
Architecture)设计模式。使用 DWR 通过 JavaScript 公开一些服务并不影响您的设计。
下面是一个简单的 Java 服务,我们将使用 DWR 框架直接将其向 JavaScript 代码公开:
package com.tearesolutions.service;
public interface AjaxSampleSvc {
Article castVote(int rank);
}
这是一个被简化到几乎不可能的程度的例子,其中只有一篇文章可以投票。该服务由 Spring 管理,它
使 用 的 bean 名 是 ajaxSampleSvc , 它 的 持 久 性 需 求 则 依 赖 于 ArticleDao 。 详 情 请 参 见
applicationContext.xml。
为了把该服务公开为 JavaScript 对象,需要配置 DWR,添加 dwr.xml 文件到 WEB-INF 目录下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC
"-//GetAhead Limited//DTD Direct Web Remoting 0.4//EN"
"http://www.getahead.ltd.uk/dwr/dwr.dtd">
<dwr>
<allow>
<create creator="spring" javascript="ajaxSampleSvc">
<param name="beanName" value="ajaxSampleSvc" />
</create>
<convert converter="bean" match="com.tearesolutions.model.Article"/>
<exclude method="toString"/>
<exclude method="setArticleDao"/>
</allow>
</dwr>
dwr.xml 文件告诉 DWR 哪些服务是要直接向 JavaScript 代码公开的。注意,已经要求公开 Spring bean
ajaxSampleSvc。DWR 将自动找到由应用程序设置的 SpringApplicationContext。为此,必须使用标准的
servlet 过滤器 ContextLoaderListener 来初始化 Spring ApplicationContext。
DWR 被设置为一个 servlet,所以把它的定义添加到 web.xml: <?xml version="1.0" encoding="UTF-
8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD
Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">