Script de maneira simples
Conheça os fundamentos do framework Direct Web Remoting e os recursos poderosos oferecidos para a criação de aplicações Ajax
Veremos nesse artigo como o framework DWR (Direct Web Remoting) suporta a criação de aplicações Ajax avançadas, permitindo invocar código Java no servidor a partir de funções JavaScript e convertendo objetos e parâmetros entre as duas tecnologias.
Visão geral
O framework DWR permite que trechos de código JavaScript na camada cliente invoquem métodos
O DWR gera código JavaScript baseado
O ponto central do DWR é o seu servlet, que é responsável pela geração do JavaScript e pelo tráfego e conversão dos dados entre o servidor e o browser. O servlet gera dinamicamente os arquivos .js que representam os objetos Java no servidor; também gera outros arquivos .js que compõem a infra
O DWR fornece ainda vários utilitários JavaScript que facilitam a realização de tarefas repetitivas e também o uso de DHTML. Entre as tarefas, podemos destacar a população de elementos, por exemplo de tabelas HTML. Como aplicações Ajax são fortemente baseadas em JavaScript, acabamos tendo que codificar muito na camada cliente, e esses utilitários reduzem bastante esta codificação.
Explorando os principais recursos do DWR
Nessa seção exploraremos alguns dos principais recursos do DWR através de um exemplo simples. Depois criaremos um exemplo mais complexo para ilustrar funcionalidades mais avançadas.
Instalando o primeiro exemplo
Os projetos de exemplo estão disponíveis para download no site da Java Magazine, sendo disponibilizados como WARs. Utilizaremos o Eclipse com WTP (Web Tools Platform) para importar esses WARs – mas você pode usar seu IDE preferido adaptando os passos mostrados no artigo. Também será necessário ter um container web instalado. Recomendamos o Apache Tomcat em sua versão 5.5 ou mais recente. Não será preciso utilizar um banco de dados para o primeiro exemplo. No segundo, utilizaremos o MySQL.
No Eclipse, importe o primeiro exemplo – dwr.war – usando File|Import>Web>WAR. Utilize o nome do projeto como o contexto da aplicação (“/dwr”) e na tela seguinte não selecione nenhum dos JARs para que sejam criados como projetos. A estrutura criada deverá ser similar à da Figura 1.
Figura 1. Estrutura do primeiro exemplo
Podem ocorrer problemas com a versão do código
Entendendo o primeiro exemplo
O primeiro passo na configuração do DWR é a declaração do seu servlet. Na Listagem 1, vemos essa declaração, mapeando o servlet para atender a todas as requisições no caminho /dwr.
Listagem 1. Configuração do web.xml para o DWR.
<?xml version="1.0" encoding="UTF
<web
<servlet>
<servlet
<servlet
org.directwebremoting.servlet.DwrServlet
</servlet
<init
<param
<param
</init
</servlet>
<servlet
<servlet
<url
</servlet
</web
Nota 1: Os “Facets” são extensões do núcleo comum do WTP que dão suporte específico a alguma especificação ou API; por exemplo Java SE 5 ou Servlets 2.5. A escolha dos Facets faz o WTP adaptar vários comportamentos, por exemplo, validando arquivos de configuração com o XSD/DTD da versão exata pedida por um release específico da API utilizada. |
Precisamos também de uma classe para disponibilizar como um objeto JavaScript. Para o exemplo, criamos a classe TimeService (Listagem 2), contendo apenas um método que retorna a data e a hora do servidor como uma string. Podemos ver que esta classe é um simples POJO – não é necessário implementar nenhuma interface ou herdar de alguma classe para que possa ser utilizada com o DWR.
Listagem 2. Classe TimeService, responsável por retornar a data e a hora do servidor.
package br.com.jm.dwr;
import java.util.Date;
public class TimeService {
public String getTime() {
return new Date().toString();
}
}
O próximo passo é criar o arquivo WEB
<dwr>
<allow>
<create creator="new" javascript="timeService">
<param name="class" value="br.com.jm.dwr.TimeService" />
</create>
...
A declaração da classe TimeService a torna disponível na camada JavaScript. E o objeto JavaScript correspondente é definido como timeService, através do atributo javascript. Declaramos ainda o mecanismo de criação do objeto, que ocorrerá através do construtor padrão (usando creator="new").
É através do atributo creator que o DWR se integra com outros frameworks e tecnologias como Spring, Struts, JSF e EJB 3. Ao usar um “creator” customizado, o DWR delega a criação dos objetos para o framework em questão.
A Listagem 3 apresenta uma página JSP capaz de invocar métodos no objeto Java (note como a chamada a timeService.getTime() é feita ao final). Repare que a página possui somente código JavaScript e HTML. ...