[Struts] - Aplicaciones modulares
El éxito de Java sobre los cientos de lenguajes de programación existentes se debe a que fue el primero en promover y apoyar dos principios básicos: modularización y reutilización. Yo creo que todos conocemos y utilizamos estos principios.
Para aplicarlos al nivel de una aplicación web, Struts desde su versión 1.1 nos permite sudividir nuestra aplicación en subaplicaciones (módulos) para facilitar el trabajo simultáneo de diferentes equipos sobre la misma aplicación y facilitar la reutilización de módulos enteros (como un login común, administración, consulta de datos comunes…).
Para ello en la configuración del ActionServlet en el fichero web.xml introducimos algo similar a :
<!– Action Servlet Configuration –>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>config/login</param-name>
<param-value>/WEB-INF/struts-config-login.xml</param-value>
</init-param>
<init-param>
<param-name>config/consultasComunes</param-name>
<param-value>/WEB-INF/struts-config-consultasComunes.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
Esta declaración nos define
- un módulo llamado login, que está definido por el fichero /WEB-INF/struts-config-login.xml; la URL necesaria para acceder vía web a este módulo será http://servidor:puerto/nombre_aplicación/login.
- otro módulo llamado consultasComunes, definido por el fichero /WEB-INF/struts-config-consultasComunes.xml; la URL necesaria para acceder vía web a este módulo será http://servidor:puerto/nombre_aplicación/consultasComunes.
- y un último módulo, tomado por defecto y sin nombre declarado en primer lugar y definido por el fichero /WEB-INF/struts-config.xml ;la URL necesaria para acceder vía web a este módulo será la normal, http://servidor:puerto/nombre_aplicación.
Por defecto, Struts antepone el prefijo del módulo a las URL declaradas en cada fichero de configuración de cada módulo. Es decir, si en nuestro módulo de login tenemos una acción llamada "/nuevoUsuario" que apunta a una JSP llamada "nuevoUsuario.jsp", Struts automáticamente buscará en las URLs http://servidor:puerto/nombre_aplicación/login/nuevoUsuario.do y http://servidor:puerto/nombre_aplicación/login/nuevoUsuario.jsp respectivamente.
Ocurre lo mismo para las etiquetas como html:link o html:img, por lo que
- para enlaces entre distintos módulos en la versión 1.1 habrá que utilizar un action especial (SwitchAction); a partir de 1.2 soporta también el nombre del módulo (atributo module).
- habrá que separar las imágenes por módulos.
A pesar de que tiene compatibilidad con Struts 1.0, 1.1, 1.2 y posteriores, por bugs en las etiquetas se recomienda utilizar módulos únicamente en las versiones 1.2 y posteriores.