歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Spring MVC整合DWR

Spring MVC整合DWR

日期:2017/3/1 10:21:14   编辑:Linux編程

本文基於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. <context:component-scan base-package="com.geloin.spring" />
  18. <!-- 通過注解,把URL映射到Controller上,該標簽默認注冊DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter -->
  19. <mvc:annotation-driven />
  20. <!-- 視圖解析器 -->
  21. <bean id="viewResolver"
  22. class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  23. <property name="viewClass"
  24. value="org.springframework.web.servlet.view.JstlView" />
  25. <property name="prefix" value="/WEB-INF/pages/" />
  26. <property name="suffix" value=".jsp"></property>
  27. </bean>
  28. <!-- 要求dwr在spring容器中檢查擁有@RemoteProxy@RemoteMethod注解的類。注意它不會去檢查Spring容器之外的類。 -->
  29. <dwr:annotation-config id="dwr" />
  30. <!-- 要求DWR將util.js和engine.js映射到dwrController -->
  31. <dwr:url-mapping />
  32. <!-- 定義dwr -->
  33. <dwr:controller id="dwrController" debug="true">
  34. <dwr:config-param name="allowScriptTagRemoting"
  35. value="true" />
  36. <dwr:config-param name="crossDomainSessionSecurity"
  37. value="false" />
  38. </dwr:controller>
  39. </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. import javax.annotation.Resource;
  8. import org.directwebremoting.annotations.RemoteMethod;
  9. import org.directwebremoting.annotations.RemoteProxy;
  10. import org.springframework.stereotype.Controller;
  11. import com.geloin.spring.entity.Menu;
  12. import com.geloin.spring.service.MenuService;
  13. /**
  14. * DWR
  15. *
  16. * @author geloin
  17. * @date 2012-4-1 上午11:32:02
  18. */
  19. @Controller
  20. @RemoteProxy(name = "directController")
  21. public class DirectController {
  22. @Resource(name = "menuService")
  23. private MenuService menuService;
  24. /**
  25. * 要刪除的角色下是否含有用戶
  26. *
  27. * @author geloin
  28. * @date 2012-4-1 下午4:00:03
  29. * @param ids
  30. * @return
  31. */
  32. @RemoteMethod
  33. public String showMenu(Integer id) {
  34. Menu menu = this.menuService.findById(id);
  35. StringBuilder builder = new StringBuilder();
  36. builder.append(id);
  37. builder.append("--");
  38. builder.append(menu.getName());
  39. builder.append("--");
  40. builder.append(menu.getParentId());
  41. builder.append("--");
  42. builder.append(menu.getUrl());
  43. builder.append("--");
  44. builder.append(menu.getIsShowLeft());
  45. return builder.toString();
  46. }
  47. }

@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類的同名方法。
本文所展示的功能為,在下拉框中選擇菜單後,顯示其詳細信息。

Copyright © Linux教程網 All Rights Reserved