??xml version="1.0" encoding="utf-8" standalone="yes"?>日本精品一区二区三区四区的功能,国产三级精品三级在线观看国产,欧洲综合视频http://www.aygfsteel.com/nbtymm/archive/2006/07/20/59163.htmlnbtnbtThu, 20 Jul 2006 04:38:00 GMThttp://www.aygfsteel.com/nbtymm/archive/2006/07/20/59163.htmlhttp://www.aygfsteel.com/nbtymm/comments/59163.htmlhttp://www.aygfsteel.com/nbtymm/archive/2006/07/20/59163.html#Feedback0http://www.aygfsteel.com/nbtymm/comments/commentRss/59163.htmlhttp://www.aygfsteel.com/nbtymm/services/trackbacks/59163.html 作?Cloves Carneiro; simmone
原文地址: http://www.javaworld.com/javaworld/jw-06-2005/jw-0620-dwr.html
中文地址: http://www.matrix.org.cn/resource/article/43/43926_DWR_AJAX.html
关键词: DWR AJAX


概述

q篇文章阐述了用开源项目DWR(直接Webq程控制)和AJAX(异步JavaScript和XML)的概忉|提高Web应用的可用性。作者一步步来展CDWR如何使得AJAX的应用既单又快捷。(1600?2005q??0日)

AJAXQ或者说是异步JavaScript和XMLQ描qC一U用؜合了HTML(或XHTML)和层叠样式表作ؓ表达信息,来创Z互式的Web应用的开发技?文档对象模型QDOMQ,JavaScript,动态地昄和与表达信息q行交互;q且QXMLHttpRequest对象与Web服务器异步地交换和处理数据?br />
因特|上许多例子展示了在一个HTML文g内部使用XMLHttpRequest与服务器端进行交互的必要的步骤。当手工地编写和l护XMLHttpRequest代码Ӟ开发者必d理许多潜在的问题Q特别是cM于跨览器的DOM实现的兼Ҏ这L问题。这会D在编码和调试Javascript代码上面pC清的旉Q这昄对开发者来说很不友好?br />
DWR(直接Webq程控制)目是在Apache许可下的一个开源的解决ҎQ它供给那些惌以一U简单的方式使用AJAX和XMLHttpRequest的开发者。它h一套Javascript功能集,它们把从HTML面调用应用服务器上的Java对象的方法简化了。它操控不同cd的参敎ͼq同时保持了HTML代码的可L?br />
DWR不是对一个设计的插入Q也不强q对象用Q何种cȝl承l构。它和servlet框架内的应用配合的很好。对~少DHTML~程l验的开发者来_DWR也提供了一个JavaScript库包含了l常使用的DHTMLdQ如l装表,用item填充select下拉框,改变HTML元素的内容,?lt;div>?lt;span>
DWR|站是详的q且有大量的文档Q这也是q篇文章的基。一些例子用来展CDWR如何使用和用它的库可以完成什么样的工作?br />
q篇文章让读者看C一个用了DWR的Web应用是如何一步步建立的。我会展C创个简单的CZ应用的必要的l节Q这个应用是可下载的q且可以在你的环境中布v来看看DWR如何工作?br />注意Q找到有关AJAX的信息ƈ不困?|页上有几篇文章和博客的条目늛了这个主题,每一个都试图指出和评个概늚不同的方面。在资源部分Q你会找C些有的指向CZ和文章的链接Q来学习AJAX的更多的内容?br />
CZ应用
q篇文章使用的示例应用模拟了多u多的一个公寓出U搜索引擎。用户可以在搜烦前选择一l搜索标准。ؓ了提高交互性,AJAX中以下两U情况下使用Q?br />·应用通告用户配合他的选择会返回多搜索结果。这个数字是实时更新?使用AJAX-当用户选择的卧室和室的数量,或者hD围变化时。当W合标准的搜索结果没有或太多Ӟ用户没有必要点L索按U?br />·数据库查询ƈ取回l果是由AJAX完成的。当用户按下昄l果按钮Ӟ数据库执行搜索。这P应用看v来更具响应了Q而整个页面不需要重载来昄l果?br />
数据?/span>
我们使用的数据库是HSQLQ它是一U占用资源很的Java SQL数据库引擎,可以不需要安装和配置的与Web应用捆绑在一赗一个SQL文g被用来在Web应用的上下文启动时创Z个内存中的表q添加一些记录?br />
Javac?/span>
应用包含了两个主要的cdApartment和ApartmentDAO。Apartment.javacL一个有着属性和getter/setterҎ的简单的JavacRApartmentDAO.java是数据访问类Q用来查询数据库q基于用L搜烦标准来返回信息。ApartmentDAOcȝ实现的直接了当的;它直接用了Java数据库联接调用来得到公寓的L和符合用戯求的可用公寓的列表?br />
DWR配置和?/span>
讄DWR的用是单的Q将DWR的jar文g拷入Web应用的WEB-INF/lib目录中,在web.xml中增加一个servlet声明Qƈ创徏DWR的配|文件。DWR的分发中需要用一个单独的jar文g。你必须DWR servlet加到应用的WEB-INF/web.xml中布|描q段中去?br />
						    <servlet>
        <servlet-name>dwr-invoker</servlet-name>
        <display-name>DWR Servlet</display-name>
        <description>Direct Web Remoter Servlet</description>
        <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>


