最近项目改为用springMVC+mybatis+dwr,之前只做过ssh+dwr,一直在项目中配置dwr配了两天天才成功.刚开始百度了好多例子,但用到我这就不行了,老是错.所以得出一个结论什么还得靠自己,别人的只适合别人的项目,不一定适合自己.现在我把我们项目中dwr的用法写出来,希望可以帮助别人.
先导入 dwr.jar 包 , 在web.xml 中配置 dwr ,如下
<!-- 配置dwr --> <servlet> <servlet-name>dwr</servlet-name> <servlet-class>org.directwebremoting.servlet.DwrServlet</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.xml 中进行配置,如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd"> <!-- 通用dwr配置 --> <dwr> <allow> <!-- 从Spring中获取Java对象 --> <create javascript="ajaxController" creator="spring"> <param name="beanName" value="dwrService"></param> </create> </allow> </dwr>
其中: 最主要的配置是<create>节点,它有两个属性 creator和javascript,creator属性设为 new ,表示通过 new创建对象示例,creator设为spring时,表示通过spring来创建对象示例;
javascript 属性表示页面引用时的脚本对象名. <create>下有一个<param>节点,定义要发布的类别,其 name 属性设为 class,value属性设为要发布的类别名.若name属性设置为 beanName,则value属性设为spring中对应bean的名称.还有 <include>节点,定义暴露的方法. 一般有两种情况,一种是我上面的这种配法,这里我用的是上面的情况,根据 spring的beanName进行配置.还有一种如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd"> <!-- 通用dwr配置 --> <dwr> <allow> <!-- 用new获取Java对象 --> <create javascript="ajaxController" creator="new"> <param name="class" value="com.role.biz.userManage"></param> </create> </allow> </dwr>
这对初学的人很重要,容易出现问题.一般creator为new时,对应的<param>中,name属性设为class;或creator为spring时,对应的<param>中name属性设为beanName.
dwr.xml中配置完后,应在 spring.xml 中配置刚才 spring所对应的 beanName.如下所示
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd "> <!-- dwr对应的 beanNam --> <bean id="dwrService" class="zy.web.admin.qxManage.AjaxController"> </bean>
配完后,页面就可以请求了.如下:
引入dwr 的util.js和 engine.js,还有dwr/interface/ajaxController.js 这是dwr固定的写法
<script type="text/javascript" src="dwr/util.js"></script> <script type="text/javascript" src="dwr/engine.js"></script> <script type="text/javascript" src="dwr/interface/ajaxController.js"> </script>
引完后直接通过 ajaxController调用getCd2()方法.
//查询二级菜单编号 var id2 = 0; function cd2(id){ var str = id.split(","); id2 = str[1]; document.getElementById("yjcdbh").value = str[0]; ajaxController.getCd2(str[0],cd2Ok); }
这里的 ajaxController 与 dwr 中的 javascript对应的值一样.
根据调用方法,找到对应的 controller 类,如下
/** * 文件名称:AjaxController.java */ package zy.web.admin.qxManage; import java.util.HashMap; import java.util.Map; import org.directwebremoting.annotations.RemoteMethod; import org.directwebremoting.annotations.RemoteProxy; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import zy.service.admin.qxManage.AjaxService; /** * * 项目名称:zyhome * 类名称:AjaxController * 类描述: ajax 获取值 * 创建人:金锋 * 创建时间:2013-12-6 下午05:01:39 * 修改人:金锋 * 修改时间:2013-12-6 下午05:01:39 * 修改备注: * @version * * */ @Controller @RemoteProxy public class AjaxController { private AjaxService ajaxService; @RemoteMethod public String getCd1(){ int num =0; try { Map<String,Object> nuMap=(Map<String, Object>) ajaxService.finMaxCd1().get(0); num = Integer.parseInt(nuMap.get("cd1Num").toString())+1; } catch (Exception e) { e.printStackTrace(); } return num+""; } public AjaxService getAjaxService() { return ajaxService; } @Autowired public void setAjaxService(AjaxService ajaxService) { this.ajaxService = ajaxService; } }
再找到对应的 service,如下:
package zy.service.admin.qxManage; import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import zy.mapping.admin.qxManage.RoleRightMapper; /** * * 项目名称:zyhome * 类名称:AjaxService * 类描述: * 创建人:金锋 * 创建时间:2013-12-10 上午10:32:12 * 修改人:金锋 * 修改时间:2013-12-10 上午10:32:12 * 修改备注: * @version * * */ @Service("ajaxService") public class AjaxService { @Autowired private RoleRightMapper roleRightMapper; //获得一级菜单的最大编号 @SuppressWarnings("unchecked") public List finMaxCd1()throws Exception { return roleRightMapper.finMaxCd1(); } }
最后找到 mapper接口.如下:
package zy.mapping.admin.qxManage; import java.util.List; import java.util.Map; /** * 项目名称:zyhome * 类名称:RoleRightMapper * 类描述: 用户权限管理 mapper类 * 创建人:金锋 * 创建时间:2013-12-6 上午10:27:04 * 修改人:金锋 * 修改时间:2013-12-6 上午10:27:04 * 修改备注: * @version */ public interface RoleRightMapper { public List findAllMoudle()throws Exception; //获得一级菜单的最大编号 @SuppressWarnings("unchecked") public List finMaxCd1()throws Exception; }
最后在mapper.xml 中找到方法名对应的要执行的sql语句.如下
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="zy.mapping.admin.qxManage.RoleRightMapper"> <!-- 获得一级菜单的最大编号 --> <select id="finMaxCd1" parameterType="java.util.Map" resultType="java.util.Map"> select count(*) as cd1Num from zy_sys_rolecontent where MODULE_LEVEL =1 </select> </mapper>
到这,springMVC+DWR+mybaits示例讲完了,每个公司用的都不一样,有时要看具体情况呢.
配完 dwr 后,想要知道是否配置成功,在项目启动后 ,在浏览器中输入: http://localhost:8080/项目名/dwr 打回车,如果成功会如下所示:
我们点这个 ajaxController 链接,就会看到这个类下的所有方法:如下
To use this class in your javascript you will need the following script includes:
<script type='text/javascript' src='/zyhome/dwr/interface/ajaxController.js'></script> <script type='text/javascript' src='/zyhome/dwr/engine.js'></script>
In addition there is an optional utility script:
<script type='text/javascript' src='/zyhome/dwr/util.js'></script>
Replies from DWR are shown with a yellow background if they are simple or in an alert box otherwise.
The inputs are evaluated as Javascript so strings must be quoted before execution.
可点击后面的 execute 按钮进行测试,看方法有没有问题. 到些在 springMVC+mybaits 中使用dwr就讲完了,希望对大家有帮助.