DWR ist ein Framework, das Java-Methoden direkt in Javascript aufrufen kann, ohne dass viel Javascript-Code geschrieben werden muss. Die Implementierung basiert auf Ajax und kann keinen Aktualisierungseffekt erzielen.
Es gibt viele Beispiele für DWR im Internet, aber die meisten davon sind nur Aufrufe einer bestimmten Methode. Dieser Artikel stellt DWR nur auf der Nutzungsebene vor und beinhaltet nicht mehr Technologie und Design. Sein Zweck besteht darin, Anfängern dies zu ermöglichen Erfahren Sie schnell, wie verschiedene Java-Methoden in Javascript aufgerufen werden.
1. DWR-Konfiguration web.xml
1. Mindestkonfiguration
<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. Wenn wir die von DWR automatisch generierte Testseite sehen möchten (im Debug-/Testmodus), können wir
in der Servlet-Konfiguration hinzufügen<init-param> <param-name>debug</param-name> <param-value>true</param-value> </init-param>
Dieser Parameter DWR ist standardmäßig auf „false“ eingestellt. Wenn Sie „true“ auswählen, können wir jede DWR-Klasse sehen, die Sie über http://localhost:port/app/dwr bereitgestellt haben. Und Sie können testen, ob jede Methode des Java-Codes normal ausgeführt wird. Aus Sicherheitsgründen müssen Sie diesen Parameter in einer formalen Umgebung auf false setzen.
3. Konfiguration mehrerer dwr.xml-Dateien
Es kann mehrere Situationen geben. Lassen Sie uns sie einzeln auflisten. Ein Servlet, mehrere dwr.xml-Konfigurationsdateien; mehrere Servlets, jedes Servlet entspricht einer oder mehreren dwr.xml-Konfigurationsdateien.
3.1. Ein Servlet, mehrere dwr.xml-Konfigurationsdateien
<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>
In dieser Konfiguration muss der Wert von param-name mit config beginnen. param-name kann >= 0 haben. Wenn kein Parametername vorhanden ist, wird WEB-INF/dwr.xml gelesen. Wenn mehr als null Parameternamen vorhanden sind, wird die Datei WEB-INF/dwr.xml nicht gelesen.
3.2. Mehrere Servlets, jedes Servlet entspricht einer oder mehreren 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>
In diesem Fall können wir Berechtigungen basierend auf der J2EE-Sicherheit steuern und verschiedene Rollen für verschiedene URLs hinzufügen.
2. Dwr-Nutzung
1. Rufen Sie eine JAVA-Methode ohne Rückgabewert und Parameter auf
1.1. Konfiguration von dwr.xml
<dwr> <allow> <create creator="new" javascript="testClass" > <param name="class" value="com.dwr.TestClass" /> <include method="testMethod1"/> </create> </allow> </dwr>
-Tag enthält Dinge, die für JavaScript verfügbar gemacht werden können.
Das Tag gibt die Java-Klasse an, auf die in Javascript zugegriffen werden kann, und definiert, wie DWR die Instanz der zu entfernenden Klasse erhalten soll. Das Attribut „creator="new" gibt die Generierungsmethode der Java-Klasseninstanz an. „Neu“ bedeutet, dass DWR den Standardkonstruktor der Klasse aufrufen soll, um die Instanz abzurufen. Andere umfassen die Spring-Methode, die die Instanz durch Integration mit dem IOC-Container erhält Frühling usw. Das Attribut javascript="testClass" gibt den Namen an, den Javascript-Code für den Zugriff auf das Objekt verwendet.
Das Tag gibt den Java-Klassennamen an, der für Javascript verfügbar gemacht werden soll.
Das-Tag gibt die Methode an, die für JavaScript verfügbar gemacht werden soll. Wenn nicht angegeben, werden alle Methoden verfügbar gemacht.
Das Tag gibt die Methode an, deren Zugriff verhindert werden soll.
1.2. Aufruf von
in JavascriptStellen Sie zunächst das Javascript-Skript vor
<script src='dwr/interface/ testClass.js'></script> <script src='dwr/engine.js'></script> <script src='dwr/util.js'></script>
Unter diesen wird TestClass.js automatisch von Dwr basierend auf der Konfigurationsdatei generiert, und engine.js und util.js sind die Skriptdateien, die mit Dwr geliefert werden.
Zweitens schreiben Sie eine Javascript-Funktion, die die Java-Methode aufruft
Function callTestMethod1(){ testClass.testMethod1(); }
2. Rufen Sie Java-Methoden mit einfachen Rückgabewerten auf
2.1. Konfiguration von dwr.xml
Die Konfiguration ist die gleiche wie 1.1
<dwr> <allow> <create creator="new" javascript="testClass" > <param name="class" value="com.dwr.TestClass" /> <include method="testMethod2"/> </create> </allow> </dwr>
2.2. Aufruf von
in JavascriptStellen Sie zunächst das Javascript-Skript vor
Zweitens schreiben Sie die Javascript-Funktion, die die Java-Methode aufruft, und die Rückruffunktion, die den Rückgabewert empfängt
Function callTestMethod2(){ testClass.testMethod2(callBackFortestMethod2); } Function callBackFortestMethod2(data){ //其中date接收方法的返回值 //可以在这里对返回值进行处理和显示等等 alert("the return value is " + data); }
Wobei callBackFortestMethod2 die Rückruffunktion ist, die den Rückgabewert empfängt
3. Rufen Sie eine Java-Methode mit einfachen Parametern auf
3.1. Konfiguration von dwr.xml
Konfiguration ist die gleiche wie 1.1
<dwr> <allow> <create creator="new" javascript="testClass" > <param name="class" value="com.dwr.TestClass" /> <include method="testMethod3"/> </create> </allow> </dwr>
3.2. Aufruf von
in JavascriptStellen Sie zunächst das Javascript-Skript vor
Zweitens schreiben Sie eine Javascript-Funktion, die die Java-Methode aufruft
Function callTestMethod3(){ //定义要传到java方法中的参数 var data; //构造参数 data = “test String”; testClass.testMethod3(data); }
4. Rufen Sie die Java-Methode auf, die JavaBean zurückgibt
4.1. Konfiguration von 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中。