一个可选的步骤是设|DWR试模式—象上面的例子那样—在servlet描述D中debug参数设ؓtrue。当DWR在调试模式时Q你可以从HTMl|页中看到所有的可访问的Java对象。包含了可用对象列表的网会出现?WEBAPP/dwrq个url上,它显CZ对象的公共方法。所列方法可以从面中调用,允许你,W一ơ,q行服务器上的对象的Ҏ。下图显CZ调试늚样子:

image
调试?br />
现在你必让DWR知道通过XMLHttpRequest对象Q什么对象将会接收请求。这个Q务由叫做dwr.xml的配|文件来完成。在配置文g中,定义了DWR允许你从|页中调用的对象。从设计上讲QDWR允许讉K所有公布类的公共方法,但在我们的例子中Q我们只允许讉K几个Ҏ。下面是我们CZ的配|文?
						<dwr>
    <allow>
        <convert converter="bean" match="dwr.sample.Apartment"/>
        <create creator="new" javascript="ApartmentDAO" class="dwr.sample.ApartmentDAO">
            <include method="findApartments"/>
            <include method="countApartments"/>
        </create>
    </allow>
</dwr>


上面的文件实C我们例子中的两个目标。首先,<convert>标记告诉DWRdwr.sample.Apartment对象的类型{换ؓ联合数组Q因为,Z安全的原因,DWR默认的不会{换普通bean。第二,<create>标记让DWR暴露出dwr.sample.ApartmentDAOcȝJavaScript调用;我们在页面中使用JavaScript文g被javascript属性定义。我们必L?lt;include>标记Q它指明了dwr.sample.ApartmentDAOcȝ哪些Ҏ可用?br />
HTML/JSP代码
配置完成后,你就可以启动你的Web应用了,q时DWR会ؓ从你的HTML或Java服务器端面(JSP)上调用所需Ҏ作好准备Qƈ不需要你创徏JavaScript文g。在search.jsp文g中, 我们必须增加由DWR提供的JavaScript接口Q还有DWR引擎Q加入以下三行到我们的代码中Q?br />
						  <script src='dwr/interface/ApartmentDAO.js'></script>
  <script src='dwr/engine.js'></script>
  <script src='dwr/util.js'></script>


我们注意到当用户改变搜烦标准Ӟq是AJAX在示例程序中的首ơ应?正如他所看到的,当标准改变时Q可用的公寓数量被更C。我创徏了两个JavaScript函数Q当某一个选择下拉框中的值变化时被调用。ApartmentDAO.countApartments()函数是最重要的部分。最有趣的是W一个参? loadTotal()函数Q它指明了当接收到服务端的返回时DWR会调用的JavaScriptҎ。loadTotal于是被调用来在HTML面?lt;div>中显C结果。下面是在这个交互场景中所使用到的JavaScript函数:

						function updateTotal() {
    $("resultTable").style.display = 'none';
    var bedrooms = document.getElementById("bedrooms").value;
    var bathrooms = document.getElementById("bathrooms").value;
    var price = document.getElementById("price").value;
    ApartmentDAO.countApartments(loadTotal, bedrooms, bathrooms, price);
}

function loadTotal(data) {
    document.getElementById("totalRecords").innerHTML = data;
}


很明显,用户想看到符合他的搜索条件的公寓列表。那么,当用户对他的搜烦标准感到满意Qƈ且L也是有效的话Q他会按下显C结果的按纽Q这会调用updateResults() JavaScriptҎQ?br />
						function updateResults() {
    
    DWRUtil.removeAllRows("apartmentsbody");
    var bedrooms = document.getElementById("bedrooms").value;
    var bathrooms = document.getElementById("bathrooms").value;
    var price = document.getElementById("price").value;
    ApartmentDAO.findApartments(fillTable, bedrooms, bathrooms, price);
    $("resultTable").style.display = '';
}

function fillTable(apartment) {
    DWRUtil.addRows("apartmentsbody", apartment, [ getId, getAddress, getBedrooms, getBathrooms, getPrice ]);
}


updateResults()Ҏ清空了存放搜索返回结果的表域Q从用户界面上获取所需参数Qƈ且将q些参数传给DWR创徏的ApartmentDAO对象。然后数据库查询被执行QfillTable()会被调用,它解析了DWRq回的对?apartment)Q然后将其显C到面?apartmentsbody)?br />
安全因素
Z保持CZ的简要,ApartmentDAOcd可能的保持简单,但这L一个类通常有一l设|方法来操作数据Q如insert(), update()和delete()。DWR暴露了所有公共方法给所有的HTML面调用。出于安全的原因Q像q样暴露你的数据讉K层是不明智的。开发者可以创Z个门面来集中所有JavaScript函数与底层业务组件之间的通信Q这样就限制了过多暴露的功能?br />
l论
q篇文章仅仅让你在你的项目中使用由DWR支持的AJAX开了个头。DWR让你集中注意力在如何提高你的应用的交互模型上面,消除了编写和调试JavaScript代码的负担。用AJAX最有趣的挑战是定义在哪里和如何提高可用性。DWR负责了操作Web面与你的Java对象之间的通信Q这样就帮助你完全集中注意力在如何让你的应用的用L面更加友好,
我想感谢Mircea Oancea和Marcos Pereira,他们阅读了这文章ƈl予了非常有价值的q匮?br />
资源
·javaworld.com:
javaworld.com
·Matrix-Java开发者社? http://www.matrix.org.cn/
·onjava.com: onjava.com
·下蝲CZE序的全部源? http://www.javaworld.com/javaworld/jw-06-2005/dwr/jw-0620-dwr.war
·DWR: http://www.getahead.ltd.uk/dwr/index.html
·HSQL:http://hsqldb.sourceforge.net/
·AJAX的定?http://en.wikipedia.org/wiki/AJAX
· “AJAX:通向Web应用的新途径": Jesse James Garrett (Adaptive Path, 2005.2): http://www.adaptivepath.com/publications/essays/archives/000385.php
· “非常动态的Web界面?Drew McLellan (xml.com, 2005.2): http://www.xml.com/pub/a/2005/02/09/xml-http-request.html
·XMLHttpRequest & AJAX 工作范例: http://www.fiftyfoureleven.com/resources/programming/xmlhttprequest/examples
· “可用的XMLHttpRequest实践?Thomas Baekdal (Baekdal.com, 2005.3): http://www.baekdal.com/articles/Usability/usable-XMLHttpRequest/
·"XMLHttpRequest使用导引" Thomas Baekdal (Baekdal.com,  2005.2):http://www.baekdal.com/articles/Usability/XMLHttpRequest-guidelines/
·AJAX实质:http://www.ajaxmatters.com/

