DWR czyli “Easy Ajax for Java”
Jeśli ktoś jeszcze jakimś cudem nie wie co to DWR (Direct Web Remoting) to ten wpis jest dla niego, ponieważ postaram się w nim szybko przedstawić co to jest i jak tego można używać
DWR to biblioteka która pozwala z poziomu JavaScript wywołać metody Java oraz vice versa.
W jaki sposób rozpocząć przygodę z DWR? Najprościej pobrać go ze strony i wykonać kilka kolejnych kroków opisanych w tym wpisie.
Krok 1 - dodanie konfiguracji DWR do web.xml.
Chcąc użyć DWR w naszej webowej aplikacji musimy ją najpierw skonfigurować. Na samym początku wprowadzimy ustawienia do naszego pliku web.xml. Dodajmy do niego ten fragment kodu:
<servlet-name>dwr</servlet-name>
<servlet-class>org.directwebremoting.spring.DwrSpringServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
W ten sposób dodaliśmy serwlet DWR do naszej aplikacji. Serwlet ten odpowiada za generowanie plików JavaScript które będą wykorzystane w stronach JSP tworzonych w projekcie.
Krok 2 - Integracja DWR i Spring Framework.
Ponieważ Spring Framework jest szeroko stosowany w projektach opartych o platformę JEE stąd też DWR w łatwy sposób się z nim integruje. Wystarczy dodać do naszego projektu plik zawierający definicję beanów:
<beans xmlns=“http://www.springframework.org/schema/beans”
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
xmlns:dwr=“http://www.directwebremoting.org/schema/spring-dwr”
xmlns:lang=“http://www.springframework.org/schema/lang”
xsi:schemaLocation=“http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.directwebremoting.org/schema/spring-dwr
http://www.directwebremoting.org/schema/spring-dwr-2.0.xsd”>
<dwr:configuration>
<dwr:convert class=“org.holewa.Sample” type=“bean”/>
</dwr:configuration>
<bean id=“dwrFacade” class=“org.holewa.DwrFacade”>
<dwr:remote javascript=“dwrFacade”>
<dwr:include method=“getData”/>
</dwr:remote>
</bean>
</beans>
W powyższym przykładzie zdefiniowaliśmy jeden bean o nazwie dwrFacade oraz udostępniliśmy dla DWR jedną jego metodę o nazwie getData, domyślnie z uwagi na względy bezpieczeństwa wszystkie metody nie są udostępnione.
Podobnie zresztą ma się sprawa z transfer object`ami - musimy dla nich ustawić konwersję czyli sprawić aby DWR mapował odpowiednie struktury danych z poziomu JavaScript na obiekty Java. W naszym przypadku transfer object Sample zawiera tylko jedną zmienną o nazwie parameter.
Krok 3 - dodanie plików JavaScript do naszych stron JSP.
Aby umożliwić wywołanie metod po stronie serwera należy dodać w stronach JSP taki oto fragment kodu:
<script type=‘text/javascript’ src=‘/dwr/engine.js’></script>
<script type=‘text/javascript’ src=‘/dwr/util.js’></script>
Pliki util.js i engine.js to pliki wchodzące w skład DWR, plik dwrFacade.js to plik który został wygenerowany przez serwlet i to właśnie dzięki funkcją które znajdują się w nim możemy wywołać metodę po stronie serwera.
Krok 4 - wywołanie metody po stronie serwera.
W celu wywołania metody po stronie serwera należy wywołać w przeglądarce następującą funkcję:
var to = {
parameter: param
};
dwrFacade.getData(to, function ( str ) {
dwr.util.byId(elementId).innerHTML = str;
});
}
Powyższy kod definiuje funkcję która jako parametry przyjmuje id elementu którego atrybutowi o nazwie innerHTML chcemy przypisać wartość zwróconą przez wywoływaną przez nas metodę getData. Metoda ta przyjmuje jeden parametr który jest obiektem zawierającym pole (atrybut) o nazwie parameter, podczas przesyłania będzie on przekształcony w obiekt Java dla którego wartości atrybutu parameter będzie równa wartości atrybutu parameter którą ustawiliśmy w JavaScript. Funkcja która zostanie wywołana gdy otrzymamy odpowiedź od serwera (pamiętajmy, że występują tu wywołania asynchroniczne dlatego też mamy do czynienia z callback`ami) jest przekazywana do funkcji dwrFacade.getGetData jako drugi parametr.
Jak widzicie zastosowanie DWR jest niezwykle proste - od jego konfiguracji do wywołania zrobiliśmy właściwie tylko cztery główne kroki
Pisząc ten wpis nie zauważyłem, że na j2ee.pl jest już pewnien opis DWR - dużo dłuższy więc go Wam gorąco polecam a siebie biję w pierś za duplikowanie tematu. ![]()










