亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1601 | 回復(fù): 0
打印 上一主題 下一主題

DWR學(xué)習(xí) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2007-07-12 19:21 |只看該作者 |倒序瀏覽

http://getahead.ltd.uk/dwr/
(轉(zhuǎn)載)這段時間較閑,研究了一番dwr.發(fā)現(xiàn)dwr實現(xiàn)的AJAX有些地方確實很是先進.比如動態(tài)生成javascript代碼;隱藏的http協(xié)議;javascript于java代碼交互的是javascript對象(或字符串)等.
以下是我臨時譯的一些東西.本來想全譯,發(fā)現(xiàn)dwr實在是簡單,就隨便寫了.英文居差,現(xiàn)一把.
1、DWR: Easy AJAX for JAVA
作為一個java open source library,DWR可以幫助開發(fā)人員完成應(yīng)用AJAX技術(shù)的web程序。它可以讓瀏覽器上的javascript方法調(diào)用運行在web服務(wù)器上java方法。
DWR主要由兩部門組成。javascript與web服務(wù)器通信并更新web頁;運行在web服務(wù)器的Servlet處理請求并把響應(yīng)發(fā)回瀏覽器。
DWR采用新穎的方法實現(xiàn)了AJAX(本來也沒有確切的定義),在java代碼基礎(chǔ)上動態(tài)的生成javascript代碼。web開發(fā)者可以直接調(diào)用這些javascript代碼,然而真正的代碼是運行在web服務(wù)器上的java code。出與安全考慮,開發(fā)者必須配置哪些java class暴露給DWR.(dwr.xml)
這種從(java到j(luò)avascript)調(diào)用機制給用戶一種感覺,好象常規(guī)的RPC機制,或RMI or SOAP.但是它運行在web上,不需要任何瀏覽器插件。
DWR不認(rèn)為瀏覽器和web服務(wù)器之間協(xié)議重要,把系統(tǒng)界面放在首位。最大挑戰(zhàn)是java method call的同步特征與ajax異步特性之間的矛盾。在異步模型里,結(jié)果只有在方法結(jié)束后才有效。DWR解決了這個問題,把回調(diào)函數(shù)當(dāng)成參數(shù)傳給方法,處理完成后,自動調(diào)用回調(diào)方法。
這個圖表顯示了,通過javascript事件,DWR能改變select的內(nèi)容,當(dāng)然這些內(nèi)容由java代碼返回。 javascript函數(shù)Data.getOptions(populateList)由DWR動態(tài)生成,這個函數(shù)會調(diào)用java class Data類的方法。DWR處理如何遠(yuǎn)程調(diào)用,包括轉(zhuǎn)換所有的參數(shù)和返回的結(jié)果(javascript\java)。java方法執(zhí)行完后,執(zhí)行回調(diào)方法populateList。在整個過程中我們就想在用本地的方法一樣。
2、Getting Started
廢話少說,試試就ok了。
web.xml



dwr-invoker
uk.ltd.getahead.dwr.DWRServlet


