注解驱动的Spring结合使用注解版的DWR
1. 先写一个Controller
- package com.myapp.web.controller;
- import javax.servlet.http.HttpServletRequest;
- import org.directwebremoting.annotations.RemoteMethod;
- import org.directwebremoting.annotations.RemoteProxy;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
- @Controller
- @RemoteProxy
- public class UserController {
- @RemoteMethod
- public String getUserName(int id) {
- System.out.println("user id is " + id);
- return "UserName: " + id;
- }
- @RequestMapping("/user/add.do")
- public String addUser(HttpServletRequest request) {
- System.out.println("this is action method");
- return "/user/list.jsp";
- }
- }
@RemoteProxy注解告诉DWR,这个Class是我们想暴露出来的。@RemoteMethod注解告诉DWR去暴露这个指定的方法,只有加了RemoteMethod注解的方法会被暴露,其它的不会。
这里也可以使用@RemoteProxy(name="userRemote")的方式指定DWR接口的名字
2. 接下来看web.xml的配置
- <servlet>
- <servlet-name>action</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>/WEB-INF/springconfig/*.xml</param-value>
- </context-param>
- <servlet-mapping>
- <servlet-name>action</servlet-name>
- <url-pattern>*.do</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>action</servlet-name>
- <url-pattern>/dwr/*</url-pattern>
- </servlet-mapping>
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
注意,这里没有使用org.directwebremoting.spring.DwrSpringServlet或 org.directwebremoting.servlet.DwrServlet,并且请注意这里使用spring的dispatcher servlet来映射/dwr/*请求。
3. 最后看针对DispatcherServlet的配置文件action-servlet.xml
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr"
- xmlns:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-2.5.xsd
- http://www.directwebremoting.org/schema/spring-dwr
- http://www.directwebremoting.org/schema/spring-dwr-3.0.xsd"
- default-autowire="byName">
- <context:annotation-config />
- <!-- 注意这里新增加的dwr tag, 为使其生效,文件头中要声明namespace -->
- <dwr:configuration />
- <dwr:annotation-config />
- <dwr:url-mapping />
- <!-- 部署项目时, 请把debug设为false -->
- <dwr:controller id="dwrController" debug="true" />
- <!-- 多个包名用逗号隔开, 但不能有空格 -->
- <context:component-scan base-package="com.myapp.web.controller" />
- <!-- order值越小, 优先级越高 -->
- <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
- <property name="order" value="1" />
- </bean>
- <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
- <property name="order" value="2" />
- </bean>
- </beans>
简单解释一下这些配置
- <dwr:annotation-config /> 要求DWR在Spring容器中检查拥有@RemoteProxy 和 @RemoteMethod注解的类。注意它不会去检查Spring容器之外的类。
- <dwr:url-mapping /> 要求DWR将util.js和engine.js映射到dwrController
- <dwr:controller id="dwrController" debug="true" /> 定义dwrController
- <dwr:configuration /> 此标签在这个例子中不是必须的,如果你想配置Spring容器之外的类,就需要它了。
最后一件事,DWR的测试页面 http://localhost:8080/myapp/dwr 在这里不好用。
请使用 http://localhost:8080/myapp/dwr/test/YOUR-BEAN-NAME 的方式来测试你的DWR接口,
例如这里使用 http://localhost:8080/myapp/dwr/test/UserController
在spring配置文件最后加上
Java代码
- <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
- <property name="order" value="3" />
- <property value="true" name="alwaysUseFullPath"></property>
- <property name="mappings">
- <props>
- <prop key="/dwr/**">dwrController</prop>
- </props>
- </property>
- </bean>
就可以通过http://localhost:8080/myApp/dwr来访问test page了