<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Coding JavaScript like(in) Java! --DWR

    DWR 是一個開源的工具,她利用 Java 的反射和 AJAX 技術實現了 javascript java 類的通信。官方網站是: http://getahead.ltd.uk/dwr/

    下面看一個實際的例子:
    chat.gif?

    這個例子是根據 DWR demo 改寫的,是一個簡化的聊天室,下面輸入信息在上面顯示出來,這是 AJAX 技術的典型應用。

    對于這個應用編寫過程如下:

    1、? 編寫三個 JAVA 類: Message.java 、 MessageDao.java 、 ChatManager.java ;

    2、? 配置 DWR dwr.xml 、 web.xml ;

    3、? 編寫一個 html 的頁面: index.html ;

    4、? index.html 上添加與 DWR 相關的 js 腳本;

    Message.java

    package test.dwr;

    ?

    public class Message {

    ??? private String text;

    ?

    ??? private String from;

    ?

    ??? /**

    ???? * 空構造方法很重要

    ???? *

    ???? * 1 、 java 編譯器默認如果已經有了帶參構造函數,就不會再生成無參構造函數;

    ???? *

    ???? * 2 、 DWR 大量使用 Class.forName("clazz").newInstance() ,如果沒有空構造方法將會拋錯;

    ???? *

    ???? */

    ??? public Message() {

    ??? }

    ?

    ??? public Message(String text, String from) {

    ??????? this.text = text;

    ??????? this.from = from;

    ??? }

    ?

    ??? public String getFrom() {

    ??????? return from;

    ??? }

    ?

    ??? public void setFrom(String from) {

    ??????? this.from = from;

    ??? }

    ?

    ??? public String getText() {

    ??????? return text;

    ??? }

    ?

    ??? public void setText(String text) {

    ??????? this.text = text;

    ??? }

    }

    MessageDao.java

    package test.dwr;

    ?

    public class MessageDao {

    ??? public Message save(Message message) {

    ??????? System.out.println("========Lucky DWR Begin=======");

    ??????? System.out.println("text:" + message.getText());

    ??????? System.out.println("from:" + message.getFrom());

    ??????? System.out.println("=========Lucky DWR End========");

    ?

    ??????? return message;

    ??? }

    ?

    ??? public Message get() {

    ??????? return new Message("This is the first dwr demo!", "test");

    ??? }

    }

    ChatManager.java

    package test.dwr;

    ?

    public class ChatManager {

    ??? MessageDao messageDao = new MessageDao();

    ?

    ??? public Message add(Message message) {

    ??????? return messageDao.save(message);

    ??? }

    ?

    ??? public Message read() {

    ??????? return messageDao.get();

    ??? }

    }

    至此,大家可能看到這與我們一貫的寫法沒有什么差異。

    dwr.xml

    <?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="ChatManager">

    ????? <param name="class" value="test.dwr.ChatManager"/>

    ??? </create>

    ??? <convert converter="bean" match="test.dwr.Message"/>

    ? </allow>

    </dwr>

    dwr.xml 的具體解釋大家可以參見官方網站,這里是常用的, create 節點的意思是將 ChatManager 轉變成 ChatManager.js , convert 節點的意思是使用 bean 轉換器。 bean 轉換器的定義在 dwr.jar 包中的 dwr.xml 中,這個配置文件會被預先裝載。

    web.xml

    <?xml version="1.0" encoding="ISO-8859-1"?>

    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

    ?

    <web-app id="chat-demo">

    ? <display-name>Chat-Demo</display-name>

    ? <servlet>

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

    ??? <display-name>DWR Servlet</display-name>

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

    ? </servlet>

    ? <servlet-mapping>

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

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

    ? </servlet-mapping>

    </web-app>

    DWRServlet DWR 聯系客戶端和服務器端程序的聯系紐帶,它首先將你定義的 dwr.xml 中的類轉變成 js ,當客戶端調用 js 中的方法后,又由他來調用具體的實現類的方法,返回給客戶端結果。

    index.html

    <html>

    <head>

    ? <title>Chat-Demo</title>

    ?

    ? <!--Dwr 自帶的 js-->

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

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

    ? <!-- 你在 dwr.xml 中配置的調用類的 js-->

    ? <script type='text/javascript' src='dwr/interface/ChatManager.js'></script> ?

    ?

    ? <script type='text/javascript'>

    ??? function sendMessage()

    ??? {

    ??? ????????????? var message = {};

    ????? ???

    ????? ??? message.text = document.all.text.value;

    ????? ??? message.from = document.all.from.value;

    ????? ???

    ??????? ChatManager.add(message, gotMessage);

    ??? }

    ???

    ??? function checkMessage()

    ???

    ??? {??? ????

    ??????? ChatManager.read(gotMessage);

    ??? }

    ???

    ??? function gotMessage(message)??? {

    ??? ??????

    ??????? var chatlog = "";

    ???????

    ??????? chatlog = "<div>" + message.from + ":" + message.text + "</div>";???????

    ???????

    ??????? DWRUtil.setValue("chatlog", chatlog);??????

    ??? }

    ? </script>

    </head>

    <body onload="checkMessage()">

    <p>Messages:</p>

    <div id="chatlog" style="border: 1px solid black;"></div>

    <p>

    ? Your Message:

    ? <br>

    ? text:<input id="text" />

    ? <br>

    ? from:<input id="from" />

    ? <br>

    ? <input value="Send" onclick="sendMessage()" type="button" />

    </p>

    </body>

    </html>

    engine.js util.js dwr 自帶的,在 dwr.jar 包中可以找到。 ChatManager.js 是由 DWRServlet 根據 dwr.xml 中的定義自動生成的。要想查看可以在瀏覽器地址欄輸入:

    http://localhost/dwrdemo/dwr/interface/ChatManager.js 結果如下

    function ChatManager() { } ChatManager.add = function(p0, callback) { DWREngine._execute('/dwrdemo/dwr', 'ChatManager', 'add', p0, callback); } ChatManager.read = function(callback) { DWREngine._execute('/dwrdemo/dwr', 'ChatManager', 'read', callback); }

    ?

    他自動生成后會轉變成回調函數的形式,至于回調函數,大家可以注意一下:

    ChatManager.add(message, gotMessage);

    他原先在類中的方法是:

    public Message add(Message message)

    他的意思是將類的方法返回的結果對象 Message gotMessage 方法在頁面上顯示, Message 對象的 js 對象和 java 對象轉換是由 dwr bean 轉換器自動完成的。

    ?

    本例程在 tomcat-5.0.28 websphere 6.0 上測試通過,源碼下載: dwrdemo.rar

    ?

    posted on 2007-01-31 10:21 Tom 閱讀(555) 評論(0)  編輯  收藏 所屬分類: JavaScript

    <2007年1月>
    31123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    導航

    統計

    常用鏈接

    留言簿(1)

    隨筆分類(42)

    隨筆檔案(43)

    文章分類

    相冊

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 99蜜桃在线观看免费视频网站| 国产亚洲成人久久| 免费人成在线观看网站| 午夜亚洲WWW湿好爽| 78成人精品电影在线播放日韩精品电影一区亚洲 | 91福利免费网站在线观看| 亚洲精品国产suv一区88| 亚洲欧洲日本天天堂在线观看| 亚洲精品成人片在线观看精品字幕| 国产一区二区三区免费看| 免费不卡视频一卡二卡| 久久久久久久99精品免费| 丁香花在线观看免费观看图片| 国产精品无码亚洲精品2021| 国产91在线|亚洲| 亚洲熟妇色自偷自拍另类| 久久青青草原亚洲AV无码麻豆| 亚洲综合精品网站| 亚洲av再在线观看| 国产一级做a爱免费视频| 国内一级一级毛片a免费| 国产人在线成免费视频| 国产精品成人观看视频免费| 久久综合给合久久国产免费 | 亚洲最大av无码网址| 亚洲国产精品无码久久久久久曰| 国产最新凸凹视频免费| 91亚洲精品视频| 亚洲小视频在线观看| 亚洲精品视频在线| 亚洲精品免费视频| 久久精品a亚洲国产v高清不卡| 亚洲AV无码一区二区乱子伦| 国产亚洲精品自在久久| 国产亚洲3p无码一区二区| 亚洲热妇无码AV在线播放| 亚洲乱亚洲乱妇无码麻豆| 亚洲av永久无码精品漫画| 亚洲s色大片在线观看| 亚洲久本草在线中文字幕| 亚洲精品熟女国产|