Spring MVC整合DWR


本文基于Spring MVC整合Mybatis。

        (1) 导入包dwr.jar。

        (2) 在web.xml中配置dwr。只需在配置DispatcherServlet下添加dwr的url-mapping即可,修改后的DispatcherServlet配置如下所示:

  1. <!-- servlet控制跳转 -->  
  2. <servlet>  
  3.     <servlet-name>spring</servlet-name>  
  4.     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  5.     <!-- 配置文件 -->  
  6.     <init-param>  
  7.         <param-name>contextConfigLocation</param-name>  
  8.         <param-value>classpath:context-dispatcher.xml</param-value>  
  9.     </init-param>  
  10. </servlet>  
  11. <servlet-mapping>  
  12.     <servlet-name>spring</servlet-name>  
  13.     <url-pattern>*.html</url-pattern>  
  14. </servlet-mapping>  
  15. <servlet-mapping>  
  16.     <servlet-name>spring</servlet-name>  
  17.     <url-pattern>/dwr/*</url-pattern>  
  18. </servlet-mapping>  
        (3) 在context-dispatcher.xml中添加dwr的配置,修改后的文件如下所示:
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans default-lazy-init="true"  
  3.     xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xmlns:context="http://www.springframework.org/schema/context"  
  5.     xmlns:mvc="http://www.springframework.org/schema/mvc"  
  6.     xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr"  
  7.     xsi:schemaLocation="  
  8.        http://www.springframework.org/schema/beans    
  9.        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd   
  10.        http://www.springframework.org/schema/mvc    
  11.        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd   
  12.        http://www.directwebremoting.org/schema/spring-dwr    
  13.     http://www.directwebremoting.org/schema/spring-dwr-3.0.xsd   
  14.        http://www.springframework.org/schema/context   
  15.        http://www.springframework.org/schema/context/spring-context-3.0.xsd">   
  16.   
  17.     <!-- 使用注解的包,包括子集 -->  
  18.     <context:component-scan base-package="com.geloin.spring" />  
  19.     <!-- 通过注解,把URL映射到Controller上,该标签默认注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter -->  
  20.     <mvc:annotation-driven />  
  21.     <!-- 视图解析器 -->  
  22.     <bean id="viewResolver"  
  23.         class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  24.         <property name="viewClass"  
  25.             value="org.springframework.web.servlet.view.JstlView" />  
  26.         <property name="prefix" value="/WEB-INF/pages/" />  
  27.         <property name="suffix" value=".jsp"></property>  
  28.     </bean>  
  29.       
  30.     <!-- 要求dwr在spring容器中检查拥有@RemoteProxy 和 @RemoteMethod注解的类。注意它不会去检查Spring容器之外的类。 -->  
  31.     <dwr:annotation-config id="dwr" />  
  32.     <!-- 要求DWR将util.js和engine.js映射到dwrController -->  
  33.     <dwr:url-mapping />  
  34.     <!-- 定义dwr -->  
  35.     <dwr:controller id="dwrController" debug="true">  
  36.         <dwr:config-param name="allowScriptTagRemoting"  
  37.             value="true" />  
  38.         <dwr:config-param name="crossDomainSessionSecurity"  
  39.             value="false" />  
  40.     </dwr:controller>  
  41. </beans>  

        此处需要注意的是,mvc:annotation-driven会默认注册DefaultAnnotationHandlerMapping、AnnotationMethodHandlerAdapter和SimpleControllerHandlerAdapter,而使用Dwr时必须配置SimpleControllerHandlerAdapter,所以若不使用Mvc:annotation-driven时,请将dwr的配置改成:

  1.        <!-- DWR配置 -->  
  2. <bean  
  3.     class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />  
  4. <!-- 要求dwr在spring容器中检查拥有@RemoteProxy 和 @RemoteMethod注解的类。注意它不会去检查Spring容器之外的类。 -->  
  5. <dwr:annotation-config id="dwr" />  
  6. <!-- 要求DWR将util.js和engine.js映射到dwrController -->  
  7. <dwr:url-mapping />  
  8. <!-- 定义dwr -->  
  9. <dwr:controller id="dwrController" debug="true">  
  10.     <dwr:config-param name="allowScriptTagRemoting"  
  11.         value="true" />  
  12.     <dwr:config-param name="crossDomainSessionSecurity"  
  13.         value="false" />  
  14. </dwr:controller>  
  15. <!-- DWR配置 -->  

        (4) 在com.geloin.spring.controller下添加dwr控制器DirectController
  1. /** 
  2.  * 
  3.  * @author geloin 
  4.  * @date 2012-4-1 上午11:32:02 
  5.  */  
  6. package com.geloin.spring.controller;  
  7.   
  8. import javax.annotation.Resource;  
  9.   
  10. import org.directwebremoting.annotations.RemoteMethod;  
  11. import org.directwebremoting.annotations.RemoteProxy;  
  12. import org.springframework.stereotype.Controller;  
  13.   
  14. import com.geloin.spring.entity.Menu;  
  15. import com.geloin.spring.service.MenuService;  
  16.   
  17. /** 
  18.  * DWR 
  19.  *  
  20.  * @author geloin 
  21.  * @date 2012-4-1 上午11:32:02 
  22.  */  
  23. @Controller  
  24. @RemoteProxy(name = "directController")  
  25. public class DirectController {  
  26.   
  27.     @Resource(name = "menuService")  
  28.     private MenuService menuService;  
  29.   
  30.     /** 
  31.      * 要删除的角色下是否含有用户 
  32.      *  
  33.      * @author geloin 
  34.      * @date 2012-4-1 下午4:00:03 
  35.      * @param ids 
  36.      * @return 
  37.      */  
  38.     @RemoteMethod  
  39.     public String showMenu(Integer id) {  
  40.         Menu menu = this.menuService.findById(id);  
  41.         StringBuilder builder = new StringBuilder();  
  42.         builder.append(id);  
  43.         builder.append("--");  
  44.         builder.append(menu.getName());  
  45.         builder.append("--");  
  46.         builder.append(menu.getParentId());  
  47.         builder.append("--");  
  48.         builder.append(menu.getUrl());  
  49.         builder.append("--");  
  50.         builder.append(menu.getIsShowLeft());  
  51.         return builder.toString();  
  52.     }  
  53.   
  54. }  

        @RemoteProxy表示该类为Dwr远程代理类,名称为directController,即在jsp可通过directController.js代表该类;@RemoteMethod代表showMenu方法为一个远程代理方法,该方法传入一个参数,返回一个字符串。

        (5) 在jsp页面使用dwr,修改/WEB-INF/pages/background/menu.jsp页面,结果如下:
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>  
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  5. <html>  
  6. <head>  
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  
  8. <title>Insert title here</title>  
  9. <script type='text/javascript' src='<c:url value="/dwr/engine.js"/>'></script>  
  10. <script type='text/javascript' src='<c:url value="/dwr/util.js" />'></script>  
  11. <script type='text/javascript'  
  12.     src='<c:url value="/dwr/interface/directController.js" />'></script>  
  13. <script type="text/javascript">  
  14.     function view(obj) {  
  15.         var id = obj.value;  
  16.         directController.showMenu(id, function(data) {  
  17.             document.getElementById('view').innerHTML = data;  
  18.         });  
  19.     }  
  20. </script>  
  21. </head>  
  22. <body>  
  23.     <select onchange="javascript:view(this);">  
  24.         <c:forEach items="${result }" var="item">  
  25.             <option value="${item.id }">${item.name }</option>  
  26.         </c:forEach>  
  27.     </select>  
  28.     <div id="view"></div>  
  29. </body>  
  30. </html>  

        /dwr/interface/directController.js即表示com.geloin.spring.controller.DirectController.java,直接通过directController.showMenu调用DirectController类的同名方法。
        本文所展示的功能为,在下拉框中选择菜单后,显示其详细信息。

相关内容