Autor: Cloves Carneiro
Übersetzer: Simmone
Copyright-Erklärung: Bei jeder von Matrix autorisierten Website geben Sie bittebeim Nachdruck unbedingt die Originalquelle und den Autor des Artikels sowie diese Erklärung in Form eines Hyperlinks an. Autor: Cloves Carneiro;simmone
Ursprüngliche Adresse: http://www.javaworld.com/javaworld/jw-06-2005/jw-0620-dwr.html
Chinesische Adresse: http://www.matrix.org.cn/resource/article/43/43926_DWR_AJAX.html
Schlüsselwörter: DWR Javascript :void(0);">AJAX
Überblick
In diesem Artikel wird die Verwendung desOpen-Source -Projekts DWR (Direct Web Remoting) und das Konzept von Javascript :void(0);">AJAX (Asynchronous JavaScript and XML ) zur Verbesserung der Benutzerfreundlichkeit von Webanwendungen erläutert. Der Autor zeigt Schritt für Schritt Wie DWR Javascript erstellt :void(0);">AJAX-Anwendung ist einfach und schnell. (1.600 Wörter; 20. Juni 2005)
javascript :void(0);">AJAX oder Asynchronous JavaScript and XML beschreibt eineEntwicklungstechnologie , die eine Mischung aus HTML (oder XHTML) und Cascading Style Sheets verwendet, um Informationen zum Erstellen interaktiver Webanwendungen auszudrücken; Das DocumentObject Model (DOM ), JavaScript, zeigt ausgedrückte Informationen dynamisch an und interagiert mit ihnen. Außerdem tauscht das XMLHttpRequest-Objekt Daten asynchron mit dem Webserver aus.
Viele Beispiele im Internet veranschaulichen die notwendigen Schritte zur Interaktion mit dem Server mithilfe von XMLHttpRequest in einer HTML-Datei. Beim manuellen Schreiben und Verwalten von XMLHttpRequest-Code müssen sich Entwickler mit vielen potenziellen Problemen auseinandersetzen, insbesondere mit Problemen wie der browserübergreifenden DOM-Implementierungskompatibilität. Dies wird dazu führen, dass unzählige Stunden mit dem Codieren und Debuggen von Javascript-Code verbracht werden, was offensichtlich nicht entwicklerfreundlich ist.
Das DWR-Projekt (Direct Web Remoting) ist eine Open-Source-Lösung unter der Apache -Lizenz für Entwickler, die Javascript :void(0);">AJAX und XMLHttpRequest auf einfache Weise verwenden möchten. Es verfügt über eine Reihe von Javascript-Funktionen, diedas vereinfachenMethode zum Aufrufen von Java- Objekten auf dem Anwendungsserver von HTML-Seiten aus. Sie manipuliert verschiedene Arten von Parametern und behält gleichzeitig die Lesbarkeit des HTML-Codes bei.
DWR ist keine Einfügung in ein Design und erzwingt auch nicht, dass Objekte irgendeine Art von Vererbungsstruktur verwenden. Es funktioniert gut mit Anwendungen innerhalb des Servlet-Frameworks. Für Entwickler, denen es an DHTML-Programmiererfahrung mangelt, stellt DWR auch eine JavaScript-Bibliothek bereit, die häufig verwendete DHTML-Aufgaben enthält, wie z. B. das Zusammenstellen von Tabellen, das Füllen ausgewählter Dropdown-Felder mit Elementen und das Ändern des Inhalts von HTML-Elementen wie <div> und <span . >
Die DWR-Website ist ausführlich und verfügt über eine umfangreiche Dokumentation, die die Grundlage für diesen Artikel bildet. Einige Beispiele zeigen, wie DWR verwendet wird und welcheAufgaben mit seinen Bibliotheken erledigt werden können.
In diesem Artikel können Leser Schritt für Schritt sehen, wie eine Webanwendung mit DWR erstellt wird. Ich zeige Ihnen die notwendigen Details zum Erstellen dieser einfachen Beispielanwendung, die heruntergeladen werden kann und in Ihrer Umgebung bereitgestellt werden kann, um zu sehen, wie DWR funktioniert.
HINWEIS: Es ist nicht schwer, Informationen über Javascript :void(0);">AJAX zu finden; es gibt mehrere Artikel und Blogeinträge im Internet zu diesem Thema, die jeweils versuchen, einen anderen Aspekt des Konzepts hervorzuheben und zu kommentieren. Im Abschnitt „Ressourcen“ finden Sie einige interessante Links zu Beispielen und Artikeln, um mehr über Javascript :void(0);">AJAX zu erfahren.
Beispielanwendung <BR>Die in diesem Artikel verwendete Beispielanwendung simuliert eine Suchmaschine für Wohnungsmieten in Toronto. Benutzer können vor der Suche eine Reihe von Suchkriterien auswählen. Um die Interaktivität zu verbessern, wird Javascript :void(0);">AJAX in den folgenden zwei Situationen verwendet:
·Die Anwendung informiert den Benutzer darüber, wie viele Suchergebnisse basierend auf seiner Auswahl zurückgegeben werden. Diese Zahl wird in Echtzeit mithilfe von Javascript :void(0);">AJAX aktualisiert, wenn sich die Anzahl der vom Benutzer ausgewählten Schlafzimmer und Badezimmer oder die Preisspanne ändert. Wenn es keine oder zu viele Suchergebnisse gibt, die den Kriterien entsprechen , muss der Benutzer nicht auf die Suchschaltfläche klicken.
· Die Datenbankabfrage und das Abrufen der Ergebnisse erfolgt über Javascript :void(0);">AJAX. Wenn der Benutzer auf die Schaltfläche „Ergebnisse anzeigen“ klickt, führt die Datenbank die Suche durch. Auf diese Weise sieht die Anwendung und das Ganze reaktionsschneller aus Die Seite muss nicht überladen sein, um Ergebnisse anzuzeigen.
Datenbank <BR>Die von uns verwendete Datenbank ist HSQL, eine Java-SQL-Datenbank-Engine, die sehr wenig Ressourcen beansprucht und ohneInstallation und Konfiguration mit Webanwendungen gebündelt werden kann. Eine SQL-Datei wird verwendet, um eine In-Memory-Tabelle zu erstellen und einige Datensätze hinzuzufügen, wenn der Webanwendungskontext startet.
Die Java-Klasse <BR>application enthält zwei Hauptklassen namens Apartment und ApartmentDAO. Die Apartment.java-Klasse ist eine einfache Java-Klasse mit Eigenschaften und Getter/Setter-Methoden. ApartmentDAO.java ist die Datenzugriffsklasse, die zum Abfragen der Datenbank und zum Zurückgeben von Informationen basierend auf den Suchkriterien des Benutzers verwendet wird. Die Implementierung der ApartmentDAO-Klasse ist unkompliziert; sie verwendet Java-Datenbankverbindungsaufrufe direkt, um die Gesamtzahl der Wohnungen und die Liste der verfügbaren Wohnungen abzurufen, die der Anfrage des Benutzers entsprechen.
DWR-Konfiguration und -Nutzung <BR>Das Einrichten der DWR-Nutzung ist einfach: Kopieren Sie die DWR-JAR-Datei in das WEB-INF/lib-Verzeichnis der Webanwendung, fügen Sie eine Servlet-Deklaration in web.xml hinzu und erstellen Sie die DWR-Konfigurationsdatei. Für die Verteilung von DWR ist eine separate JAR-Datei erforderlich. Sie müssen das DWR-Servlet zum Abschnitt „Bereitstellungsdeskriptor“ in der WEB-INF/web.xml Ihrer Anwendung hinzufügen.
<Servlet>
<servlet-name>dwr-invoker</servlet-name>
<display-name>DWR-Servlet</display-name>
<description>Direct Web Remoter Servlet</description>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
<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>
Ein optionaler Schritt besteht darin, DWR wie im obigen Beispiel in den Debug-Modus zu versetzen, indem der Debug-Parameter im Abschnitt „Servlet-Beschreibung“ auf „true“ gesetzt wird. Wenn sich DWR im Debug-Modus befindet, können Sie alle zugänglichen Java-Objekte auf der HTML-Seite sehen. Unter der URL /WEBAPP/dwr wird eine Webseite mit einer Liste verfügbarer Objekte angezeigt, auf der die öffentlichen Methoden des Objekts angezeigt werden. Die aufgeführten Methoden können von der Seite aus aufgerufen werden, sodass Sie erstmals Methoden für Objekte auf dem Server ausführen können. Das folgende Bild zeigt, wie die Debug-Seite aussieht:
Debug-Seite
Jetzt müssen Sie DWR über das XMLHttpRequest-Objekt mitteilen, welches Objekt die Anfrage erhalten soll. Diese Aufgabe wird durch eine Konfigurationsdatei namens dwr.xml erledigt. In der Konfigurationsdatei definieren Sie die Objekte, die Sie mit DWR von der Webseite aus aufrufen können. DWR ermöglicht standardmäßig den Zugriff auf alle öffentlichen Methoden einer veröffentlichten Klasse, in unserem Fall erlauben wir jedoch nur den Zugriff auf einige wenige Methoden. Hier ist die Konfigurationsdatei für unser Beispiel:
<dwr>
<erlauben>
<convert converter="bean" match="dwr.sample.Apartment"/>
<create Creator="new" javascript="ApartmentDAO" class="dwr.sample.ApartmentDAO">
<include method="findApartments"/>
<include method="countApartments"/>
</create>
</allow>
</dwr>
Die obige Datei erreicht in unserem Beispiel beide Ziele. Erstens weist das <convert>-Tag DWR an, den Typ des dwr.sample.Apartment-Objekts in ein assoziatives Array zu konvertieren, da DWR aus Sicherheitsgründen standardmäßig keine gewöhnlichen Beans konvertiert. Zweitens ermöglicht das <create>-Tag DWR, die Klasse dwr.sample.ApartmentDAO für JavaScript-Aufrufe verfügbar zu machen. Die auf der Seite verwendeten JavaScript-Dateien werden durch das Javascript-Attribut definiert. Wir müssen auf das Tag <include> achten, das angibt, welche Methoden der Klasse dwr.sample.ApartmentDAO verfügbar sind.
Nachdem der HTML/JSP-Code <BR>konfiguriert ist, können Sie Ihre Webanwendung starten. Zu diesem Zeitpunkt ist DWR bereit, die erforderlichen Methoden von Ihrer HTML- oder Java-Serverseite (JSP) aufzurufen Sie erstellen JavaScript-Dateien. In der Datei search.jsp müssen wir die von DWR bereitgestellte JavaScript-Schnittstelle sowie die DWR-Engine hinzufügen und die folgenden drei Zeilen zu unseremCode hinzufügen:
<script src='dwr/interface/ApartmentDAO.js'></ Skript>
<script src='dwr/engine.js'></script>
<script src='dwr/util.js'></script>
Wir haben festgestellt, dass, wenn der Benutzer die Suchkriterien ändert, dies die erste Anwendung von Javascript :void(0);">AJAX im Beispielprogramm ist; wie er sieht, wird die Anzahl der verfügbaren Wohnungen aktualisiert, wenn sich die Kriterien ändern: Die Funktion ApartmentDAO.countApartments() ist der erste Parameter, die Funktion loadTotal(), die die JavaScript-Methode angibt Beim Empfang einer Antwort vom Server wird DWR aufgerufen, um die Ergebnisse im <div> der HTML-Seite anzuzeigen:
function updateTotal() {
$("resultTable").style.display = 'none';
var Schlafzimmer = document.getElementById("Schlafzimmer").value;
var Badezimmer = document.getElementById("Badezimmer").value;
var preis = document.getElementById("price").value;
ApartmentDAO.countApartments(loadTotal, Schlafzimmer, Badezimmer, Preis);
}
Funktion loadTotal(data) {
document.getElementById("totalRecords").innerHTML = data;
}
Offensichtlich möchte der Benutzer Wohnungsangebote sehen, die seinen Suchkriterien entsprechen. Wenn der Benutzer dann mit seinen Suchkriterien zufrieden ist und die Summen gültig sind, klickt er auf die Schaltfläche, die die Ergebnisse anzeigt, wodurch die JavaScript-Methode updateResults() aufgerufen wird:
Funktion updateResults() {
DWRUtil.removeAllRows("apartmentsbody");
var Schlafzimmer = document.getElementById("Schlafzimmer").value;
var Badezimmer = document.getElementById("Badezimmer").value;
var preis = document.getElementById("price").value;
ApartmentDAO.findApartments(fillTable, Schlafzimmer, Badezimmer, Preis);
$("resultTable").style.display = '';
}
Funktion fillTable(apartment) {
DWRUtil.addRows("apartmentsbody", apartment, [ getId, getAddress, getBedrooms, getBathrooms, getPrice ]);
}
Die updateResults()-Methode löscht das Tabellenfeld, in dem die von der Suche zurückgegebenen Ergebnisse gespeichert sind, ruft die erforderlichen Parameter von der Benutzeroberfläche ab und übergibt diese Parameter an das von DWR erstellte ApartmentDAO-Objekt. Dann wird die Datenbankabfrage ausgeführt und fillTable() aufgerufen, das das von DWR zurückgegebene Objekt (apartments) analysiert und auf der Seite anzeigt (apartmentsbody).
Sicherheitsfaktoren <BR>Um das Beispiel kurz zu halten, wird die ApartmentDAO-Klasse so einfach wie möglich gehalten, aber eine solche Klasse verfügt normalerweise über eine Reihe von Set-Methoden zum Bearbeiten von Daten, wie etwa insert(), update() und delete(). DWR stellt alle öffentlichen Methoden zur Verfügung, die von allen HTML-Seiten aufgerufen werden können. Aus Sicherheitsgründen ist es unklug, Ihre Datenzugriffsschicht auf diese Weise offenzulegen. Entwickler können eine Fassade erstellen, die die Kommunikation zwischen allen JavaScript-Funktionen und den zugrunde liegenden Geschäftskomponenten zentralisiert und so eine übermäßige Offenlegung von Funktionen begrenzt.
Fazit <BR>Dieser Artikel ist nur ein Anfang für die Verwendung von DWR-gestütztem Javascript :void(0);">AJAX in Ihren Projekten. Mit DWR können Sie sich auf die Verbesserung des Interaktionsmodells Ihrer Anwendung konzentrieren. , wodurch die Die Belastung durch das Schreiben und Debuggen von JavaScript-Code besteht darin, zu definieren, wo und wie die Benutzerfreundlichkeit verbessert werden kann. DWR ist für die Kommunikation zwischen der Webseite und Ihren Java-Objekten verantwortlich und hilft Ihnen so, sich ganz auf die benutzerfreundlichere Gestaltung der Benutzeroberfläche Ihrer Anwendung zu konzentrieren.
Ich möchte Mircea Oancea und Marcos Pereira danken, die diesen Artikel gelesen und sehr wertvolles Feedback gegeben haben.
Ressourcen ·javaworld.com:javaworld.com
·Matrix-Java-Entwickler-Community: http://www.matrix.org.cn/
·onjava.com:onjava.com
·Laden Sie den gesamten Quellcode des Beispielprogramms herunter: http://www.javaworld.com/javaworld/jw-06-2005/dwr/jw-0620-dwr.war
·DWR: http://www.getahead.ltd.uk/dwr/index.html
·HSQL: http://hsqldb.sourceforge.net/
·javascript :void(0);">Definition von AJAX: http://en.wikipedia.org/wiki/javascript :void(0);">AJAX
· „javascript :void(0);“>AJAX: A New Path to Web Applications“: Jesse James Garrett (Adaptive Path, 2005.2): http://www.adaptivepath.com/publications/essays/archives/000385. php
· „Eine sehr dynamische Weboberfläche“ Drew McLellan (xml.com, 2005.2): http://www.xml.com/pub/a/2005/02/09/xml-http-request.html
·XMLHttpRequest & javascript :void(0);">AJAX-Arbeitsbeispiel: http://www.fiftyfoureleven.com/resources/programming/xmlhttprequest/examples
· „Usable XMLHttpRequest Practices“ Thomas Baekdal (Baekdal.com, 2005.3): http://www.baekdal.com/articles/Usability/usable-XMLHttpRequest/
·„XMLHttpRequest-Nutzungsrichtlinien“ Thomas Baekdal (Baekdal.com, 2005.2): http://www.baekdal.com/articles/Usability/XMLHttpRequest-guidelines/