Ajax com DWR + Spring Framework

O DWR permite Javascript no browser interagir com o servidor e a manipular paginas com resultados. DWR Significa: Direct Web Remoting, ele é um framework para fazer a conversação de paginas com o lado server, utilizando Ajax. Vou mostrar um exemplo de como integrar o DWR com o Spring Framework.

web.xml: Aqui é um web.xml padrão onde definimos os servlets do DWR e Spring.




<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
   <!-- Registro do Servlet do DWR -->   
   <servlet>
      <servlet-name>dwr-invoker</servlet-name>
      <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
      <init-param>
        <param-name>debug</param-name>
        <param-value>true</param-value>               
      </init-param>   
      <init-param>
          <param-name>activeReverseAjaxEnabled</param-name>
          <param-value>true</param-value>
      </init-param>
          <load-on-startup>1</load-on-startup>    
    </servlet>    
    <servlet-mapping>
      <servlet-name>dwr-invoker</servlet-name>
      <url-pattern>/dwr/*</url-pattern>
    </servlet-mapping>
   
    <!-- Configurações padroes do Spring -->   
    <context-param>
       <param-name>contextConfigLocation</param-name>
       <param-value>/WEB-INF/spring-beans.xml</param-value>
    </context-param>
    <listener>
       <listener-class>
         org.springframework.web.context.ContextLoaderListener
       </listener-class>
    </listener>
</web-app>


dwr.xml: é onde definimos os acessos permitidos pelo dwr, seria uma especie de "navegação". Aqui estamos definindo que o bean zamoriano do Spring será acessivel via Javascript pelo holder(variável) Zan.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC
    "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"
    "http://getahead.org/dwr/dwr20.dtd">
<dwr>
  <allow>   
    <create creator="spring" javascript="Zan">
      <param name="beanName" value="zamoriano" />
     </create>    
  </allow>
</dwr>


spring-beans.xml: Aqui é o clássico arquivo do Spring onde definimos o bean Zamoriano.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC
     "-//SPRING//DTD BEAN//EN"
     "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>     

     <bean 
            id="zamoriano" 
            class="org.diegopacheco.dwrtest.model.Zamoriano" 
     />
     
</beans>


Temos agora a classe Zamoriano.java(Que foi o bean que definimos no Spring)

package org.diegopacheco.dwrtest.model;

import java.util.Date;

public class Zamoriano {

     public String roubarTempo(){
          return new Date().toString();
     }
     
}


E finalmente nossa página de teste

<HTML> 
<title>DWR-Test</title>
<script src="/DWR-Test/dwr/engine.js"></script> 
<script src="/DWR-Test/dwr/util.js"></script> 
<script src="/DWR-Test/dwr/interface/Zan.js"></script> 
<script>      
    
    // FUNÇÕES QUE USAM O SPRING
     
    function callModelSpr() {
         Zan.roubarTempo(callbackSpr); 
    }    

    function callbackSpr(res) {
         var r = document.getElementById("res"); 
         r.innerHTML = "Maldito Zamoriano me robou faz: <b>" + res + "</b><br>"; 
    }        
    
</script> 

      <BODY> 
       <center>      
             <h1> :: DWR Test :: </h1>
             
           Essa pagina faz testes de DWR, clique no botao para testar.<br>
             <input id="btnClickSpr"    name="btnClickSpr"    type="button" onClick="callModelSpr();"    value="Demonios de Crom!"> 
             <br> 
          <br> 
          <div id="res" name="res"></div> 
       </center>          
      </BODY> 
      
 </HTML>


Agora que temos a aplicação completa, vou comentar algums pontos.

Na Página: É sempre obrigatório o importa da biblioteca do dwr em javascript.

<script src="/DWR-Test/dwr/engine.js"></script> 

DWR-Test: é o nome da nossa aplicação WEB.

Na seqüência temos o import de javascript que representa o bean do Spring que deninimos anteriormente .

<script src="/DWR-Test/dwr/interface/Zan.js"></script> 


É importante frisar que esse 'Zan' é o mesmo que foi definido do dwr.xml.

Dentro do dwr.xml, onde temos a entrada

<create creator="spring" javascript="Zan">
  <param name="beanName" value="zamoriano" />
</create>


Onde value="zamoriano" fiz que ele vai procurar nos beans do Spring algum bean com o id=zamoriano.

É isso, Com DWR as coisas ficam bem simples, mas eu gostaria de fizer que:
Se você optar por uma aplicação 100% Ajax estilo web 2.0 pense que:

  • Aplicações 100% Ajax requerem mais javaScript.
  • Talvez você precise ser um Expert em javascript para poder desenvolver muitos controles na mão(minha dica use tag libs)
  • Dependendo do que é feito com JavaScript a aplicação pode ganhar um grau de complexidade muito alto.
  • Cuidado com funções e objetos proprietários, é interessante que seu sistema seja indepenmdente de browser.
  • Com JavaScript no cliente as coisas ficam mais lento para ele, isso pode requerer uma maquina melhor, pode ser que ele não tenha.

    Agora vai de cada um pesar essas coisas, uma coisa é inegável com ajax os sites ficam muito mais iterativos e mais rápidos.

    Espero que esses malditos Zamorianos não me roubem, são todos uns Chakais.

  • Popular posts from this blog

    Telemetry and Microservices part2

    Installing and Running ntop 2 on Amazon Linux OS

    Fun with Apache Kafka