Tim因为其实现了guice与dwr的集成,已经被列入dwr的contributor行列,Tim在自己的blog上也谈到了如何实现guice与dwr的集成,不过说的比较粗略。下面我们来看看如何实现guice与dwr的集成。
资源下载
- 下载最新的DWR 2.0 RC4a,地址:https://dwr.dev.java.net/files/documents/2427/55209/dwr.jar
- 下载Guice 1.0,地址:http://google-guice.googlecode.com/files/guice-1.0.zip
定义服务
java 代码
- public interface HelloService {
- String sayHello(String name);
- }
java 代码
- public class DefaultHelloService implements HelloService {
- public String sayHello(String name) {
- return "Hello, " +name;
- }
- }
实现dwr的Listener
java 代码
- public class DwrContextListener extends DwrGuiceServletContextListener {
- @Override
- protected void configure() {
-
-
-
- bindRemotedAs("HelloService", HelloService.class).to(DefaultHelloService.class).in(Scopes.SINGLETON);
- }
- }
配置DWR
xml 代码
- <listener>
- <listener-class>
- temp.DwrContextListener
- <!---->listener-class>
- <!---->listener>
- <servlet>
- <servlet-name>dwr-invoker<!---->servlet-name>
- <display-name>DWR Servlet<!---->display-name>
- <description>Direct Web Remoter Servlet<!---->description>
- <servlet-class>org.directwebremoting.guice.DwrGuiceServlet<!---->servlet-class>
- <init-param>
- <param-name>debug<!---->param-name>
- <param-value>true<!---->param-value>
- <!---->init-param>
- <init-param>
- <param-name>activeReverseAjaxEnabled<!---->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>
至此,已经完成了guice与dwr的集成。启动web服务,在浏览器中输入:http://localhost:{port}/{context}/dwr,便可以看到所发布的HelloService服务。
重大改进
dwr在与guice集成之后有了突出的功能性改进,以往如果想要发布远程对象,需要使用具体类来实现,不可以使用接口,这使得发布的对象暴露过多的内部信息,虽然可以通过在dwr.xml中显示的定义哪些方法和属性需要发布,哪些不用,但是这样也加大了对发布的远程对象的维护和管理难度。借助guice,DWR 2.0RCa目前可以以发布接口的方式来发布远程对象。