(看完后个人感觉:有了DWRJAVA开发而言Q完全可以与AJAXҎ啦,省了在JS上对XMLHTTP以及对DOM的处理,不可以避免地在后台对应的IO处理Q然后就DWR来说Q它增加了对XML中对应的配置--在开源框架中g一直不曑ց止过。还有对一些DWR自有用法如DWRUtil.addRows得参考其相关文档---当然q样的功能我们自׃可以用JS来解冻Iq且它显然很实用。add by jkallen)


nbt 2006-07-20 12:38 发表评论
]]>
Ajax包装成对象?/title><link>http://www.aygfsteel.com/nbtymm/archive/2006/06/09/51728.html</link><dc:creator>nbt</dc:creator><author>nbt</author><pubDate>Fri, 09 Jun 2006 08:50:00 GMT</pubDate><guid>http://www.aygfsteel.com/nbtymm/archive/2006/06/09/51728.html</guid><wfw:comment>http://www.aygfsteel.com/nbtymm/comments/51728.html</wfw:comment><comments>http://www.aygfsteel.com/nbtymm/archive/2006/06/09/51728.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/nbtymm/comments/commentRss/51728.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/nbtymm/services/trackbacks/51728.html</trackback:ping><description><![CDATA[ <p> <font color="#000000"> <font face="Arial">   Ajax目前是社区内最热门的话题之一了,最q在我们的项目中用了大量的AjaxQ现在把我们的用方法在q儿写出来,希望大家能指教?br /><br />因ؓ要用到Ajaxp定要用到XMLHttpRequest对象Q但׃不同的浏览器版本Q相应的生成它的Ҏ也有所不同Q所以我们不得不Ҏ览器的版本进行判断,试想Q如果我们要在很多地斚w要写那些J琐的代码会觉的很麻烦,代码的重用也很低Q所以我们写一个Ajax的对象。代码如下:<br /><br /><strong><font style="BACKGROUND-COLOR: #ffffff" color="#008000">//*********************************************************<br />// 目的Q  ?AJAXc?br />// 输入Q  ??br />// q回Q  ?q回XMLHttp对象<br />// 例子Q  ?var myConn = new XHConn();<br />//<br />//           if (!myConn) alert("XMLHTTP not available. Try a newer/better browser.");<br />//<br />//           var fnWhenDone = function (oXML) { alert(oXML.responseText); };<br />//<br />//           myConn.connect("mypage.php", "POST", "foo=bar&baz=qux", fnWhenDone);<br />//<br />//*********************************************************<br />function XHConn()<br />{<br />  var xmlhttp = false, bComplete = false;<br />  try <br />  { <br />   xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); <br />  }<br />  catch (e) <br />  { <br />   try <br />   { <br />    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); <br />   }<br />    catch (e) <br />    { <br />    try <br />    { <br />     xmlhttp = new XMLHttpRequest(); <br />    }<br />    catch (e) <br />    { <br />     xmlhttp = false; <br />    }<br />   }<br />  }<br />  if (!xmlhttp) return null;<br />  this.connect = function(sURL, sMethod, sVars, fnDone)<br />  {<br />    if (!xmlhttp) return false;<br />    bComplete = false;<br />    sVars = (sVars == '') ? Math.random() : sVars + "&" + Math.random();<br />    sMethod = sMethod.toUpperCase();</font></strong></font> </font> <font style="BACKGROUND-COLOR: #ffffff"> <font color="#008000"> <strong> </strong> </font> </font> </p> <p> <font color="#000000"> <font face="Arial"> <strong> <font style="BACKGROUND-COLOR: #ffffff" color="#008000">    try <br />    {<br />      if (sMethod == "GET")<br />      {<br />        xmlhttp.open(sMethod, sURL+"?"+sVars, true);<br />        xmlhttp.setRequestHeader("Content-Type", "text/html;charset=GB2312");<br />        sVars = "";<br />      }<br />      else<br />      {<br />        xmlhttp.open(sMethod, sURL, true);<br />        xmlhttp.setRequestHeader("Method", "POST "+sURL+" HTTP/1.1");<br />        xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");<br />      }<br />      xmlhttp.onreadystatechange = function()<br />      {<br />        if (xmlhttp.readyState == 4 && !bComplete)<br />        {<br />          bComplete = true;<br />          fnDone(xmlhttp);<br />        }<br />      };<br />      <br />      xmlhttp.send(sVars);<br />    }<br />    catch(z) <br />    { <br />     return false; <br />    }<br />    return true;<br />  };<br />  <br />  return this;<br />}<br /></font> </strong> <br /> <br />通过q个对象Q我们把那些J琐的代码都装到里面,q样大大提高了代码的重用性,每次要用Ajax时我们只需要在我们的页面上 new一个XHConn()对象p了,然后通过调用它的ҎconnectQsURL, sMethod, sVars, fnDoneQ就可以和服务器q行异步交互了?/font> </font> </p> <img src ="http://www.aygfsteel.com/nbtymm/aggbug/51728.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/nbtymm/" target="_blank">nbt</a> 2006-06-09 16:50 <a href="http://www.aygfsteel.com/nbtymm/archive/2006/06/09/51728.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>掌握Ajax- W一部分QAjax?转IBM开发?http://www.aygfsteel.com/nbtymm/archive/2006/05/18/46797.htmlnbtnbtThu, 18 May 2006 05:51:00 GMThttp://www.aygfsteel.com/nbtymm/archive/2006/05/18/46797.htmlhttp://www.aygfsteel.com/nbtymm/comments/46797.htmlhttp://www.aygfsteel.com/nbtymm/archive/2006/05/18/46797.html#Feedback0http://www.aygfsteel.com/nbtymm/comments/commentRss/46797.htmlhttp://www.aygfsteel.com/nbtymm/services/trackbacks/46797.html阅读全文

nbt 2006-05-18 13:51 发表评论
]]>
վ֩ģ壺 | | ߰| | | | ¹Ȫ| | ԭƽ| | | | | ƽ| | ½| | ľ| ƽ| | ϴ| | | ˳| ʡ| | ֽ| ͨ| | | | | ˮ| | | | Ӫ| ֣| | | |