DWR高级主题之DWR与spring集成

WR高级主题之DWR与spring集成
---------
第一步:让DWR可以访问Spring的上下文
为了整合DWR与spring,DWR需要访问Spring的上下文。这里有两个选择:
1. 使用Spring MVC
2. 使用DWRSpringServlet
使用Spring MVC

如果使用Spring MVC,那么我们的web.xml配置就像这样:

[html] view plaincopy
  1. <servlet>  
  2.   <servlet-name>springDispatcher</servlet-name>  
  3.   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  4.   <init-param>  
  5.     <param-name>contextConfigLocation</param-name>  
  6.     <param-value> classpath:yourSpringContext.xml</param-value>  
  7.   </init-param>  
  8.   <load-on-startup>1</load-on-startup>  
  9. </servlet>  
  10. <servlet-mapping>  
  11.   <servlet-name>springDispatcher</servlet-name>  
  12.   <url-pattern>*.html</url-pattern>  
  13. </servlet-mapping>  
  14. <servlet-mapping>  
  15.   <servlet-name>springDispatcher</servlet-name>  
  16.   <url-pattern>/dwr/*</url-pattern>  
  17. </servlet-mapping>  
在映射*.html的同时还映射了/dwr/*。
使用DWRSpringServlet
如果你不使用SpringMVC,那么可以使用DwrSpringServlet。这个Servlet获得在你的web.xml中配置的Spring上下文。web.xml的配置如下:
[html] view plaincopy
  1. <listener>  
  2.   <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  3. </listener>  
  4. <context-param>  
  5.   <param-name>contextConfigLocation</param-name>  
  6.   <param-value>  
  7.     classpath:yourSpringContext.xml  
  8.   </param-value>  
  9. </context-param>  
  10. <servlet>  
  11.   <servlet-name>dwr</servlet-name>  
  12.   <servlet-class>org.directwebremoting.spring.DwrSpringServlet</servlet-class>  
  13.   <init-param>  
  14.     <param-name>debug</param-name>  
  15.     <param-value>true</param-value>  
  16.   </init-param>  
  17. </servlet>  
  18. <servlet-mapping>  
  19.   <servlet-name>dwr</servlet-name>  
  20.   <url-pattern>/dwr/*</url-pattern>  
  21. </servlet-mapping>  

第二步:配置DWR的远程访问
配置DWR的远程访问在这里有多个选项,我们平常使用dwr.xml文件,在文件中使用创建器与转换器完成的。然而,spring2.X中引入了新的功能(命名空间),在DWR2.X或更高的版本中,我们可以使用这个配置来整合DWR与spring,并定义远程访问(注意:spring的版本必须要2.5以上):  
第一种方式:使用命名空间    
在使用命名空间时,也有两种方式,一种普通的声明方式,另一种注解声明的方式                                                                                                              
首先在Spring的xml配置文件中加入DWR的命名空间的头

[html] view plaincopy
  1. <beans  
  2.   ...  
  3.   xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr"  
  4.   xsi:schemaLocation="....  
  5.     http://www.directwebremoting.org/schema/spring-dwr  
  6.     http://www.directwebremoting.org/schema/spring-dwr-3.0.xsd">  
普通的声明方式(标签说明)    
控制器标签(springMVC)
如果你不使用SpringMVC,可以跳过这节,控制器标签只适用于SpringMVC的配置。
如果你使用springMVC,你必须声明一个:
[html] view plaincopy
  1. <dwr:controller id="dwrController" debug="true"/>  
这个标签不允许内部标签和id属性是可选的。
另外,你可以指定你自己的SimpleUrlHandlerMapping。DWR需要下面这些URL的映射:/engine.js,/interface.js,/call/**,/interface/**,如例:
[html] view plaincopy
  1. <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">  
  2.   <property value="true" name="alwaysUseFullPath"></property>  
  3.   <property name="mappings">  
  4.     <props>  
  5.       <prop key="/dwr/**/*">dwrController</prop>  
  6.     </props>  
  7.  </property>  
  8. </bean>  
配置标签
<dwr:configuration/>是用来模拟在dwr.xml配置的行为。这个标签是可选的。它可能是嵌套标签(init,creator,signatures,...),这些嵌套标签模仿那些在dwr.xml的行为。如例:
[html] view plaincopy
  1. <dwr:configuration>  
  2.   <dwr:convert type="bean" class="org.uk.ltd.dwr.dev.model.Address" />  
  3. </dwr:configuration>  
远程标签
你可以在每个bean里包含<dwr:remote javascript="...">标签,在这里,你可以指定被代理的方法或不允许被代理的方法,如:
[html] view plaincopy
  1. <bean id="timeConvert" class="com.mycompany.ui.util.TimeConvert">  
  2.   <dwr:remote javascript="AjaxTimeConvert">  
  3.     <dwr:include method="convert" />  
  4.   </dwr:remote>  
  5. </bean>  
使用注解的方式(注解说明)
<dwr:annotation-scan>:  注解扫描,允许DWR扫描classpath,检测Bean的@RemoteProxy与@RemoteMethod注解,
注册他们并为他们创建构建器代理。这个元素包括一些可用的属性:
base-package: 被扫描的包
regex: 一个正则表达式,将在classpath的扫描中使用
scanRemoteProxy:  DWR的远程代理扫描,默认为true
scanDataTransferObject: DWR的转换器扫描,默认为true,扫描带有@DataTransferObject注解的类,表示要转换的类。
scanGlobalFilte: 默认为true
<dwr:annotation-config>: 允许DWR扫描spring的上下文,检测带有@RemoteProxy与@RemoteMethod的注解,并为他们注册创建器代理。
(上面两个配置,好像是两选一!!!???)
关于java类上的注解使用说明
@RemoteProxy注解(用于类上)说明这个类可以被远程访问,@RemoteMethod注解(用于方法上)说明这个方法可以被调用。这个类中任何没有被注解的方法将不能被DWR使用。如果希望使用与当前类不同的其他javascript对象名,需要给@RemoteProxy注解添加一个name属性,如下:
[java] view plaincopy
  1. @RemoteProxy(name="SomeClassName")  
当需要处理希望DWR转换的bean时,可以使用@DataTransferObject和@RemoteProperty注解,用法如下:
[java] view plaincopy
  1. @DataTransferObject  
  2. public class MyBean{  
  3.     @RemoteProperty  
  4.     private String firstName;  
  5.     public String getFirstName(){  
  6.         return firstName;  
  7.     }  
  8. }  
@DataTransferObject注解说明这个bean可以被DWR转换,@RemoteProperty注解说明属性firstName应该被转换。所以,如果希望bean的部分成员不在客户端和服务器端之间来回传递,只需要取消对应的@RemoteProperty注解即可。

第二种方式: 在dwr.xml文件中使用spring的创建器
如果你不喜欢使用注解的方式,我们可以使用传统的dwr.xml配置,使用基于spring的创建器。 创建器将查找spring的bean配置文件,并依赖spring实例化它们。如例:

[html] view plaincopy
  1. <allow>  
  2.   ...  
  3.   <create creator="spring" javascript="Fred">  
  4.     <param name="beanName" value="Shiela"/>  
  5.   </create>  
  6.   ...  
  7. </allow>  
这里name="beanName",表示使用bean的名称,value的值是实际bean的名称。
发布了1 篇原创文章 · 获赞 2 · 访问量 3万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章