一、概述
DWR是一个web远程调用框架,可以让ajax使用起来更方便;
DWR+Spring大致原理是,通过在web.xml和applicationContext.xml这两个配置文件上分别配置相关Servlet和业务类DAO/Service,然后通过dwr.xml配置Spring上bean类的id名以及自动生成javascript的js文件名。
这样就完成了DWR最基础的配置。
服务器开启完毕后,dwr会自动生成js文件,如下:
<script type= 'text/javascript' src ='<%=basePath%> dwr/engine.js'></script >
<script type='text/javascript' src= '<%=basePath %>dwr/util.js'></ script>
<script type='text/javascript' src=' <%=basePath %>dwr/interface/DWRUser.js'></ script>
这里注意一定要按顺序配置!!!以上顺序不能乱!
其中,最后一个
DWRUser.js
为dwr.xml配置自动生成的js文件,并且该文件对应的是applicationContext.xml注入的DAO/Service类。
最后通过js将参数传入DWRUser类对应的方法(js下方法名和类中方法名一致),并且只能允许返回boolean类型的值 。
指定一个回调函数(callback),该回调函数只能接受boolean类型的返回参数,并根据该返回参数进行js操作。
至于持久层操作,这里将完全忽略不述。
二、附上相关代码(验证用户注册邮箱是否已经存在)
//注入的DAO类
package org.dwr.registervalidator;
import org.dao.business.BusinessDAO;
public class CheckBusReg {
BusinessDAO businessDAO;
public BusinessDAO getBusinessDAO() {
return businessDAO;
}
public void setBusinessDAO(BusinessDAO businessDAO) {
this.businessDAO = businessDAO;
}
public boolean checkEmail(String bemail){
return this.businessDAO.checkEmailIfExisted(bemail);
}
}
//applicationContext.xml
<?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:p="http://www.springframework.org/schema/p"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation= "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.directwebremoting.org/schema/spring-dwr
http://www.directwebremoting.org/schema/spring-dwr-2.0.xsd" >
<!-- DWR AJAX类注入 -->
<bean id="ChkBus" class= "org.dwr.registervalidator.CheckBusReg" >
<property name="businessDAO" ref="businessDAO"/>
</bean >
</ beans>
//web.xml
<!-- 配置dwr -->
<servlet>
<servlet-name >dwr-invoker</ servlet-name>
<servlet-class >uk.ltd.getahead.dwr.DWRServlet </servlet-class>
<init-param >
<param-name >debug </param-name>
<param-value >true </param-value>
</init-param >
</servlet >
<servlet-mapping >
<servlet-name >dwr-invoker</ servlet-name>
<url-pattern >/dwr/*</url-pattern >
</servlet-mapping >
<!-- 指定以 Listerner方式启动Spring -->
<listener>
<listener-class >
org.springframework.web.context.ContextLoaderListener
</listener-class >
</listener>
<!-- 制定Spring配置文件的位置 -->
<context-param >
<param-name >contextConfigLocation </param-name>
<param-value >
classpath:applicationContext.xml
</param-value >
</context-param >
<filter >
<filter-name >struts2 </filter-name>
<filter-class >
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class >
</filter >
<filter-mapping >
<filter-name >struts2 </filter-name>
<url-pattern >/* </url-pattern>
</filter-mapping >
//WEB-INF/dwr.xml
<?xml version= "1.0" encoding ="UTF-8"?> <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://www.getahead.ltd.uk/dwr/dwr20.dtd" > <dwr> <allow> <!-- creator是spring,原因是和spring整合,DWRUser表示实例转换成 js语言后以DWRUser命名,前台页面可以通过代码(<script type='text/ javascript' src='../../dwr /interface/DWRUser.js'></script>)来调用 --> <create creator="spring" javascript="DWRUser" > <!-- 此处DWRUser为spring配置文件中某个bean的id值 --> <param name= "beanName" value ="ChkBus"/> </create > </allow> </dwr>
//BusReg.jsp
<%@ page language="java" import= "java.util.*" pageEncoding ="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://" +request.getServerName()+":"+request.getServerPort()+path+ "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head >
<base href="<%= basePath%> ">
<script type='text/javascript' src= '<%=basePath %>dwr/engine.js'></ script>
<script type='text/javascript' src= '<%=basePath %>dwr/util.js'></ script>
<script type='text/javascript' src=' <%=basePath %>dwr/interface/DWRUser.js'></ script>
<script type="text/javascript" src=" <%=basePath %>js/jquery-1.7.2.min.js"></ script>
<title >商家注册页 </title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet " type="text/css" href="styles.css">
-->
</head >
<body >
<script type= 'text/javascript' >
function regUserChked(){
if ( typeof window['DWRUtil' ] == 'undefined')
window.DWRUtil = dwr.util;
var bemail=document.login.bemail.value;
DWRUser.checkEmail(bemail,showData); //showData回调函数
}
function showData(data){
if(data){
DWRUtil.setValue( "userMsg","该用户名已经被注册,请更换您的用户名!" );
} else{
DWRUtil.setValue( "userMsg","恭喜您,该用户名尚未被注册!" );
}
}
</ script>
<form action="buslogin" method= "post" name ="login">
邮箱: <input type= "text" name ="bemail" οnblur="regUserChked()" /><div id= "userMsg"></div ><br/>
密码: <input type= "password" name ="bpass"/>< br/>
<input type= "submit" value ="提交"/>
</form >
</body >
</html>