SpringMVC中使用DWR重点在其配置当中。
1. web.xml文件的配置
在DispatcherServlet中增加dwr的拦截来取代DwrServlet。
更改配置如下:
1 <servlet> 2 <servlet-name>mvc</servlet-name> 3 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 4 <load-on-startup>1</load-on-startup> 5 </servlet> 6 7 <!-- 配置dwr拦截 --> 8 <servlet-mapping> 9 <servlet-name>mvc</servlet-name> 10 <url-pattern>/dwr/*</url-pattern> 11 </servlet-mapping> 12 <servlet-mapping> 13 <servlet-name>mvc</servlet-name> 14 <url-pattern>/</url-pattern> 15 </servlet-mapping>
当然如果不想用spring的servlet 也可以用dwr提供的DWRSpringServlet。配置如下:
1 <servlet> 2 <servlet-name>dwr</servlet-name> 3 <servlet-class>org.directwebremoting.spring.DwrSpringServlet</servlet-class> 4 <init-param> 5 <param-name>debug</param-name> 6 <param-value>true</param-value> 7 </init-param> 8 </servlet> 9 <servlet-mapping> 10 <servlet-name>dwr</servlet-name> 11 <url-pattern>/dwr/*</url-pattern> 12 </servlet-mapping>
2. 配置springMVC文件
在配置springMVC文件之前,需要在spring配置文件中增加dwr的命名空间。根据官方文档说法:如果用命名空间或者注解的话需要spring2.X以上版本,DWR2.X以上版本。
需要加入的命名空间如下(红色部分):
1 <beans 2 xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr" 5 xsi:schemaLocation="http://www.springframework.org/schema/beans 6 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 7 http://www.directwebremoting.org/schema/spring-dwr 8 http://www.directwebremoting.org/schema/spring-dwr-3.0.xsd">
dwr的配置如下:
1 <!-- dwr配置 --> 2 <dwr:annotation-config/> 3 <dwr:controller id="dwrController" debug="true"> 4 <dwr:config-param name="activeReverseAjaxEnabled" value="true"/> 5 </dwr:controller> 6 <dwr:url-mapping /> 7 <dwr:annotation-scan base-package="com.bigbang.*" scanDataTransferObject="true" scanRemoteProxy="true" /> 8
dwr:annatation-config是开启dwr注解扫描的,根据dwr:annatation-scan配置的base-package扫描该路径下的类,后面两个配置即是常用的两种注解类型。
dwr:controller仅限于用在springMVC里面,它可以增加一些配置参数,例如activeReverseAjaxEnabled 开启反向ajax用于推送。如果不配置controller的话,就需要配置dwr:url-mapping,不然会导致无法找到页面中dwr需要的engine.js以及interface.js文件。
如果不用注解的话,也可以使用配置的方法来做,示例如下:
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:remote相当于注解@RemoteProxy,dwr:include相当于注解@RemoteMethod,如果要增加转换的Object数据,可以使用dwr:convert,相当于注解@DataTransferObject。