生活随笔
收集整理的這篇文章主要介紹了
Ajax框架DWR入门
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Direct Web RemotingDWR allows Javascript in a browser to interact with Java on a server and helps you manipulate web pages with the results.DWR is Easy Ajax for Java官方網(wǎng)站:http://getahead.ltd.uk/dwr///DWR--不錯(cuò)的Ajax框架之一本文內(nèi)容:
DWR介紹 DWR原理 DWR開發(fā)步驟 dwr.xml說明 DWR核心引擎 DWR工具包 DWR介紹
在服務(wù)器上運(yùn)行的Servlet來處理請(qǐng)求并把結(jié)果返回瀏覽器。 運(yùn)行在瀏覽器上的Javascript,可以發(fā)送請(qǐng)求,并動(dòng)態(tài) 改變頁面。DWR會(huì)根據(jù)你的Java類動(dòng)態(tài)的生成Javascript代碼。這些代碼魔力是讓你感覺整個(gè)Ajax調(diào)用都是在瀏覽器上發(fā)生的,但事實(shí)上是服務(wù)器執(zhí)行了這些代碼,DWR負(fù)責(zé)數(shù)據(jù)的傳遞和轉(zhuǎn)換。 這種Java和Javascript之間的遠(yuǎn)程調(diào)用會(huì)讓DWR用戶感覺像是曾經(jīng)習(xí)慣使用的RMI或SOAP的RPC機(jī)制。而且這一過程還不需要額外的瀏覽器插件。 Java是同步的,而Ajax是異步的。所以當(dāng)你調(diào)用一個(gè)遠(yuǎn)程方法時(shí),你要給DWR一個(gè)回調(diào)函數(shù),當(dāng)數(shù)據(jù)從網(wǎng)絡(luò)上回來時(shí),DWR會(huì)調(diào)用這個(gè)函數(shù)。 有效地從應(yīng)用程序代碼中把 Ajax 的全部請(qǐng)求-響應(yīng)循環(huán)消除掉。 客戶端代碼再也不需要直接處理XMLHttpRequest 對(duì)象或者服務(wù)器的響應(yīng)。 不再需要編寫對(duì)象的序列化代碼或者使用第三方工具才能把對(duì)象變成 XML。 不再需要編寫 servlet 代碼把 Ajax 請(qǐng)求調(diào)整成對(duì) Java 域?qū)ο蟮恼{(diào)用 DWR原理
DWR是作為Web應(yīng)用的一個(gè)Servlet進(jìn)行部 署的,是一個(gè)黑盒子中的servlet。 對(duì)于公共有的每個(gè)類,DWR 動(dòng)態(tài)地生成包含在 Web 頁面中的 JavaScript。生成的JavaScript 包含存根函數(shù),代表 Java 類上的 對(duì)應(yīng)方法并在幕后執(zhí)行XMLHttpRequest。這些請(qǐng)求被發(fā)送給DWR。 把請(qǐng)求翻譯成服務(wù)器端 Java 對(duì)象上的方法調(diào)用并把方法的返回值放在servlet 響應(yīng)中發(fā)送回客戶端,編碼成 JavaScript。 DWR開發(fā)步驟
http://getahead.org/dwr/download Copy dwr.jar into WEB-INF/lib 代碼片斷:<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>
不要出現(xiàn)Javascript保留關(guān)鍵字;和保留關(guān)鍵字同名的函數(shù)指定被排除。多數(shù)Javascript的關(guān)鍵字和Java是相同的。所以你不可能有一個(gè)方法叫做”try()”。但是該死”delete()”對(duì)與Javascript有著特殊意義,而對(duì)Java則不是。 Javascript方法重載是不支持的,所以盡量不要再Java中使用。 一個(gè)小例子:下載: HelloWorld.javapackage cn.com.jacken.dwr;public class HelloWorld {????public String sayHello(String name) {????????return "Hi, " + name;????}}
在dwr.xml文件注冊(cè)Java對(duì)象 舉例:<dwr>????<allow>????????<create creator="new" javascript="HelloWorld" scope="page">????????????<param name="class" value="cn.com.jacken.dwr.HelloWorld" />????????</create>????</allow></dwr>
代碼片段:<script src='dwr/engine.js'></script> <script src='dwr/util.js'></script> <script src='dwr/interface/HelloWorld.js'></script>dwr.xml說明請(qǐng)看另外一篇文章:DWR配置文件dwr.xml詳解 DWR核心引擎engine.js
頁面中加入: <script type='text/javascript' src='dwr/engine.js' /> 設(shè)置超時(shí)時(shí)間: 全局設(shè)置: dwr.engine.setTimeout(1000);局部設(shè)置(優(yōu)先級(jí)高):Remote.singleMethod(params, { callback:function(data){ ... }, timeout:2000 }); 錯(cuò)誤處理: 全局設(shè)置: function handler(msg) {alert(msg);}dwr.engine.setErrorHandler(handler);局部設(shè)置:Remote.method(params, {callback:function(data) { ... },errorHandler:handler}); 批量執(zhí)行 : dwr.engine.beginBatch();var selValue=…;//調(diào)用服務(wù)器Java程序Province.getCitiesByProvince(selValue,callBack);Province.getNick(callBack2);dwr.engine.endBatch({timeout:3000});//… DWR工具包
必須在頁面引入util.js <script src='dwr/util.js'>??</script> $(”username”) = document.getElementById(”username”); setValue(id, value):這個(gè)函數(shù)能操作大多數(shù)HTML元素 getValue(id):getValue(id)是 setValue()對(duì)應(yīng)的”讀版本”。 setValues():批量設(shè)置值 getValues():批量獲取值 getText(id):為select列表設(shè)計(jì)的。你可能需要取得顯示的文字,而不是當(dāng)前選項(xiàng)的值。 selectRange:選擇一個(gè)輸入框中的一定范圍的文字。 ……
總結(jié)
以上是生活随笔 為你收集整理的Ajax框架DWR入门 的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。