`

DWR 入门与应用(一)

阅读更多

請先到 http://getahead.ltd.uk/dwr/ 下載 dwr.jar,放到WEB-INF/lib下…

負責處理客戶端請求,並呼叫Java物件的是DWRServlet,DWR其實也有些Model 2的味道,只是View的這一層比較弱,因為放到客戶端的JavaScript應用程式中…

在web.xml中加入DWRServlet…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

<?xml version="1.0"
 encoding="UTF-8"
?>
<web-app id="WebApp_ID"
 version="2.4"
 
xmlns="http://java.sun.com/xml/ns/j2ee"
 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 
xsi:schemaLocation=
"http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
>
  <display-name>
  ajaxDWR</display-name>
  <servlet>
    <servlet-name>dwr-invoker</servlet-name>
    <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
    <init-param>
      <description>
      </description>
      <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>
</web-app>



接下來寫個簡單的Hello吧!
1
2
3
4
5
6
7

package

 onlyfun.caterpillar;
 
public

 class

 Hello {

  public

 String hello(String name) {

      return

 "哈囉!"
 + name + "!您的第一個DWR!"
;
    }

}
 


客戶端要呼叫這個Java物件,傳給它參數,而後傳回一個字串,客戶端再顯示這個字串,神奇?其實是要告訴DWRServlet這件事,這需要一個dwr.xml:
1
2
3
4
5
6
7
8
9
10
11

<?xml version="1.0"
 encoding="UTF-8"
?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"

 "http://www.getahead.ltd.uk/dwr/dwr10.dtd"
>
 
<dwr>
  <allow>
    <create creator="new"
 javascript="Hello"
>
      <param name="class"
 value="onlyfun.caterpillar.Hello"
 />
    </create>
  </allow>
</dwr>


creator設定為new,表示使用Hello的無參數建構子來生成物件,javascript設定為Hello,表示客戶端JavaScript程式可以使用Hello來呼叫對應的onlyfun.caterpillar.Hello物件。

來寫個客戶端的網頁,當中有一個輸入欄位…
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
>
<html>
<head>
<meta http-equiv="Content-Type"
 content="text/html; charset=BIG5"
>
  <title>第一個DWR程式</title>
  <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'
 src='hello.js'
></script>
</head>
<body>
 
<input id="user"
 type="text"
 />
<input type='button'
 value='哈囉'
 onclick='hello();'
 /> 
 
<div id="result"
></div>
 
</body>
</html>


dwr/interface/Hello.js是由DWRServlet根據dwr.xml中的設定生成的,engine.js負責客戶端伺服端溝通,util.js是一些好用的JavaScript程式,可以讓您少寫很多JavaScript。

hello.js是我們自訂的函式,按下按鈕後,會呼叫當中的hello()函式:
1
2
3
4
5
6
7
8

function hello() {

    var user = $('user'
).value;
    Hello.hello(user, callback);
}

 
function callback(msg) {

   DWRUtil.setValue('result'
, msg);
}
 


${'user'}取得輸入欄位的DOM物件,value取得當中的欄位值,而後呼叫Hello.hello(),並將value當作參數傳送… 結果是呼叫Server端的Hello Java物件,當結果傳回後,會呼叫JavaScript的callback函式,DWRUtil的setValue()方法會將傳回的msg設定給指定 id的DOM,結果就是…啥!AJAX的功能在哪…就這個而言就是發出非同步請求,而回應不用Refresh頁面啦! 


好啦!這個無聊的Hello DWR可以做啥!…XD

已經可以讓您做個簡單的文字提示功能了…像這個…
http://caterpillar.onlyfun.net/Gossip/index.html

把滑鼠指到書的照片上,會顯示提示文字,這些提示文字本身不是存在網頁上的,而是在Server端,當滑鼠指到書上時,會用Request object去抓,然後顯示在框框中…

當然!我的網站只支援PHP,所以那不是DWR完成的功能,而且我是直接用Request object跟DOM去慢慢刻的…對初學者來說已經有些麻煩了…XD

不過!用DWR就可以很簡單完成這個功能…

先寫個Java類別吧!會抓properties檔案中的文字訊息,例如…
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

package

 onlyfun.caterpillar;
 
import

 java.util.ResourceBundle;
 
public

 class

 Book {

  private

 ResourceBundle resource;
  
  public

 Book() {

    resource = ResourceBundle.getBundle("book"
); 
  }

        
  public

 String getDescription(String key) {

    return

 resource.getString(key);
  }

}
 


從程式中就知道,它會去抓book_zh_TW.properties的資料,這不是重點啦!只是Java的一個功能,我們要看的是DWR,不過先把book_zh_TW.properties準備好…
1
2
3

java=Java 學習筆記的介紹 … BlaBla...
spring=Spring 技術手冊的介紹…BlaBla...
ajax=Ajax in action 中文版的介紹…


唔!裏頭是中文字,自己用native2ascii轉換吧…這也不是重點…我們是要看DWR怎麼做到文字提示功能…

一樣的…要開放這個Book物件,在dwr.xml中…
1
2
3
4
5
6
7
8
9
10
11

<?xml version="1.0"
 encoding="UTF-8"
?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
 
"http://www.getahead.ltd.uk/dwr/dwr10.dtd"
>
 
<dwr>
  <allow>
  <create creator="new"
 javascript="Book"
 scope="application"
>
            <param name="class"
 value="onlyfun.caterpillar.Book"
/>
        </create>  
  </allow>
</dwr>


scope設定為application,表示這個Book物件在整個應用程式階段都活著。

然後,客戶端寫個網頁…
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
>
<html>
<head>
<meta http-equiv="Content-Type"
 content="text/html; charset=BIG5"
>
  <script type='text/javascript'
 src='dwr/interface/Book.js'
></script>
  <script type='text/javascript'
 src='dwr/engine.js'
></script>
  <script type='text/javascript'
 src='dwr/util.js'
></script>
  <script type='text/javascript'
 src='book.js'
></script>
<title>個人著/譯作</title>
</head>
<body>
 
      <div id="ajax"
 onmouseover="getBookData(this);"

 onmouseout="clearData();"
><a
 href="http://www.gotop.com.tw/waweb2004/home/home.aspx?pg=HM010X&bn=AXP011800"
><small><img
 style="border: 0px solid ; width: 80px; height: 110px; float: left;"

 alt="Ajax in action 中文版"
 title="Ajax in action 中文版"

 src="images/ajax_in_action_c.jpg"
 hspace="10"
 vspace="2"
></small></a></div>
 
      <div id="spring"
 onmouseover="getBookData(this);"

 onmouseout="clearData();"
><a
 href="http://www.gotop.com.tw/waweb2004/home/home.aspx?pg=HM010X&bn=ACL021000"
><small><img
 style="border: 0px solid ; width: 80px; height: 110px; float: left;"

 alt="Spring 技術手冊"
 title="Spring 技術手冊"

 src="images/SpringTech_S.jpg"
 hspace="10"
 vspace="2"
></small></a></div>
 
      <div id="java"
 onmouseover="getBookData(this);"

 onmouseout="clearData();"
><a
 href="http://www.gotop.com.tw/waweb2004/home/home.aspx?pg=HM010X&bn=ACL020931"
><small><img
 style="border: 0px solid ; width: 80px; height: 110px; float: left;"

 alt="Java 學習筆記"
 title="Java 學習筆記"

 src="images/JavaGossip_Cover_Small.jpg"
 hspace="10"

 vspace="2"
></small></a></div>
 
    <br/><br/><br/><br/><br/><br/>
 
    <div id="info"
></div>
 
</body>
</html>


重點在於onmouseover跟onmouseout,滑鼠移入與移出時會呼叫的函式,還有最下面的info,抓回來的書籍介紹會放到當中…

book.js如下,簡單的很…
1
2
3
4
5
6
7
8
9
10
11

function getBookData(ele) {

  Book.getDescription(ele.id, setBookData);
}

 
function setBookData(description) {

  DWRUtil.setValue('info'
, description);
}

 
function clearData() {

  DWRUtil.setValue('info'
, ''
);
}
 


程式很簡單,我懶得解釋了…XD

看一下畫面好了…這是滑鼠移到 Ajax in action中文版 上的介紹畫面…


引:http://blog.csdn.net/caterpillar_here/archive/2006/09/06/1186566.aspx

分享到:
评论

相关推荐

    DWR入门与应用

    ### DWR入门与应用 #### 一、DWR简介及安装配置 DWR(Direct Web Remoting)是一种简化Ajax开发的框架,它使得Java开发者能够更轻松地将服务器端的Java对象暴露给客户端的JavaScript代码进行调用。通过DWR,开发者...

    DWR入门例子(一个很好的dwr入门例子)

    在这个"DWR入门例子"中,我们将深入探讨如何使用DWR进行服务器和客户端之间的数据交换。 1. **DWR基本概念** - **反向AJAX**: DWR的核心理念是反向AJAX,即由服务器主动向客户端推送数据,而不仅仅是响应客户端的...

    DWR+dwr入门手册

    通过深入学习"DWR+dwr入门手册",你将掌握如何使用DWR构建高效的Ajax应用,提升Web应用的用户体验。记得实践中不断探索,理解DWR的原理并熟练运用到实际项目中,这将对你的IT职业生涯大有裨益。

    dwr API dwr入门教程

    在DWR入门教程中,首先会介绍DWR的基本概念和工作原理。DWR的核心是将Java方法暴露给JavaScript,通过在服务器端创建一个称为"逆向Ajax"的通道,使得JavaScript能够调用远程服务器上的Java方法。这个过程涉及到几个...

    dwr入门 dwr学习资料

    DWR(Direct Web Remoting)是一...通过学习这套DWR入门资料,你将能够熟练地使用DWR创建动态、交互性强的Web应用,提高开发效率,同时提升用户体验。实践中不断探索,理论与实战相结合,将助你在Web开发领域更进一步。

    DWR中文文档 dwr入门 dwr.jar

    **DWR入门步骤:** 1. **引入依赖**:首先,你需要在项目中添加dwr.jar到类路径中,这将包含所有DWR运行所需的类和库。 2. **配置DWR**:在Web应用的Web-INF目录下创建dwr.xml配置文件,设置允许的远程接口和方法...

    dwr入门例子 返回list

    Direct Web Remoting (DWR) 是一个开源的Java库,它允许JavaScript在浏览器端与服务器端的Java对象进行交互,实现动态的Web应用程序。DWR的主要功能是提供一种简单的方法来实现在客户端和服务器之间的异步通信,类似...

    Dwr入门操作手册及dwr包

    **DWR(Direct Web Remoting)入门操作手册及DWR包** DWR,全称Direct Web Remoting,是一个...通过深入学习"Dwr入门操作手册"并实践使用"dwr.jar",你可以掌握如何利用DWR构建交互性更强、用户体验更好的Web应用。

    STRUT2 DWR 入门STRUT2 DWR 入门STRUT2 DWR 入门STRUT2 DWR 入门

    总结来说,STRUT2 DWR入门涉及到的主要内容包括理解DWR的核心概念,了解STRUT2与DWR的集成方式,掌握DWR的配置和使用步骤,关注安全性与性能优化,以及在实际项目中的应用。通过学习和实践,开发者能够利用这两者的...

    dwr入门学习第一课范例

    在这个“dwr入门学习第一课范例”中,我们将探讨如何使用DWR来实现以下几个关键功能: 1. **用户名检测**:在用户注册页面,实时检查输入的用户名是否已存在。这通常通过Ajax技术实现,DWR可以简化这一过程。服务器...

    DWR入门详解例子与说明,入门教程

    DWR(Direct Web Remoting)是一种Java库,它允许JavaScript在客户端与服务器端进行直接的交互,无需页面刷新。这个入门教程将引导你了解DWR的基本概念、安装配置以及实际应用。 1. **DWR的基本概念** DWR的核心...

    AJAX技术之DWR框架入门

    **AJAX技术之DWR框架入门** AJAX(Asynchronous JavaScript and XML)是一种在无需刷新整个页面的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使得网页实现异步更新。这种技术可以提升...

    dwr实例 - dwr入门 本人开发的:小游戏 大家一起来赚钱

    DWR入门涉及以下几个关键知识点: 1. **配置DWR**:首先,你需要在项目中集成DWR,这通常包括在`web.xml`中配置DWR的Servlet,以及在项目的类路径下创建`dwr.xml`配置文件,用于声明暴露给JavaScript的Java类和方法...

    DWR入门demo

    10. **实例分析**:在"DWR入门demo"中,你可能会看到一个简单的例子,如创建一个计数器服务,客户端通过JavaScript调用服务器的增减方法,实时更新页面上的计数值。 通过深入学习和实践这个"DWR入门demo",你将能够...

    Dwr入门操作手册

    本文档旨在提供一份全面的DWR入门操作手册,帮助开发者快速掌握DWR的配置与使用技巧。 ### 配置DWR的步骤: 1. **导入DWR库**:将DWR的jar文件放入Web应用的`WEB-INF/lib`目录中,这是启动DWR功能的第一步。 2. *...

    DWR入门程序(1.0和3.0版本的测试工程)

    在"DWR入门程序--计算两个数之和及包含页面的例子(使用1.0版本).rar"中,我们可以看到一个简单的例子,展示了如何使用DWR 1.0进行数据交互。这个例子可能包括一个HTML页面,该页面包含一个JavaScript函数,该函数...

    DWR入门教程及实例(含源代码)

    本教程“DWR入门教程及实例(含源代码)”旨在帮助初学者快速掌握DWR的基本概念和使用方法。教程内容可能包括以下几个核心知识点: 1. **DWR概述**:讲解DWR的基本理念,如何通过HTTP协议实现JavaScript与Java之间...

    软件工程DWR入门教程.docx

    DWR(Direct Web Remoting)是一种基于 Java 的远程方法调用技术,它允许在 Web 应用程序中将 Java 对象作为远程服务暴露给客户端,客户端可以通过 Ajax 调用这些服务。下面是 DWR 入门教程的知识点总结: 一、DWR ...

Global site tag (gtag.js) - Google Analytics