六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 25|回复: 0

(五)配置及用法之DWR

[复制链接]

升级  72%

6

主题

6

主题

6

主题

童生

Rank: 1

积分
36
 楼主| 发表于 2013-1-29 10:40:37 | 显示全部楼层 |阅读模式
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" />   <input type="button" value="使用Post" />   </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包
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表