Posts Tagged DWR

Integrando DWR ao Spring

Neste post vamos desenvolver uma pequena aplicação passo a passo mostrando como efetuar as configurações necessárias para integrar o DWR 3.0 ao springframework 2.5.

  • Ambiente:
    • Eclipse Ganymede
    • Tomcat 6.0
    • Spring 2.5
    • DWR 3.0

Primeiramente efetuamos o download do DWR no site, efetue o download do arquivo dwr.jar.

Após o download copie o arquivo dwr.jar para o diretório WEB-INF/lib de sua aplicação(ctrc+c no arquivo, ctrc+v na pasta lib dentro do eclipse).

Agora vamos vazer o download do spring no site, efetue o download do arquivo spring-framework-2.5.6.zip.

Extraia este aquivo em alguma pasta no seu computador e depois copie os arquivos: spring.jar e spring-webmvc.jar para a pasta WEB-INF/lib do seu projeto.

Precisaremos tambem do arquivo commons-logging-xxx.jar que pode ser adiquirido aqui. Após efetuar o downlaod repita o processo acima, extraia o arquivo zip e copie o arquivo commons-logging-xxx.jar para a pasta WEB-INF/lib de sua aplicação.

Pronto! Estamos com o ambiente projeto para utilizar o DWR com o Spring!

Agora crie dois pacotes na dentro da pastar src do seu projeto br.com.diego.bean e br.com.diego.dwr.

Crie uma página jsp dentro de WebContent com o nome index.jsp.

Crite um arquivo applicationContext-DWR.xml dentro da sua pasta WEB-INF.

A estrutura do seu projeto deve ser como esta abaixo:

Estrutura do Projeto

Vamos alterar nosso arquivo web.xml, deixe seu arquivo conforme a configuração abaixo:


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>springDwr</display-name>
<!-- Mapeamento dos arquivos de configuração do spring -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext*.xml</param-value>
</context-param>
<!-- fim mapeamento arquivos spring -->
<!-- Mapemento do filtro do spring -->
<filter>
<filter-name>requestContextFilter</filter-name>
<filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>requestContextFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Fim do mapeamento do spring -->
<!-- Listerners do spring -->
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--Fim Listerners do spring -->
<!--Servlet DWR - que efetua a integração do DWR com o spring  -->
<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>
<init-param>
<param-name>crossDomainSessionSecurity</param-name>
<param-value>false</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
<!-- Fim servlet DWR -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

Agora vamos criar uma classe no nosso pacote br.com.diego.bean com o nome de UsuarioBean.java com o conteúdo abaixo:


package br.com.diego.bean;

public class UsuarioBean {

private int id;
private String nome;
private String telefone;
private String endereco;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getNome() {
return nome;
}

public void setNome(String nome) {
this.nome = nome;
}

public String getTelefone() {
return telefone;
}

public void setTelefone(String telefone) {
this.telefone = telefone;
}

public String getEndereco() {
return endereco;
}

public void setEndereco(String endereco) {
this.endereco = endereco;
}
}

Vamos criar outra classe, agora no nosso pacote br.com.diego.dwr, vamos dar o nome de UsuarioAjax.java, esta classe que terá nosso método que será invocado através do nosso javascrpit através de uma chamada AJAX do DWR. Segue abaixo o conteúdo da classe:


package br.com.diego.dwr;

import br.com.diego.bean.UsuarioBean;

public class UsuarioAjax {

private UsuarioBean usuario;

public UsuarioBean getUsuario() {
return usuario;
}

public void setUsuario(final UsuarioBean usuario) {
this.usuario = usuario;
}

//Método que será invocado pela nossa chamada DWR
public UsuarioBean find(String nome){

getUsuario().setId(1);
getUsuario().setNome(nome);
getUsuario().setEndereco("Rua santo DWR número 555");
getUsuario().setTelefone("9999-9999");

return getUsuario();
}
}

Agora vamos a parte principal do nosso artigo, a configuração do arquivo applicationContext-DWR.xml, pois é neste arquivo que fica nossas configurações do DWR e também nossos beans da aplicação e do DWR.

