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>
  <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:

<?xml version=“1.0″ encoding=“UTF-8″ ?>
<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/interface/dwrFacade.js’></script>
<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ę:

function refreshData( elementId, param ) {
  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 :D

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. :D

  • Digg
  • del.icio.us
  • Google
  • description
  • Technorati
  • Wykop
March 22, 2008 | |

COMMENTS

 

Trackback URI | Comments RSS

Leave a Reply