..

El Framework Olvidado De Java

estantería con libros programación

Si hablamos de desarrollo web Java, el estandar de facto es Spring Boot. Esta es una solución rápida, eficaz, sencilla, con una gran comunidad y plantillas predefinidas para montar una aplicación de nivel empresarial en minutos.

Suena idílico ¿no?

El principal problema, es que Spring Boot fue lanzado hace apenas 10 años1:

  • esto es un periodo muy pequeño de tiempo para adaptar proyectos ya existentes (Java se lanzo en 1995).
  • aproximadamente el 50%2 de empresas que utilizan Java son de sectores poco propensos a actualizar sus tecnologías.

uso de java por sector

Con todo lo anterior, me parece interesante ver qué soluciones existían (y todavía existen) en el ecosistema Java. Por ello, hoy vamos a hablar de un framework arcaico pero muy asentado Apache Struts.

Tabla de contenido

La época del efecto 2000

Antes de entrar en qué es Struts y su funcionamiento, tenemos que entender como se desarrollaban las aplicaciones web en esa época.

De manera resumida, los principales términos que se tienen que conocer en el desarrollo de aplicaciones Java (y en las que incluso se basan frameworks modernos) son:

  • Aplicación Java: Una aplicación Java no deja de ser un conjunto de librerías, APIs y directorios que organizados y compilados de una forma concreta nos da como resultado una fichero que se puede ejecutar:
    • ya sea desde otra aplicación, en cuyo caso sería una librería en formato .jar
    • o desde un servidor web (por ejemplo Apache Tomcat), en cuyo caso sería una webapp en formato .war.
  • Java/Jakarta EE: representa un estandar de como se tiene que organizar un proyecto de tipo empresarial dentro de Java, aportando la estructura, librerías y APIs que se pueden utilizar.
  • Java Servlet: consisten en clases Java, que al desplegarse en un servidor se compilan y permiten recibir, procesar y devolver peticiones HTTP (básicamente actuan como un endpoint).
import javax.servlet.http.*;  
import javax.servlet.*;  
import java.io.*;  

@WebServlet(name = "index", urlPatterns = "/index")
public class DemoServlet extends HttpServlet{  
	public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException,IOException  
	{  
        // Setting the content type 
		res.setContentType("text/html");
        // Get the stream to write the data 
		PrintWriter pw = res.getWriter(); 
		  
		// Writing html in the stream
		pw.println("<html>"); 
		pw.println("<body>"); 
		pw.println("Welcome World from a Servlet!!");  
		pw.println("</body>");
		pw.println("</html>");  

		// Closing the stream
		pw.close();
	}
} 
  • JavaServer Pages/JakartaServer Pages: los servlets son buenos gestionando páginas web estáticas, pero en el momento que se tiene que generar contenido dinámico o gestionar peticiones que necesitan llamadas a una base de datos es necesario ampliar la funcionalidad de los mismo mediante JSPs. Los cuales son similares a páginas HTML, pero con la capacidad de ejecutar trozos de código Java desde la misma.
<%@ page import="com.test.MyClass" %>

<%
    MyClass obj = new MyClass();
%>

Analizando los términos anteriores, podemos ver 2 formas de desarrollar una aplicación web:

Usando un servlet (asumiendo sus limitaciones) flujo de la aplicación mediante servlets

Usando un jsp (mezclando modelo, vista y controlador en el mismo fichero) flujo de la aplicación mediante jsp

Struts

Struts (ese ts final se me atraganta cada vez que tengo que buscarlo en internet 😅) según su web oficial3 es:

Un Framework gratuito y abierto, que utiliza una arquitectura Modelo-Vista-Controlador (MVC) para desarrollar aplicaciones web elegantes y modernas.

El objetivo principal de Struts, es separar la arquitectura de la aplicación en 3 capas típicas. Para conseguirlo, se utiliza una arquitectura JSP model 24:

  • Modelo (Java Beans): se encarga de interactuar con la Base de Datos
  • Vista (JSP Pages): se encarga de gestionar las páginas HTML que se muestran al usuario
  • Controlador (Servlet/Filter): se encarga de unir y pasar información entre el modelo y la vista

¿Struts pero con un 2?

Struts2 no es más que una iteración de la primera versión. Los principales añadidos son a nivel técnico, de rendimiento y de ficheros de configuración.

Pero el objetivo principal del framework es el mismo, permitir estructurar un proyecto de manera eficiente utilizando MVC.

Su principal diferencia, es que cuando se envía y recibe una petición HTTP:

  • en la versión 1 esta llegaba al servlet directamente y la recibe el cliente directamente.
  • en la versión 2 se añaden unos filtros en ambos sentidos, que permiten a los usuarios añadir validaciones y realizar procesamiento previo a que llegue al servlet.

flujo de petición en struts2

¿Como funcionan?

Las principales partes de las que está compuesta una aplicación de Struts2 son:

  • Un fichero web.xml: en el cual se configura la aplicación y se indica que se quiere utilizar el Struts.
  • Un fichero struts.xml: donde se mapean los nombres de las acciones y los ficheros jsp que se tienen que compilar y devolver al cliente.
  • Ficheros JSP: el cual se devuelve al usuario, y actua como una plantilla que se rellena con los datos de la clase Java Action.
  • Clases Java Actions: las cuales procesan los datos recibidos desde el cliente, llamando a la Base de datos y realizando las acciones correspondientes, antes de compilar el html con esta información.