---------
第一步:让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>
使用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"/>
另外,你可以指定你自己的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")
- @DataTransferObject
- public class MyBean{
- @RemoteProperty
- private String firstName;
- public String getFirstName(){
- return firstName;
- }
- }
第二种方式: 在dwr.xml文件中使用spring的创建器
如果你不喜欢使用注解的方式,我们可以使用传统的dwr.xml配置,使用基于spring的创建器。 创建器将查找spring的bean配置文件,并依赖spring实例化它们。如例:
- <allow>
- ...
- <create creator="spring" javascript="Fred">
- <param name="beanName" value="Shiela"/>
- </create>
- ...
- </allow>