DWR使用入門教程

1.DWR簡介

DWRDirect Web Remoting)是一個Ajax的開源框架,用於改善web頁面與Java類交互的遠程服務器端的交互體驗,可以幫助開發人員開發包含AJAX技術的網站。它可以允許在瀏覽器裏的代碼使用運行在WEB服務器上的JAVA函數,就像它就在瀏覽器裏一樣。

2.開發流程

  1. 編寫業務代碼,該代碼是和dwr無關的。

  2. 確認業務代碼中哪些類、哪些方法是要由javascript直接訪問的。

  3. 編寫dwr組件,對步驟2的方法進行封裝。

  4. 配置dwr組件到dwr.xml文件中,如果有必要,配置convert,進行javajavascript類型互轉。

  5. 通過反射機制,dwr將步驟4的類轉換成javascript代碼,提供給前臺頁面調用。

  6. 編寫網頁,調用步驟5javascript中的相關方法(間接調用服務器端的相關類的方法),執行業務邏輯,將執行結果利用回調函數返回。

  7. 在回調函數中,得到執行結果後,可以繼續編寫業務邏輯的相關javascript代碼。

3.簡單樣例

3.1.樣例說明

參照DWR源碼自帶樣例,完成一個sayHello功能,通過此樣例熟悉dwr的運行原理和編寫規範。

3.2.下載資源

DWR官網下載最新版本的jar包,地址:

http://directwebremoting.org/dwr/downloads/index.html

jar包放入WEB-INFlib文件夾下。同時,dwr依賴於commons-logging.jar這個包,所以必須將這個jar包也放入到WEB-INFlib文件夾下。

3.3.web.xml文件

    首先是配置dwr的環境:

    <servlet>

       <servlet-name>dwr-invoker</servlet-name>

       <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>

       <init-param>

           <param-name>debug</param-name>

           <param-value>true</param-value>

       </init-param>

       <init-param>     

           <param-name>crossDomainSessionSecurity</param-name>     

           <param-value>false</param-value>     

        </init-param>

       <load-on-startup>1</load-on-startup>

    </servlet>

 

    <servlet-mapping>

       <servlet-name>dwr-invoker</servlet-name>

       <url-pattern>/dwr/*</url-pattern>

   </servlet-mapping>

3.4.dwr.xml文件

從官網的jar.war文件中利用winRAR等軟件提取出dwr.xml文件,並將其放入到WEB-INF文件夾下。

        dwr.xmldwr的核心配置文件,主要的標籤有:<converter><convert><create>這三個標籤。

 

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

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

 

<dwr>

  <allow>

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

      <param name="class" value="com.agileai.test.simpletext.Demo"/>

    </create>

  </allow>

</dwr>

 

其中,creatorjavascript是必須屬性,其他可以忽略。creator包含有以下幾個值:

  1. newJava用“new”關鍵字創造對象

  2. none:它不創建對象  (v1.1+)

  3. scripted:通過BSF使用腳本語言創建對象,例如BeanShellGroovy

  4. spring:通過Spring框架訪問Bean

  5. struts:使用StrutsFormBean  (v1.1+)

  6. jsf:使用JSFBean  (v1.1+)

  7. pageflow:訪問WeblogicBeehivePageFlow  (v1.1+)

  8. ejb3:使用EJB3session bean  (v2.0+)

    3.5.Html文件

<html>

<head>

  <title>簡單文本生成樣例</title>

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

  <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/Demo.js'> </script>

  <script type="text/javascript">

  function update() {

      var name = dwr.util.getValue("demoName");

      Demo.sayHello(name, function(data) {

        dwr.util.setValue("demoReply", data);

      });

  }

  </script>

</head>

<body>

      姓名:

      <input type="text" id="demoName"value="Joe"/>

      <input value="發送" type="button"onclick="update()"/><br/>

      回覆:

      <span id="demoReply"></span>

</body>

</html>

 其中engine.js必須要,如果需要用到dwr提供的一些方便的工具要引用util.js,然後是dwr自動生成的js文件,名字必須和dwr.xmlcreate標籤的javascript屬性值一樣,且是dwr/interface開頭的目錄。

3.6.Java文件

package com.agileai.test.simpletext;

 

publicclassDemo {

   

    public String sayHello(Stringname) {

       return"Hello, "+ name;

    }

 

} 

3.7.運行原理

  1. 當你點擊瀏覽器調用的“發送”按鈕onclick事件,調用update()函數。

  2. 在服務器上,DWR調用Demo.sayHello()Java方法。

  3. 該方法返回的時候,DWR調用回調函數,設置回覆值。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章