dwr-invoker
/dwr/*

dwr.xml 與web.xml同目錄








index.html


DWR - Test Home



function init(){
JDate.getYear(load);
}
function load(data){
alert(data+1900+'年')
}




dwr.jar 下載放lib下
完了,什么,夠了,就這些。訪問ok!
3、Examples
http://www.aboutmyhealth.org/ 這不是Google Suggest嗎!ok.
4、源碼淺析
dwr的設(shè)計很象webwork2的設(shè)計,隱藏http協(xié)議,擴展性,兼容性及強。
通過研究uk.ltd.getahead.dwr.DWRServlet這個servlet來研究下dwr到底是如何工作滴。
代碼
web.xml配置   
servlet>   
    servlet-name>dwr-invokerservlet-name>   
    servlet-class>uk.ltd.getahead.dwr.DWRServletservlet-class>   
  servlet>   
  servlet-mapping>   
    servlet-name>dwr-invokerservlet-name>   
    url-pattern>/dwr/*url-pattern>   
servlet-mapping>  
這樣所有的/dwr/*所有請求都由這個servlet來處理,它到底處理了些什么能。我們還以上面最簡單的例子來看。
1、 web服務(wù)器啟動,DWRServlet init()方法調(diào)用,init主要做了以下工作。
設(shè)置日志級別、實例化DWR用到的單例類(這些類在jvm中只有一個實例對象)、讀去配置文件(包括dwr.jar包中的dwr.xml,WEB-INF/dwr.xml. config*.xml)。
2、請求處理
DWRServlet.doGet, doPost方法都調(diào)用processor.handle(req, resp)方法處理。Processor對象在init()方法中已經(jīng)初始化了。
代碼
public void handle(HttpServletRequest req, HttpServletResponse resp)   
        throws IOException   
    {   
        String pathinfo = req.getPathInfo();   
        if(pathinfo == null || pathinfo.length() == 0 || pathinfo.equals("/"))   
        {   
            resp.sendRedirect(req.getContextPath() + req.getServletPath() + '/' + "index.html");   
        } else   
        if(pathinfo != null && pathinfo.equalsIgnoreCase("/index.html"))   
        {   
            doIndex(req, resp);   
        } else   
        if(pathinfo != null && pathinfo.startsWith("/test/"))   
        {   
            doTest(req, resp);   
        } else   
        if(pathinfo != null && pathinfo.equalsIgnoreCase("/engine.js"))   
        {   
            doFile(resp, "engine.js", "text/javascript");   
        } else   
        if(pathinfo != null && pathinfo.equalsIgnoreCase("/util.js"))   
        {   
            doFile(resp, "util.js", "text/javascript");   
        } else   
        if(pathinfo != null && pathinfo.equalsIgnoreCase("/deprecated.js"))   
        {   
            doFile(resp, "deprecated.js", "text/javascript");   
        } else   
        if(pathinfo != null && pathinfo.startsWith("/interface/"))   
        {   
            doInterface(req, resp);   
        } else   
        if(pathinfo != null && pathinfo.startsWith("/exec"))   
        {   
            doExec(req, resp);   
        } else   
        {   
            log.warn("Page not found. In debug/test mode try viewing /[WEB-APP]/dwr/");   
            resp.sendError(404);   
        }   
    }  
哦。這些恍然大悟。dwr/*處理的請求也就這幾種。
(1)dwr/index.html,dwr/test/這種只能在debug模式下使用,調(diào)試用。
dwr/engine.js,dwr/util.js,dwr/deprecated.js當(dāng)這個請求到達(dá),從dwr.jar包中讀取文件流,響應(yīng)回去。(重復(fù)請求有緩存)
(2)當(dāng)dwr/interface/這種請求到來,(例如我們在index.html中的 )DWR做一件偉大的事。把我們在WEB-INF/dwr.xml中的



java.util.Date轉(zhuǎn)化為javascript函數(shù)。
http://localhost:port/simpledwr/dwr/interface/JDate.js看看吧。
細(xì)節(jié)也比較簡單,通過java反射,把方法都寫成javascript特定的方法。(我覺得這些轉(zhuǎn)換可以放到緩存里,下次調(diào)用沒必要再生成一遍,不知道作者為什么沒這樣做)。
(3)dwr/exec
javascript調(diào)用方法時發(fā)送這種請求,可能是XMLHttpRequest或IFrame發(fā)送。
當(dāng)然,javascript調(diào)用的方法簽名與java代碼一致,包括參數(shù),還有javascript的回調(diào)方法也傳到了服務(wù)器端,在服務(wù)器端很容易實現(xiàn);卣{(diào)方法的java的執(zhí)行結(jié)果 返回類似 callMethod(結(jié)果)的javascript字符串,在瀏覽器執(zhí)行。哈,一切就這么簡單,巧妙。
dwr的設(shè)計構(gòu)思很是巧妙。
第一、把java類轉(zhuǎn)化為javascript類由dwr自動完成,只需簡單的配置。
第二、應(yīng)用起來極其簡單。開發(fā)者不要該服務(wù)器代碼就可以集成。
第三、容易測試。和webwork一樣,隱藏的http協(xié)議。
第四、及強擴展性。例如與spring集成,只需修改一點代碼。
第五、性能。就我與jason,等簡單比較,dwr性能可能是最好的。
第六、自動把java對象轉(zhuǎn)化為javascript對象,并且及易擴展。[/code]


本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u/10945/showart_338749.html
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP