(五)配置及用法之DWR

DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站.它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一样。在介绍DWR之前呢,先简要介绍一下Ajax。其实和DWR配置的相关性不大,只是希望大家重温一下Ajax的使用。
(1)Ajax的代码部分:
<script type="text/javascript">
  var xmlHttpRequest;
 <!--根据浏览器类型解析xmlHttpRequest-->
  function createXmlHttpRequest() {
	if (window.ActiveXObject) {
		return new ActiveXObject("Microsoft.XMLHTTP");
	} else if (window.XMLHttpRequest) {
		return new XMLHttpRequest();
	}
}
//POST形式
function doRequestUsingPost() {
	url = "GetAndPostXml?";  
	xmlHttpRequest = createXmlHttpRequest();
	xmlHttpRequest.open("POST", url, true);
	xmlHttpRequest.onreadystatechange = parseResult;
	//让服务器知道请求体中有参数
	xmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");
	xmlHttpRequest.send(stringQuery());//参数表
}
//GET形式
function doRequestUsingGet(){	
	url="GetAndPostXml?"+stringQuery(); 
	xmlHttpRequest=createXmlHttpRequest();
	xmlHttpRequest.open("GET",url,true);
	xmlHttpRequest.onreadystatechange=parseResult;
	xmlHttpRequest.send(null);
}
//构造参数传递的方法
function stringQuery() {
	var userName = document.getElementById("userName").value;
	var passWord = document.getElementById("passWord").value;
	var strQuery = "userName=" + userName+"&passWord="+passWord;
	return strQuery;
}
<!--回调函数-->//在传递的Servlet中out.print(xxx),out.println(xxx)可能获取不到
function parseResult() {
if(xmlHttpRequest.readyState==4&&xmlHttpRequest.status==200){
var responseDiv=document.getElementById("responseDiv");
var xmlDoc=xmlHttpRequest.responseXML;
var content=xmlDoc.getElementsByTagName("Users");
var Info="<table><tr><td>用户</td><td>密码</td><td>性别</td><td>方法</td></tr>";
Info+="<tr><td>"+content[0].childNodes[0].firstChild.data+"</td>";
Info+="<td>"+content[0].childNodes[1].firstChild.data+"</td>";//文本也算一个节点
Info+="<td>"+content[0].childNodes[2].firstChild.data+"</td>";
Info+="<td>"+content[0].childNodes[3].firstChild.data+"</td></tr></table>";
responseDiv.innerHTML=Info;
}
}
</script>  
<!--HTML代码部分-->
  <div>
  <form name="myFrom">
   用户名:<input type="text" name="userName"  value="" id="userName"/><br/>
   (显示)密码:<input type="text" name="passWord" value="" id="passWord"/><br/>
   <input type="button" value="使用Get" onclick="doRequestUsingGet()"/>
   <input type="button" value="使用Post" onclick="doRequestUsingPost()"/>
   </form>
  </div>
  <div id="responseDiv"></div>

(2)正题!DWR配置:
需要的Jar:commons-logging-1.0.4.jar、dwr.jar
web.xml的配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="dwr" version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <servlet>
	<servlet-name>dwr-invoker</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-invoker</servlet-name>
		<url-pattern>/dwr/*</url-pattern>
  </servlet-mapping>

dwr.xml的配置:(与web.xml同目录)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "http://getahead.org/dwr/dwr30.dtd">
<dwr>
   <allow>
        <!--设置New创造器-->
	<create creator="new" javascript="service1">
		<param name="class" value="com.lrl.test.Server" />
	</create>
        <!--设置dwr匹配的数据Bean-->//区别于Spring的Bean
	<convert match="com.xxx.entity.Person" converter="bean">
		<param name="include" value="id,name,pet"></param>
	</convert>
	<convert match="com.xxx.entity.Pet" converter="bean">
		<param name="include" value="id,name"></param>
	</convert>
  <!--如果需要给Spring管理,creator="spring" 且param里 name="beanName"
value="Spring的BeanId"-->//注意,value里的是Spring管理的bean的id!如果不给Spring管理的话,那么依赖注入会失败。所以根据情况而定!
	<create creator="spring" javascript="userService">
		<param name="beanName" value="userServiceImpl"></param>
	       <param name="location" value="classpath:beans.xml" />//spring的xml的位置
	</create>
    </allow>
</dwr>

dwr的HTML代码部分:
<script type="text/javascript" src='/AjaxDwrPro1/dwr/engine.js'></script>//引用内置的,否则会出错。
<script type="text/javascript" src='/AjaxDwrPro1/dwr/util.js'></script>//这个也引用内置的把!
<script type="text/javascript" src='/AjaxDwrPro1/dwr/interface/server1.js'>
</script>//这里的server1就是dwr里面javascript设定的值!路径别错!
<script type="text/javascript">
function dwrTest() {
	var userName = document.getElementsByName("userName")[0].value;
	var passWord = document.getElementsByName("passWord")[0].value;
	server1.checkLogin(userName, passWord, callBack);//第三个参数是回调函数,一般把回调函数都放在最后一个参数的位置上把~~
	
}
function callBack(date) {//date是调用checkLogin函数后返回的数据。
	if (date == true) {
		alert("登陆成功!");		
		document.myForm.submit();
		
	} else if (date == false) {
		alert("登录失败");
		return false;		
	}
}
</script>

基本用法就这样,更深层次的应用以后再慢慢补充把~~
总结:
(1)主要配置过程:web.xml+dwr.xml+jsp
(2)jsp里需包含使用到的js文件。详情看本文
(3)dwr与Struts整合需要struts2-dwr-plugin-2.2.1.1.jar包

你可能感兴趣的:(spring,Ajax,bean,配置管理,DWR)