Direct Web Remoting (DWR) es una librería que nos permite hacer peticiones HTTP desde Javascript, si hacer peticiones AJAX, de esta forma podemos hacer nuestras aplicaciones más dinámicas dentro de una aplicación con Struts2.
Si bien Struts ya no es una tecnología común a implementar en estos días, existen en las empresas muchos proyectos y por consiguiente es necesario darles mantenimiento como a mi me paso, razón por la cual estoy compartiendo esta información.
Aquí no explicare que es Struts ni cómo funciona, ya existen muchas páginas para eso, aquí solo realizaremos las configuraciones básicas desde el inicio.
- Java: con un nivel básico es suficiente.
- Maven: hay que tenerlo configurado.
Ya debemos tener instalado Maven, si no es así puedes seguir este Tutorial
Si quieres comprobar que lo tienes instalado correctamente puedes seguir el post Configuración básica de Java Spring
Ejecutamos en la terminal la instrucción siguiente que nos creara la configuración básica de un proyecto.
mvn archetype:generate -B
-DgroupId=com.mycompany.mysystem
-DartifactId=myWebApp \
-DarchetypeGroupId=org.apache.struts \
-DarchetypeArtifactId=struts2-archetype-blank \
-DarchetypeVersion=<CURRENT_STRUTS_VERSION> \
-DremoteRepositories=http://struts.apache.org
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.directwebremoting</groupId>
<artifactId>dwr</artifactId>
<version>3.0.2-RELEASE</version>
</dependency>
La primer configuración compleja es crear un Servlet que servirá como punto de entrada
así que agregamos el Servlet dentro del web.xml
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value> true </param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern> /dwr/* </url-pattern>
</servlet-mapping>
Aquí está el punto central donde declaramos el DWR y lo hacemos creando un archivo dwr.xml al nivel del archivo web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC
"-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN"
"http://directwebremoting.org/schema/dwr30.dtd">
<dwr>
<allow>
<create creator="new" javascript="Message">
<param name="class" value="io.saidmlx.POJO.Message"/>
</create>
</allow>
</dwr>
En el paso anterior declaramos un DWR y le asignamos una clase io.saidmlx.POJO.Message
package io.saidmlx.POJO;
public class Message {
public String getMessage() {
return "Hello DWR from Server";
}
}
Modificamos el archivo hello.jsp para que quede de con la siguiente estructura.
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title><s:text name="hello.message" /></title>
<script type='text/javascript' src='/dwrStruts2/dwr/engine.js'></script>
<script type='text/javascript' src='/dwrStruts2/dwr/util.js'></script>
<script type='text/javascript' src='/dwrStruts2/dwr/interface/Message.js'></script>
</head>
<body>
<h1>Example dwr</h1>
<input value="click me!!!" type="button" onclick="update();" />
<div style="background-color: #ffeaa7; font-weight: bold; width: 300px;" id="divResponse">Message From Server</div>
<script type="text/javascript">
function update() {
Message.getMessage(function(data) {
dwr.util.setValue("divResponse", data);
});
}
</script>
</body>
</html>
En el archivo anterior podemos ver la forma en que se está mandando a llamar nuestro AJAX
function update() {
Message.getMessage(function(data) {
dwr.util.setValue("divResponse", data);
});
}
Para ejecutar la aplicación solo tenemos que ejecutar en la terminal
mvn jetty:run
Si quieres el codigo fuente solo tienes que hacer un pull request a github