dwr學習筆記2之反轉ajax

啊~~好久沒有做總結了,最近看了很多亂七八糟的東西,腦子變的有點亂了,是時候停一停,總結一下東西了。


以下是對官方教程的reverse ajax的一點小總結。

[size=large]1.感想[/size]
反轉ajax中,信息的流動形式不再是有頁面發送request,服務器接收request並做出response,最後由頁面接收response這一老套模式,而且又服務器主動向頁面推送消息,然後頁面接收,不必再由頁面以polling的方式不斷向服務器發送請求了。
(看到這裏你想用這個做什麼呢?我是做的web聊天,大多數人好像也都是做的這個練習)


[size=large]2.關鍵代碼[/size]

String page = ServerContextFactory.get().getContextPath() + "[發送的頁面]";
Browser.withPage(page,new Runnable(){
public void run() {}
});

此方法可將信息發回給所有訪問page這個頁面的遊覽器,至於run()中的方法,按需不同。
[size=large]2.關鍵代碼[/size]

final String page = ServerContextFactory.get().getContextPath() + "[發送的頁面]";
ScriptSessionFilter attributeFilter = new AttributeScriptSessionFilter(SCRIPT_SESSION_ATTR);
Browser.withPageFiltered(page, attributeFilter, new Runnable(){public void run() {}
});

這個是官網上給出的方法,通過ScriptSessionFilter 的篩選可以將信息推送給指定頁面,我一開始想用這種方法來實現聊天,但是在run()中用錯了推送方法,後來想想其實是可以實現的,在此之前我換了另一種方法,後面會提到。AttributeScriptSessionFilter的實現方法,dwr官網上有,這裏就不多說了。

Browser.withSession(session.getId(), new Runnable(){
public void run() {
Collection<ScriptSession> coll = TaskDispatcherFactory.get().getTargetSessions();
for(ScriptSession s : coll){
s.addScript(new ScriptBuffer().appendScript("receiveMsg(").appendData(message).appendScript(")"));
}
}
});

這裏是根據ScriptSession的不同推送給指定的頁面,也是我百度到的多數人用的方法,之前我用filter會失敗,我想是用爲頁面推送是我用的是
ScriptSessions.addFunctionCall("[javascript方法]", "[參數]");

這樣就完全沒有了filter的作用,還是將data推送給了所有頁面
(reverse ajax的具體實現方法這裏就不在贅述了,網上寫的好的日誌到處都是)

[size=large]3.ScriptSession的一點理解。[/size]ScriptSession和HttpSession彼此許多區別,其中最主要的是生命週期。
Scriptsession是與request綁定在一起的,即便是將頁面刷新,也會產生一個新的Scriptsession對象,所以對與scriptSession在程序設計時要適當的進行科學的管理
這個人解釋的挺好的,貼出他的鏈接:
[url]http://blog.csdn.net/zhijie435/archive/2008/10/24/3135712.aspx[/url]

[size=large]4.ThreadFactory[/size]
官方給的教程並不會很全面,如果我們瞭解的不多,可能就會遇到一點麻煩。
關於這個ThreadFactory接口,教程直接就用了它的實現類,讓我這個菜鳥頓時傻了眼,折騰了一點時間才折騰出來,這裏貼出實現方法。
public class DaemonThreadFactory implements ThreadFactory {

private static final DaemonThreadFactory daemonThreadFactory =new DaemonThreadFactory();



public static DaemonThreadFactory getInstance(){
return daemonThreadFactory;
}
public Thread newThread(Runnable r) {
Thread t = new Thread(r);
t.setDaemon(true);
return t;
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章