DWR は、簡単に言うと、多くの JavaScript コードを記述することなく、JavaScript で Java メソッドを直接呼び出すことができるフレームワークです。その実装は ajax に基づいており、更新効果は得られません。
インターネット上には DWR の例が多数ありますが、そのほとんどは特定のメソッドの呼び出しにすぎず、初心者がそれ以上の技術や設計を行うことは目的ではありません。 JavaScript でさまざまな Java メソッドがどのように呼び出されるのかをすぐに学びましょう。
1. dwr 設定 web.xml
1. 最小構成
<servlet> <servlet-name>dwr-invoker</servlet-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>
2. DWR によって自動的に生成されたテスト ページ (デバッグ/テスト モードを使用) を確認したい場合は、サーブレット設定に
を追加できます。<init-param> <param-name>debug</param-name> <param-value>true</param-value> </init-param>
このパラメータ DWR のデフォルトは false です。 true を選択すると、http://localhost:port/app/dwr を通じてデプロイした各 DWR クラスを確認できます。また、Java コードの各メソッドが正常に実行されているかどうかをテストできます。セキュリティ上の理由から、正式な環境ではこのパラメータを false に設定する必要があります。
3. 複数の dwr.xml ファイルの構成
いくつかの状況が考えられますので、一つずつ挙げてみましょう。 1 つのサーブレット、複数の dwr.xml 構成ファイル。複数のサーブレット。各サーブレットは 1 つ以上の dwr.xml 構成ファイルに対応します。
3.1. 1 つのサーブレット、複数の dwr.xml 設定ファイル
<servlet> <servlet-name>dwr-invoker</servlet-name> <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class> <init-param> <param-name>config-1</param-name> <param-value>WEB-INF/dwr1.xml</param-value> </init-param> <init-param> <param-name>config-2</param-name> <param-value>WEB-INF/dwr2.xml</param-value> </init-param> </servlet>
この設定では、param-name の値は config で始まる必要があります。 param-name には 0 以上を指定できます。 param-name がない場合は、WEB-INF/dwr.xml が読み込まれます。 param-name が 0 個より多い場合、WEB-INF/dwr.xml ファイルは読み取られません。
3.2. 複数のサーブレット、各サーブレットは 1 つ以上の dwr.xml
に対応します。<servlet> <servlet-name>dwr-invoker</servlet-name> <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class> </servlet> <servlet> <servlet-name>dwr-invoker1</servlet-name> <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class> <init-param> <param-name>config-admin</param-name> <param-value>WEB-INF/dwr1.xml</param-value> </init-param> <init-param> <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> <servlet-mapping> <servlet-name>dwr-invoker1</servlet-name> <url-pattern>/dwr1/*</url-pattern> </servlet-mapping>
この場合、J2EE セキュリティに基づいて権限を制御し、異なる URL に異なるロールを追加できます。
2. Dwr の使用法
1. 戻り値とパラメーターを指定せずに JAVA メソッドを呼び出します
1.1. dwr.xml の構成
<dwr> <allow> <create creator="new" javascript="testClass" > <param name="class" value="com.dwr.TestClass" /> <include method="testMethod1"/> </create> </allow> </dwr>
タグには、JavaScript アクセスに公開できるものが含まれています。
タグは、JavaScript でアクセスできる Java クラスを指定し、DWR がリモート対象のクラスのインスタンスを取得する方法を定義します。 Creator="new" 属性は、Java クラス インスタンスの生成メソッドを指定します。New は、DWR がインスタンスを取得するためにクラスのデフォルト コンストラクターを呼び出す必要があることを意味します。その他には、IOC コンテナと統合してインスタンスを取得する Spring メソッドが含まれます。春などjavascript=" testClass " 属性は、オブジェクトにアクセスするために JavaScript コードによって使用される名前を指定します。
タグは、JavaScript に公開する Java クラス名を指定します。
タグは、JavaScript に公開するメソッドを指定します。指定しない場合は、すべてのメソッドが公開されます。
タグはアクセスを禁止するメソッドを指定します。
1.2. JavaScript での
の呼び出しまず、JavaScript スクリプトを紹介します
<script src='dwr/interface/ testClass.js'></script> <script src='dwr/engine.js'></script> <script src='dwr/util.js'></script>
このうち、TestClass.jsは設定ファイルを元にdwrで自動生成され、engine.jsとutil.jsはdwrに付属するスクリプトファイルです。
次に、Java メソッド
を呼び出す JavaScript 関数を作成します。Function callTestMethod1(){ testClass.testMethod1(); }
2. 単純な戻り値を使用して Java メソッドを呼び出す
2.1. dwr.xml の設定
構成は1.1と同じです
<dwr> <allow> <create creator="new" javascript="testClass" > <param name="class" value="com.dwr.TestClass" /> <include method="testMethod2"/> </create> </allow> </dwr>
2.2. JavaScript での
の呼び出しまず、JavaScript スクリプトを導入します
次に、Java メソッドを呼び出す JavaScript 関数と戻り値を受け取るコールバック関数
を記述します。Function callTestMethod2(){ testClass.testMethod2(callBackFortestMethod2); } Function callBackFortestMethod2(data){ //其中date接收方法的返回值 //可以在这里对返回值进行处理和显示等等 alert("the return value is " + data); }
ここで、callBackFortestMethod2 は戻り値を受け取るコールバック関数です
3. 単純なパラメータを使用して Java メソッドを呼び出します
3.1. dwr.xml の設定
構成は 1.1 と同じです
<dwr> <allow> <create creator="new" javascript="testClass" > <param name="class" value="com.dwr.TestClass" /> <include method="testMethod3"/> </create> </allow> </dwr>
3.2. JavaScript での
の呼び出しまず、JavaScript スクリプトを導入します
次に、Java メソッド
を呼び出す JavaScript 関数を作成します。Function callTestMethod3(){ //定义要传到java方法中的参数 var data; //构造参数 data = “test String”; testClass.testMethod3(data); }
4. JavaBean
を返す Java メソッドを呼び出します。4.1. dwr.xml の設定
<dwr> <allow> <create creator="new" javascript="testClass" > <param name="class" value="com.dwr.TestClass" /> <include method="testMethod4"/> </create> <convert c match=""com.dwr.TestBean"> <param name="include" value="username,password" /> </convert> </allow> </dwr>
标签负责公开用于Web远程的类和类的方法,标签则负责这些方法的参数和返回类型。convert元素的作用是告诉DWR在服务器端Java 对象表示和序列化的JavaScript之间如何转换数据类型。DWR自动地在Java和JavaScript表示之间调整简单数据类型。这些类型包括Java原生类型和它们各自的封装类表示,还有String、Date、数组和集合类型。DWR也能把JavaBean转换成JavaScript 表示,但是出于安全性的原因,要求显式的配置,标签就是完成此功能的。c属性指定转换的方式采用JavaBean命名规范,match=""com.dwr.TestBean"属性指定要转换的javabean名称,标签指定要转换的JavaBean属性。
4.2、javascript中调用
首先,引入javascript脚本
其次,编写调用java方法的javascript函数和接收返回值的回调函数
其中callBackFortestMethod4是接收返回值的回调函数
5、调用有JavaBean参数的java方法
5.1、dwr.xml的配置
<dwr> <allow> <create creator="new" javascript="testClass" > <param name="class" value="com.dwr.TestClass" /> <include method="testMethod5"/> </create> <convert c match="com.dwr.TestBean"> <param name="include" value="username,password" /> </convert> </allow> </dwr>
5.2、javascript中调用
首先,引入javascript脚本
其次,编写调用java方法的javascript函数
Function callTestMethod5(){ //定义要传到java方法中的参数 var data; //构造参数,date实际上是一个object data = { username:"user", password:"password" } testClass.testMethod5(data); }
并且在dwr.xml中增加如下的配置段
<signatures> <![CDATA[ import java.util.List; import com.dwr.TestClass; import com.dwr.TestBean; TestClass.testMethod7(Map<String,TestBean>); ]]> </signatures>
3、由以上可以发现,对于java方法的返回值为List(Set)的情况,DWR将其转化为Object数组,传递个javascript;对于java方法的返回值为Map的情况,DWR将其转化为一个Object,其中Object的属性为原Map的key值,属性值为原Map相应的value值。
4、如果java方法的参数为List(Set)和Map的情况,javascript中也要根据3种所说,构造相应的javascript数据来传递到java中。