Segue abaixo a configuração do arquivo applicationContext-DWR.xml:


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd

http://www.directwebremoting.org/schema/spring-dwr

http://directwebremoting.org/schema/spring-dwr-3.0.xsd">
<!-- Configurações de inicialização da Engine do DWR -->
<bean id="dwrHandlerMappings"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="order" value="1" />
<property name="alwaysUseFullPath" value="true"></property>
<property name="mappings">
<props>
<prop key="/dwr/**/*">dwrController</prop>
<prop key="/dwr/*">dwrController</prop>
<prop key="/engine.js">dwrController</prop>
<prop key="/util.js">dwrController</prop>
<prop key="/interface/**">dwrController</prop>
<prop key="/call/**">dwrController</prop>
</props>
</property>
</bean>
<!-- Configurações do DWRControle que é o controlador do DWR -->
<dwr:controller id="dwrController" debug="true">
<dwr:config-param name="activeReverseAjaxEnabled"
value="true" />
</dwr:controller>
<!-- Nosso bean do DWR que converte nosso método find dentro da classe UsuarioAjax em um metodo javascript -->
<bean id="dwrUsuario" class="br.com.diego.dwr.UsuarioAjax">
<dwr:remote javascript="usuarioAjax">
<dwr:include method="find" />
</dwr:remote>
<property name="usuario" ref="usuarioBean"/>
</bean>
<!-- Inserimos uma configuracao do DWR para nossos convertes aqui, estes convertes servem para converter nossos beans java em objetos javascript -->
<dwr:configuration>
<dwr:convert type="bean" class="br.com.diego.bean.UsuarioBean" />
</dwr:configuration>
<!-- Nosso bean referente a classe UsuarioBean, este será injetado na classe UsuarioAjax -->
<bean id="usuarioBean" class="br.com.diego.bean.UsuarioBean"/>
</beans>

Nossa página index.jsp


<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Exemplo Spring DWR</title>
<script type='text/javascript'
	src='/springDwr/dwr/interface/usuarioAjax.js'></script>
<script type='text/javascript' src='/springDwr/dwr/engine.js'></script>
<script type='text/javascript' src='/springDwr/dwr/util.js'></script>
<script type="text/javascript">
	function findUser() {
		var nome = document.getElementById("inputNome").value;
		usuarioAjax.find(nome, {
			callback : function(usuarioBean) {
				dwr.util.setValue('divShow', usuarioBean.id + " / "
						+ usuarioBean.nome + " - " + usuarioBean.endereco
						+ " - " + usuarioBean.telefone);
			}
		});
	}
</script>

</head>
<body>
<table>
	<tr>
		<td><label for="inputNome">Nome:</label></td>
		<td><input type="text" id="inputNome" maxlength="20" width="20px"></td>
		<td><input type="button" value="Enviar" onclick=findUser();></td>
	</tr>
</table>
<br>
<div id="divShow"></div>
</body>
</html>

Observe que temos alguns imports de javascript na nossa página jsp, se você criou um projeto idêntico ao que foi passado aqui neste artigo você poderá acessar a url da imagem abaixo para verificar que o próprio DWR lhe fornecess os imports necessários que você deverá incluir na sua página jsp para que tenha acesso a seu método na sua classe java, inclusive tem como até mesmo você testar atravéz desta url de teste do DWR.

Página de Teste DWR

Se deu tudo certo você poderá acessar sua aplicação que você terá o resultado abaixo, ao clicar no botão enviar o DWR irá invocar seu método find dentro da sua classe UsuarioAjax que retornará um bean UsuarioBean que será exibido na página sem refresh algum.

springdwrresultado

Efetutem o donwload do projeto(sem os arquivos jar) aqui.

Bom pessoal este artigo fica por aqui, este é apenas o primeiro de muitos que virão, espero que tenham gostado.

Estou a disposição para esclarecer dúvidas!

Abraços !!!

,

1 Comentário