該程序的完整代碼下載地址:http://download.csdn.net/detail/yanglun1/8779629
首先來說明一些什麼是DWR,它能用來做什麼?
DWR(Direct Web Remoting)是一個用於改善Web頁面與Java類交互的遠程服務器端Ajax開源框架,可以幫助開發人員開發包含Ajax技術的網站。它可以允許在瀏覽器裏的代碼調用運行在Web服務器上的java方法,就像它就在瀏覽器裏一眼。它包含兩個主要部分:一部分允許JavaScript從Web服務器上一個遵循了Ajax原則的Servlet或Action中獲取數據;另一部分是一個JavaScript庫可以幫助網站開發人員 輕鬆地利用獲取的數據來動態改變網頁的內容。
比較一下jQuery和DWR:首先要說的就是jQuery是一個.js文件,DWR則是一個.jar文件;再有就是它們的主要功能肯定是不相同的,jQuery的特點是前端功能強大、靈活,對頁面中的DOM控制自如,但在MVC或是JSP+JAVABEAN+SERVLET模式中,前端頁面的JavaScript如果要讀取後臺Java類中的方法或屬性,此時jQuery就顯得有點蒼白無力。不過還好,DWR可以幫助我們解決這一問題。將jQuery和DWR配合起來實現struts的Ajax是不是會很完美,的確是這樣的。因爲DWR有強大的Java類屬性讀取功能,而jQuery有靈活、強大的前臺DOM操作功能,也就是DWR負責實現在JavaScript中調用遠程java方法,而獲取的數據則交給jQuery顯示出來。
下面就針對DWR框架來做我們第一個小程序。
首先我們需要的是兩個.jar包,一個是commons-logging-1.0.4.jar,該包是日誌控制文件,如果沒有該jar包,控制檯會報告日誌控制方面的錯誤,一個則是我們的核心jar包dwr.jar。
還是像以往項目博客一樣,先看整體目錄結構:
其中要解釋一點,其中的ajaxserver.jsp和index2.jsp是我之前寫的東西,在此不涉及,我也不想在項目中刪除,還請忽略。
再接下來要做的就是配置DWR框架,就像web.xml文件一樣,我們需要在WEB-INF下創建dwr.xml配置文件。dwr.xml的配置信息如下:
<dwr>
<allow>
<!-- javascript指定在Javascript代碼中訪問對象時使用的名稱 -->
<create creator="new" javascript="Hello">
<param name="class" value="com.dwr.HelloWorldAction"></param>
</create>
</allow>
</dwr>
下面是配置文件中常用的一些標籤及解釋:
<dwr>標籤用來包含DWR所有的配置信息,處於最頂層。在其下還有以下標籤:<allow>標籤中可以暴露給JavaScript訪問的東西
<create>指定JavaScript中可以訪問的java類,並定義DWR應當如何獲得要進行遠程的類的實例。creator="new"屬性指定Java類實例的生成方式,new意味着DWR應當調用類的默認構造函數來獲得實例。JavaScript="testClass"屬性指定JavaScript代碼訪問對象時使用的名字。
<param>指定要公開給JavaScript訪問的東西
<include>指定要公開給JavaScript的方法。不指定的話就是公開所有方法。
<exclude>與<include>標籤相對,該標籤指定被禁止訪問的方法。
<convertor>負責這些方法的參數和返回類型。
<convertor>下還有兩個重要的屬性,分別是converter和match,其作用是時converter="bean"屬性指定轉換的方式採用JavaBean命名規範,match="com.dwr.TestBean"屬性指定要轉換的JavaBean的名稱。
然後我們再看web.xml中的配置:
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
<filter>
<filter-name>strutsDemo01</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>strutsDemo01</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
最後我們在看一下顯示界面index.jsp中的代碼:
在此還需要解釋一點就是,就像你們看到的,我用了兩種方式去顯示我的界面。第一種是使用了DWR的方式去設置頁面的屬性,value等,第二種方式則是用jQuery的方式,我比較推薦使用這一種,畢竟在頁面展現方面jQuery更強大一些。但是不管你頁面是怎麼展示出來的,其中獲取數據都是通過DWR來獲取的,這是毋庸置疑的。此處的Hello對應的是你在dwr.xml配置文件中配置的名字,而sayHello則是我們java文件中的一個方法。
到此這個小程序就結束了,實現的功能也很簡單,就是在一個文本框裏輸入一些數字,然後單擊按鈕,在當前頁面顯示出你輸入的文字。對於大神來說的確有點簡單了,但對於初學者來說還是可以作爲入門基礎來看的。