DWR高级主题之DWR与spring集成

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

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

<servlet>
  <servlet-name>springDispatcher</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value> classpath:yourSpringContext.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>springDispatcher</servlet-name>
  <url-pattern>*.html</url-pattern>
</servlet-mapping>
<servlet-mapping>
  <servlet-name>springDispatcher</servlet-name>
  <url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
在映射*.html的同时还映射了/dwr/*。
使用DWRSpringServlet
如果你不使用SpringMVC,那么可以使用DwrSpringServlet。这个Servlet获得在你的web.xml中配置的Spring上下文。web.xml的配置如下:
<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>
    classpath:yourSpringContext.xml
  </param-value>
</context-param>
<servlet>
  <servlet-name>dwr</servlet-name>
  <servlet-class>org.directwebremoting.spring.DwrSpringServlet</servlet-class>
  <init-param>
    <param-name>debug</param-name>
    <param-value>true</param-value>
  </init-param>
</servlet>
<servlet-mapping>
  <servlet-name>dwr</servlet-name>
  <url-pattern>/dwr/*</url-pattern>
</servlet-mapping>

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

<beans
  ...
  xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr"
  xsi:schemaLocation="....
    http://www.directwebremoting.org/schema/spring-dwr
    http://www.directwebremoting.org/schema/spring-dwr-3.0.xsd">
普通的声明方式(标签说明)    
控制器标签(springMVC)
如果你不使用SpringMVC,可以跳过这节,控制器标签只适用于SpringMVC的配置。
如果你使用springMVC,你必须声明一个:
<dwr:controller id="dwrController" debug="true"/>
这个标签不允许内部标签和id属性是可选的。
另外,你可以指定你自己的SimpleUrlHandlerMapping。DWR需要下面这些URL的映射:/engine.js,/interface.js,/call/**,/interface/**,如例:
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  <property value="true" name="alwaysUseFullPath"></property>
  <property name="mappings">
    <props>
      <prop key="/dwr/**/*">dwrController</prop>
    </props>
 </property>
</bean>
配置标签
<dwr:configuration/>是用来模拟在dwr.xml配置的行为。这个标签是可选的。它可能是嵌套标签(init,creator,signatures,...),这些嵌套标签模仿那些在dwr.xml的行为。如例:
<dwr:configuration>
  <dwr:convert type="bean" class="org.uk.ltd.dwr.dev.model.Address" />
</dwr:configuration>
远程标签
你可以在每个bean里包含<dwr:remote javascript="...">标签,在这里,你可以指定被代理的方法或不允许被代理的方法,如:
<bean id="timeConvert" class="com.mycompany.ui.util.TimeConvert">
  <dwr:remote javascript="AjaxTimeConvert">
    <dwr:include method="convert" />
  </dwr:remote>
</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属性,如下:
@RemoteProxy(name="SomeClassName")
当需要处理希望DWR转换的bean时,可以使用 @DataTransferObject和@RemoteProperty注解,用法如下:
@DataTransferObject
public class MyBean{
    @RemoteProperty
    private String firstName;
    public String getFirstName(){
        return firstName;
    }
}
@DataTransferObject注解说明这个bean可以被DWR转换,@RemoteProperty注解说明属性firstName应该被转换。所以,如果希望bean的部分成员不在客户端和服务器端之间来回传递,只需要取消对应的@RemoteProperty注解即可。

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

<allow>
  ...
  <create creator="spring" javascript="Fred">
    <param name="beanName" value="Shiela"/>
  </create>
  ...
</allow>
这里name="beanName",表示使用bean的名称,value的值是实际bean的名称。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值