El Framework Olvidado De Java
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.
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
.
- ya sea desde otra aplicación, en cuyo caso sería una librería en formato
- 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)
Usando un jsp (mezclando modelo, vista y controlador en el mismo fichero)
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 2
4:
- 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.
¿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.
- Foto de Kenny Eliason en Unsplash