瘋狂

          STANDING ON THE SHOULDERS OF GIANTS
          posts - 481, comments - 486, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          DWR學(xué)習(xí)及應(yīng)用

          Posted on 2007-11-25 20:31 瘋狂 閱讀(1846) 評論(0)  編輯  收藏

          DWR是一個開源的類庫,可以幫助開發(fā)人員開發(fā)包含AJAX技術(shù)的網(wǎng)站.它可以允許在瀏覽器里的代碼使用運行在WEB服務(wù)器上的JAVA函數(shù),就像它就在瀏覽器里一樣.
              DWR允許使用客戶端Javascript來與服務(wù)端Java程序進行交互,他實際上是幫助開發(fā)者隱藏了很多的開發(fā)細節(jié)。不用辛苦的去使用XMLHTTP,DWR是客戶端-服務(wù)端的AJAX比較好的解決方案。

             它包含兩個主要的部分:允許JavaScript從WEB服務(wù)器上一個遵循了AJAX原則的Servlet(小應(yīng)用程序)中獲取數(shù)據(jù).另外一方面一個JavaScript庫可以幫助網(wǎng)站開發(fā)人員輕松地利用獲取的數(shù)據(jù)來動態(tài)改變網(wǎng)頁的內(nèi)容.
              DWR采取了一個類似AJAX的新方法來動態(tài)生成基于JAVA類的JavaScript代碼.這樣WEB開發(fā)人員就可以在JavaScript里使用Java代碼就像它們是瀏覽器的本地代碼(客戶端代碼)一樣;但是Java代碼運行在WEB服務(wù)器端而且可以自由訪問WEB 服務(wù)器的資源.出于安全的理由,WEB開發(fā)者必須適當?shù)嘏渲媚男㎎ava類可以安全的被外部使用.
             
            這個從JAVA到JavaScript的遠程功能方法給DWR的用戶帶來非常像傳統(tǒng)的RPC機制,就像RMI或者SOAP一樣,而且擁有運行在WEB上但是不需要瀏覽器插件的好處.
              DWR不認為瀏覽器/WEB服務(wù)器協(xié)議是重要的,而更樂于保證編程界面的簡單自然.對此最大的挑戰(zhàn)就是把AJAX的異步特性和正常JAVA方法調(diào)用的同步特性相結(jié)合.在異步模式下,結(jié)果數(shù)據(jù)在開始調(diào)用之后的一段時間之后才可以被異步訪問獲取到.DWR允許WEB開發(fā)人員傳遞一個回調(diào)函數(shù),來異步處理Java函數(shù)調(diào)用過程
            

          DWR Javascript庫中常用函數(shù)的使用

          設(shè)置異步/同步模式  

          默認情況下,DWR以異步的方式跟服務(wù)器通信,即可以同時向服務(wù)器發(fā)送請求,如果想要改為同步的方式,可以調(diào)用:dwr.engine.setAsync(false);

          獲得對某個頁面元素對象的引用

          $(“元素的ID或名稱”)

          對列表元素的支持

          dwr.util.removeAllOptions()

          dwr.util.addOptions()

          dwr.util.getValue()

          dwr.util.setValue()

              

          Dwr的一個應(yīng)用:

          官方網(wǎng)址: http://getahead.org/dwr

          下載dwr.jar,將其加入web-inf/lib目錄

          修改web.xml文件,添加DWRServlet的映射

           <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,即在WEB-INF目錄下,添加dwr.xml文件,讓dwr知道在運行的時候應(yīng)該給哪些JavaBean生成相應(yīng)的javascript庫!

          <?xml version="1.0" encoding="UTF-8"?>

          <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd">

          <dwr>

           <allow>

              <create creator="new" javascript="test1">

                <param name="class" value="com.dwr.Test1"/>

              </create>

           </allow>

          </dwr>
           

          這個配置的意思是,要創(chuàng)建的是Test1對象的javascript庫,而且這個庫的名字叫test1,同時,這也是我們在JSP頁面上調(diào)用這個對象的時候所使用的名稱,請看下面的JavaBean代碼和JSP實例:

          4、下面是Test1這個JavaBean的源代碼:

           

          package com.dwr;

          public class Test1 {

              public String sayHello(String name){

                 return "你好,"+name;

              }

          }
          5、在JSP中的使用
           

          <%@ page language="java" contentType="text/html; charset=GB18030"

              pageEncoding="GB18030"%>

          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

          <html>

          <head>

          <meta http-equiv="Content-Type" content="text/html; charset=GB18030">

          <script type="text/javascript" src="dwr/engine.js"></script>

          <script type="text/javascript" src="dwr/util.js"></script>

          <script type="text/javascript" src="dwr/interface/test1.js"></script>

          <title>Insert title here</title>

          <script type="text/javascript">

          function sayHello(){

              test1.sayHello("李四ddd",

                 function(data){

                     alert(data);

                 }

              );

          }

          </script>

          </head>

          <body>

          <a href="#" onclick="sayHello()">Test1</a>

          </body>

          </html>
           

          讓我們簡單看一下這個JSP文件:首先引入DWR中的兩個核心javascript庫:engine.jsutil.js,它們分別是dwr中的核心引擎庫和輔助工具函數(shù)庫!

           

             第三個引入的dwr/interface/test1.js,實際上這個文件并不存在,這是由dwr在運行的時候動態(tài)生成的!test1這個名稱,跟dwr.xml文件中配置的對應(yīng)對象的javascript屬性一致!

          而且,我們在使用的時候,直接使用test1這個名稱,作為這個對象的引用。直接調(diào)用這個對象的方法:sayHello,這個方法的名稱必須與JavaBean中的方法名稱一致!

          sayHello方法有一個參數(shù),同時返回一個值。我們可以直接傳遞參數(shù),同時指定一個javascript函數(shù)來處理這個返回值(如上例所示)。

          如何傳遞參數(shù)

          如果要調(diào)用的方法有參數(shù),則將參數(shù)放在前面

          如何處理返回值

          定義一個函數(shù)來處理返回值,這個函數(shù)有一個參數(shù),就是JavaBean方法的返回值


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 扶余县| 乐昌市| 柳林县| 深圳市| 华蓥市| 洪泽县| 石柱| 绩溪县| 合江县| 清涧县| 东源县| 文昌市| 买车| 秦皇岛市| 芒康县| 姚安县| 潞西市| 迭部县| 亚东县| 兴安县| 陆丰市| 黎川县| 抚宁县| 改则县| 建阳市| 西宁市| 津市市| 鄂托克旗| 英吉沙县| 修文县| 塘沽区| 华阴市| 乌拉特中旗| 万载县| 庄浪县| 沈阳市| 松溪县| 芦溪县| 南澳县| 宣恩县| 独山县|