2011年12月19日 星期一

【DWR】範例

最近因為打工又要學一些東西,這次是 DWR。以下先介紹它一下巴

簡單說它簡化了AJAX的開發在一個以Java為主的WEB應用上

它的範疇主要是在 Javascript to Java 的一種 RPC 框架  跟ZK比起來就比較不一樣了

更進一步解釋就是它能夠讓你在前端的網頁程式中運用 Javascript 遠端呼叫

Java 的程式,也可以讓Javascript 接收 Java 端自定義的 Bean。

以下用一個簡單的範例來呈現 DWR

首先環境是 Apache Tomcat 6,並去http://directwebremoting.org/dwr/downloads/ 下載JAR檔

額外補充的是 DWR 需要用到 Apache 的開源套件 commons-logging

所以還是要去 http://commons.apache.org/logging/download_logging.cgi 在下載JAR檔

下載完成後同樣先透過 Eclipse 建立一個 Dynamic Web Project

並將這兩個 JAR 檔放到 WEB-INF/lib 裡,完成後就可以寫個 Hello world 的程式

第一步驟要先在 WEB-INF/web.xml 加上一段程式


<servlet>
    <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>



接著我們 做一個類似遠端的 Service

package org.service;
/**
 * @author allen
 *
 */
public class Hello {
    public String echo(){
        return "Hello World";
    }
}
寫完上面的程式之後要在新增 dwr.xml 在 WEB-INF/ 

這個 xml 檔住要告訴 DWR 有哪些Javascript與Java之間的服務和轉換的Bean等等的


<?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="Hello">
      <param name="class" value="org.service.Hello" />
    </create>
  </allow>
</dwr>


上面的 creator="new" 表示會用無參數的建構子產生 org.service.Hello 這個實體

而 javascript="Hello" 表是前端往葉可以透過 Hello 來呼叫  org.service.Hello

最後就可以來看一下一個簡單的網頁裡要如何達到結果


<html>
<head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  <script type='text/javascript' src='dwr/interface/Hello.js'></script>
    <script type='text/javascript' src='dwr/engine.js'></script>
    <script type='text/javascript' src='dwr/util.js'></script>
    <script type="text/javascript">
    function Echo(){
         Hello.echo(callBack);//呼叫完echo後會呼叫callBack這個function
    }
    function callback(message){
          DWRUtil.setValue("show", message);
    }
    </script>
</head>
<body>
     <input id="button" type='button' value='ECHO' onclick=Echo();' />
     <br />
     Result : <br />
     <span id=" show "></span>  
</body>
</html>

沒有留言:

張貼留言