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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章