¿Que es el framework Struts? Y para que sirve
Bienvenidos a este fascinante viaje en el mundo de la programación en Java y el framework Struts. Si eres un entusiasta que está dando sus primeros pasos en el desarrollo web, o si ya tienes experiencia pero estás explorando nuevas herramientas, estás en el lugar adecuado. En este artículo, desglosaremos de manera clara y accesible qué es exactamente el framework Struts y cuál es su propósito fundamental en el universo de Java.
¡Descubre el fascinante mundo del framework Struts para elevar tus habilidades en desarrollo web! Únete a nuestro curso gratis de Patrones de Diseño y Struts que te adentrará en estos conceptos. Además, descubre nuestra amplia oferta de cursos online gratis de programación, desde curso gratis de Desarrollo de Aplicaciones Web con ASP.NET , curso gratis de Programacion.net, curso gratis de Análisis En Código Bdd Y Tdd , curso gratis de Programación en Visual C++, hasta curso gratis de Python y Django. ¡Comienza tu viaje de aprendizaje hoy en nuestra plataforma de educación de calidad!
Antes de sumergirnos en el fascinante mundo de Struts, es crucial entender el concepto de un «framework». No te preocupes si aún no estás familiarizado con el término, lo explicaremos de manera simple. En el desarrollo de software, un framework es esencialmente un conjunto estructurado de herramientas y reglas que te ayuda a construir aplicaciones de manera más eficiente. Imagina un andamio sólido que proporciona la base necesaria para edificar un rascacielos sin tener que preocuparte por los detalles más tediosos de la construcción.
Struts es uno de esos «andamios» específicamente diseñados para el desarrollo de aplicaciones web en Java.
¿Qué es un Framework?
Antes de adentrarnos en Struts, es esencial comprender qué es un framework en el contexto de la programación. En términos simples, un framework es una estructura o conjunto de herramientas predefinidas diseñadas para facilitar el desarrollo de software. Funciona como un esqueleto sobre el cual los desarrolladores pueden construir sus aplicaciones.
Un framework proporciona una serie de funciones y reglas que permiten a los programadores desarrollar aplicaciones de manera más eficiente, ya que no necesitan comenzar desde cero en cada proyecto. Estas funciones pueden incluir desde herramientas para manejar la lógica de negocio, la gestión de datos, hasta la interfaz de usuario.
Utilizar un framework puede ahorrar tiempo y esfuerzo al proporcionar una base sólida y consistente para el desarrollo de aplicaciones. Además, los frameworks suelen seguir las mejores prácticas y estándares de la industria, lo que contribuye a la creación de aplicaciones más robustas y seguras.
¿Qué es Struts?
Ahora que comprendemos la importancia de los frameworks en el desarrollo de software, podemos adentrarnos en Struts. Struts es un framework de código abierto desarrollado en Java que se utiliza principalmente para crear aplicaciones web. Es una herramienta poderosa que proporciona una estructura robusta y coherente para desarrollar aplicaciones web escalables y mantenibles.
En términos más técnicos, Struts es un framework MVC (Modelo-Vista-Controlador) que separa claramente la lógica de presentación (vista), la lógica de negocio (controlador) y la gestión de datos (modelo). Esta separación de preocupaciones facilita el desarrollo y mantenimiento de aplicaciones web al promover un diseño modular y una mayor reutilización de código.
Struts ha sido ampliamente adoptado en la comunidad de desarrollo Java debido a su robustez, flexibilidad y soporte activo. Ha sido utilizado en una amplia variedad de proyectos, desde aplicaciones empresariales hasta sitios web de comercio electrónico.
Historia de Struts
Para comprender mejor el contexto y la evolución de Struts, es importante retroceder en el tiempo y explorar su historia. Struts fue creado inicialmente por Craig McClanahan en 2000, mientras trabajaba como desarrollador en Apache Software Foundation. McClanahan estaba buscando una manera más eficiente de desarrollar aplicaciones web en Java, y así nació Struts.
La primera versión pública de Struts, conocida como Struts 1, se lanzó en 2001 y se convirtió rápidamente en un proyecto popular en la comunidad de desarrollo Java. Esta versión inicial estableció las bases del framework, incluyendo su arquitectura MVC y su enfoque en la separación de preocupaciones.
A lo largo de los años, Struts ha experimentado varias actualizaciones y mejoras, con la versión 1.1 lanzada en 2002 y la versión 1.2 en 2003. Estas actualizaciones introdujeron nuevas características y funcionalidades, así como mejoras en el rendimiento y la estabilidad del framework.
Sin embargo, la versión más significativa de Struts llegó con el lanzamiento de Struts 2 en 2006. Struts 2 fue una reescritura completa del framework, con un enfoque en la simplicidad, la flexibilidad y la facilidad de uso. Esta versión modernizada de Struts atrajo a una nueva generación de desarrolladores y consolidó aún más la posición del framework en el mundo del desarrollo web en Java.
Desde entonces, Struts ha seguido evolucionando con nuevas versiones y actualizaciones para mantenerse al día con las últimas tendencias y tecnologías en el desarrollo web. Aunque ha surgido una amplia gama de alternativas y competidores, Struts sigue siendo una opción popular para el desarrollo de aplicaciones web en Java, gracias a su estabilidad, madurez y soporte activo de la comunidad.
Características de Struts
Struts es un framework robusto y versátil que ofrece una amplia gama de características diseñadas para facilitar el desarrollo de aplicaciones web en Java. A continuación, destacamos algunas de las características más importantes de Struts:
Arquitectura MVC
Struts sigue el patrón de arquitectura MVC (Modelo-Vista-Controlador), lo que permite una clara separación de la lógica de presentación, la lógica de negocio y la gestión de datos. Esto facilita el desarrollo, la mantenibilidad y la escalabilidad de las aplicaciones.
Manejo de solicitudes y respuestas
Struts proporciona un controlador frontal (Front Controller) que maneja todas las solicitudes entrantes y enruta la ejecución a los componentes adecuados del framework. Esto simplifica la gestión del flujo de control en la aplicación.
Etiquetas personalizadas
Struts ofrece un conjunto de etiquetas personalizadas (JSP tags) que simplifican la creación de interfaces de usuario dinámicas y ricas en contenido. Estas etiquetas abstraen la lógica HTML y facilitan la integración con el código Java.
Validación de formularios
Struts proporciona un mecanismo integrado para validar los datos enviados desde los formularios web, lo que garantiza la integridad y la consistencia de los datos antes de procesarlos en el servidor.
Configuración basada en XML
Struts utiliza archivos de configuración XML para definir la estructura y el comportamiento de la aplicación. Esto proporciona una mayor flexibilidad y configurabilidad, permitiendo a los desarrolladores ajustar el comportamiento de la aplicación sin necesidad de modificar el código fuente.
Integración con tecnologías de la plataforma Java
Struts se integra fácilmente con otras tecnologías de la plataforma Java, como Servlets, JSP, JDBC y JSTL, lo que permite a los desarrolladores aprovechar al máximo el ecosistema Java para el desarrollo de aplicaciones web.
Arquitectura de Struts
La arquitectura de Struts es fundamental para comprender cómo funciona el framework y cómo se organizan los diferentes componentes dentro de una aplicación web. Struts sigue el patrón de diseño MVC (Modelo-Vista-Controlador), que separa claramente las responsabilidades de la aplicación en tres capas distintas:
Modelo
Esta capa representa los datos de la aplicación y la lógica de negocio asociada. En Struts, el modelo generalmente consiste en clases Java que encapsulan la lógica de acceso a datos y realizan operaciones relacionadas con la base de datos u otros recursos.
Vista
La capa de vista es responsable de presentar la interfaz de usuario al usuario final. En Struts, la vista está representada principalmente por archivos JSP (JavaServer Pages) que contienen la estructura HTML y las etiquetas personalizadas utilizadas para generar la salida dinámica.
Controlador
El controlador actúa como un intermediario entre el modelo y la vista, gestionando el flujo de control de la aplicación. En Struts, el controlador está representado por el ActionServlet, que actúa como un Front Controller y maneja todas las solicitudes entrantes. El ActionServlet utiliza un archivo de configuración XML llamado «struts-config.xml» para mapear las URL de las solicitudes a las clases Action correspondientes.
Componentes de Struts
Struts está compuesto por varios componentes que trabajan juntos para facilitar el desarrollo de aplicaciones web en Java. A continuación, se detallan los componentes principales de Struts:
Action
Las acciones son clases Java que contienen la lógica de negocio de la aplicación. Cada acción representa una funcionalidad específica de la aplicación y responde a las solicitudes del usuario. Las acciones procesan los datos recibidos de la vista, interactúan con el modelo para realizar operaciones en la base de datos u otros recursos, y finalmente devuelven una respuesta a la vista.
ActionServlet
El ActionServlet es el controlador principal de Struts y actúa como un Front Controller para todas las solicitudes entrantes. Gestiona el flujo de control de la aplicación, enruta las solicitudes a las acciones correspondientes y coordina la ejecución de las diferentes etapas del ciclo de vida de una solicitud.
Formulario
Los formularios son objetos Java que encapsulan los datos enviados desde la vista al servidor. Cada formulario corresponde a una página web o parte de una página y contiene los campos y valores enviados por el usuario. Los formularios se utilizan para validar y procesar los datos recibidos antes de enviarlos al modelo para su procesamiento.
Interceptor
Los interceptores son componentes que permiten realizar acciones adicionales antes o después de que se ejecute una acción. Los interceptores se pueden utilizar para agregar funcionalidades como la autenticación, la autorización, el registro de errores, la internacionalización, entre otros, de manera transparente y reutilizable en toda la aplicación.
Resultados
Los resultados son objetos que representan la salida de una acción y determinan cómo se presenta la respuesta al usuario. Struts proporciona una variedad de resultados predefinidos, como redirecciones, reenvíos, vistas JSP, XML, JSON, entre otros, que pueden ser utilizados según las necesidades de la aplicación.
¿Para qué sirve Struts?
Struts sirve como un framework de desarrollo web en Java diseñado para simplificar y agilizar la creación de aplicaciones web robustas y escalables. Al proporcionar una estructura MVC (Modelo-Vista-Controlador) y una serie de componentes predefinidos, Struts ofrece varias ventajas y funcionalidades que lo hacen invaluable para los desarrolladores. Aquí se destacan algunas de las principales funciones y usos de Struts:
Organización del código
Struts ayuda a organizar el código de la aplicación de manera clara y coherente, siguiendo el patrón MVC. Esto facilita la separación de preocupaciones y mejora la mantenibilidad del código.
Desarrollo rápido
Struts proporciona una serie de componentes y herramientas listas para usar que permiten a los desarrolladores crear aplicaciones web de manera más eficiente y rápida. Esto incluye etiquetas personalizadas, mecanismos de validación de formularios y enrutamiento de solicitudes.
Reutilización de código
Al seguir el enfoque MVC, Struts promueve la reutilización de código al separar la lógica de presentación, la lógica de negocio y la gestión de datos en componentes distintos. Esto facilita la creación de aplicaciones modulares y escalables.
Manejo de solicitudes
Struts proporciona un controlador frontal (Front Controller) que maneja todas las solicitudes entrantes y las dirige a las acciones correspondientes. Esto simplifica el flujo de control en la aplicación y facilita la implementación de lógica de navegación compleja.
Validación de formularios
Struts ofrece un mecanismo integrado para validar los datos enviados desde los formularios web, lo que ayuda a garantizar la integridad y la consistencia de los datos antes de procesarlos en el servidor. Esto mejora la calidad y la seguridad de la aplicación.
Ventajas de usar Struts
Struts ofrece una serie de ventajas que hacen que sea una opción popular entre los desarrolladores para la creación de aplicaciones web en Java. A continuación, se destacan algunas de las principales ventajas de utilizar Struts:
Estructura MVC
Struts sigue el patrón de arquitectura MVC (Modelo-Vista-Controlador), lo que facilita la separación de preocupaciones y la organización del código de la aplicación. Esto mejora la mantenibilidad y la escalabilidad del proyecto.
Componentes predefinidos
Struts proporciona una serie de componentes y herramientas predefinidos que facilitan el desarrollo de aplicaciones web. Esto incluye acciones, formularios, etiquetas personalizadas y mecanismos de validación de formularios, que ayudan a acelerar el proceso de desarrollo.
Reutilización de código
Al separar la lógica de presentación, la lógica de negocio y la gestión de datos en componentes distintos, Struts fomenta la reutilización de código. Esto permite a los desarrolladores crear aplicaciones modulares y escalables con mayor facilidad.
Soporte para tecnologías de Java
Struts se integra fácilmente con otras tecnologías de la plataforma Java, como Servlets, JSP, JDBC y JSTL. Esto permite a los desarrolladores aprovechar al máximo el ecosistema Java y utilizar las herramientas y bibliotecas disponibles.
Validación de formularios integrada
Struts ofrece un mecanismo integrado para validar los datos enviados desde los formularios web, lo que ayuda a garantizar la integridad y la consistencia de los datos antes de procesarlos en el servidor. Esto mejora la calidad y la seguridad de la aplicación.
Comunidad activa
Struts cuenta con una comunidad activa de desarrolladores que contribuyen al desarrollo y la mejora continua del framework. Esto garantiza que Struts esté actualizado con las últimas tendencias y tecnologías en el desarrollo web en Java.
Desventajas de Struts
A pesar de ser un framework popular y ampliamente utilizado, Struts también presenta algunas desventajas que los desarrolladores deben considerar antes de decidir utilizarlo en sus proyectos. A continuación, se enumeran algunas de las principales desventajas de Struts:
Curva de aprendizaje
Struts puede tener una curva de aprendizaje pronunciada para los desarrolladores nuevos en el framework, especialmente aquellos que no están familiarizados con el patrón de arquitectura MVC o las tecnologías relacionadas con Java EE (Enterprise Edition).
Configuración compleja
La configuración de Struts a través de archivos XML puede ser compleja y propensa a errores. Los desarrolladores pueden encontrarse con dificultades para entender y mantener la configuración de la aplicación, especialmente en proyectos grandes y complejos.
Flexibilidad limitada
Aunque Struts ofrece una serie de componentes predefinidos que facilitan el desarrollo de aplicaciones web, su enfoque en la estructura MVC puede limitar la flexibilidad en ciertos casos. Los desarrolladores pueden encontrar desafíos al intentar implementar funcionalidades avanzadas o personalizaciones específicas.
Ciclo de desarrollo más largo
Debido a la configuración inicial y la estructura definida de Struts, el proceso de desarrollo puede ser más largo en comparación con otros frameworks más livianos o flexibles. Esto puede resultar en un tiempo de comercialización más largo para el producto final.
Tecnología obsoleta
Aunque Struts ha sido un pilar en el desarrollo web en Java durante muchos años, su popularidad ha disminuido con la llegada de nuevos frameworks y tecnologías. Algunos desarrolladores pueden considerar que Struts es una tecnología obsoleta y preferir utilizar alternativas más modernas y avanzadas.
Casos de uso de Struts
Struts es adecuado para una variedad de casos de uso en el desarrollo de aplicaciones web en Java. A continuación, se enumeran algunos de los escenarios más comunes en los que Struts puede ser una opción adecuada:
Aplicaciones empresariales
Struts es ideal para el desarrollo de aplicaciones empresariales que requieren una estructura sólida y modular. Su arquitectura MVC facilita la separación de preocupaciones y la organización del código, lo que hace que sea más fácil de mantener y escalar a medida que crece la aplicación.
Aplicaciones CRUD
Struts es muy útil para el desarrollo de aplicaciones CRUD (Crear, Leer, Actualizar, Eliminar) que operan principalmente en operaciones de base de datos. Su soporte integrado para formularios y validación de datos facilita la implementación de funcionalidades de entrada de datos y manipulación de datos en la base de datos.
Aplicaciones web de comercio electrónico
Struts puede ser utilizado en el desarrollo de aplicaciones web de comercio electrónico que requieren una interfaz de usuario dinámica y una lógica de negocio compleja. Su capacidad para gestionar el flujo de control de manera efectiva y su integración con tecnologías de Java hacen que sea una opción sólida para este tipo de aplicaciones.
Aplicaciones de gestión de contenido
Struts se puede utilizar en el desarrollo de aplicaciones de gestión de contenido que necesitan administrar y mostrar una gran cantidad de información de manera efectiva. Su capacidad para crear interfaces de usuario dinámicas y su soporte para la validación de datos son ventajas significativas en este contexto.
Aplicaciones de administración y panel de control
Struts es adecuado para el desarrollo de aplicaciones de administración y paneles de control que requieren una interfaz de usuario intuitiva y funcionalidades avanzadas de gestión. Su capacidad para organizar el código de manera clara y su soporte para la validación de formularios son beneficiosos para este tipo de aplicaciones.
Alternativas a Struts
Si bien Struts ha sido un marco de referencia durante mucho tiempo en el desarrollo web en Java, existen varias alternativas modernas que los desarrolladores pueden considerar según las necesidades específicas de su proyecto. A continuación, se presentan algunas de las alternativas más populares a Struts:
Spring MVC
Spring MVC es parte del amplio ecosistema de Spring Framework y es una opción popular para el desarrollo de aplicaciones web en Java. Ofrece una arquitectura MVC flexible, inyección de dependencias y una amplia gama de características adicionales para el desarrollo empresarial.
JavaServer Faces (JSF)
JSF es un marco de trabajo estándar de Java EE para la construcción de interfaces de usuario basadas en componentes web. Proporciona una programación basada en eventos y una amplia gama de componentes reutilizables, lo que lo hace ideal para aplicaciones empresariales complejas.
Play Framework
Play es un marco de trabajo web ligero y de alto rendimiento para Java y Scala. Ofrece una arquitectura de modelo de actores y un enfoque reactivo, lo que lo hace ideal para aplicaciones web escalables y en tiempo real.
Apache Wicket
Wicket es un marco de trabajo orientado a componentes que simplifica el desarrollo de aplicaciones web en Java al permitir a los desarrolladores crear interfaces de usuario reutilizables y fácilmente mantenibles.
Micronaut
Micronaut es un marco de trabajo moderno y ultrarrápido para el desarrollo de aplicaciones JVM, incluidas aplicaciones web. Ofrece una arquitectura modular, inyección de dependencias y tiempo de inicio ultrarrápido, lo que lo hace ideal para aplicaciones en la nube y microservicios.
Tabla comparativa entre Struts y sus alternativas
Aspecto | Struts | Spring MVC | JSF | Play Framework | Apache Wicket | Micronaut |
---|---|---|---|---|---|---|
Arquitectura | MVC | Igual | MVC | Basada en Actores, Reactiva | Componente | MVC y basada en Microservicios |
Lenguaje | Java | Igual | Java | Scala y Java | Java | Kotlin, Groovy y Java |
Curva de aprendizaje | Moderada | Media | Moderada | Media | Moderada | Media |
Flexibilidad | Media | Alta | Media | Alta | Alta | Muy alta |
Integración | Buena | Excelente | Buena | Muy Buena | Buena | Buena |
Comunidad y soporte | Grande | Amplia | Grande | Amplia | Grande | Amplia |
Configuración | Compleja | Moderada | Compleja | Moderada | Moderada | Compleja |
Popularidad | Declinante | Alta | Media | Alta | Media | En crecimiento |
Versatilidad | Media | Alta | Media | Alta | Media | Alta |
Ejemplos de desarrollo web con código con Struts
Aquí tienes un ejemplo básico de una aplicación web simple utilizando Struts. En este caso, crearemos una aplicación que permite al usuario ingresar su nombre y luego muestra un mensaje de bienvenida.
Primero, necesitaremos configurar la estructura del proyecto y los archivos de configuración necesarios. Luego, crearemos nuestras clases de acción, formulario y vista.
Configuración de la estructura del proyecto
+-- src
| +-- main
| +-- java
| | +-- com
| | +-- ejemplo
| | +-- actions
| | +-- WelcomeAction.java
| | +-- forms
| | +-- WelcomeForm.java
| +-- resources
| +-- struts-config.xml
+-- webapp
| +-- WEB-INF
| +-- web.xml
| +-- index.jsp
| +-- welcome.jsp
Configuración de `web.xml`
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<display-name>StrutsExample</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
`struts-config.xml`
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
<form-beans>
<form-bean name="welcomeForm" type="com.ejemplo.forms.WelcomeForm"/>
</form-beans>
<action-mappings>
<action path="/welcome" type="com.ejemplo.actions.WelcomeAction" name="welcomeForm" scope="request">
<forward name="success" path="/welcome.jsp"/>
</action>
</action-mappings>
</struts-config>
Clase de formulario `WelcomeForm.java`
package com.ejemplo.forms;
import org.apache.struts.action.ActionForm;
public class WelcomeForm extends ActionForm {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
`WelcomeAction.java`
package com.ejemplo.actions;
import com.ejemplo.forms.WelcomeForm;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class WelcomeAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
WelcomeForm welcomeForm = (WelcomeForm) form;
String name = welcomeForm.getName();
request.setAttribute("message", "¡Bienvenido, " + name + "!");
return mapping.findForward("success");
}
}
Vista `welcome.jsp`
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Struts Example</title>
</head>
<body>
<h1><%= request.getAttribute("message") %></h1>
</body>
</html>
`index.jsp`
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Struts Example</title>
</head>
<body>
<h1>Ingresa tu nombre:</h1>
<form action="welcome" method="post">
<input type="text" name="name">
<input type="submit" value="Enviar">
</form>
</body>
</html>
Este ejemplo es solo un caso básico de uso de Struts. El framework puede manejar aplicaciones más complejas con una arquitectura bien organizada.
Conclusión ¿Que es el framework Struts? Y para que sirve.
En conclusión, Struts es un framework sólido y maduro para el desarrollo de aplicaciones web en Java que ha sido ampliamente utilizado en la comunidad de desarrollo durante muchos años. Ofrece una arquitectura MVC clara y una serie de componentes predefinidos que facilitan el desarrollo de aplicaciones robustas y escalables.
A lo largo de este ejemplo, hemos explorado cómo configurar y utilizar Struts para crear una aplicación web simple que permite al usuario ingresar su nombre y luego muestra un mensaje de bienvenida. Aunque este ejemplo es básico, demuestra el potencial de Struts para manejar la lógica de la aplicación, la validación de formularios y la presentación de datos de manera efectiva.
Si bien Struts tiene sus desventajas, como una curva de aprendizaje pronunciada y una configuración compleja, sigue siendo una opción válida para muchos desarrolladores y proyectos. Sin embargo, también es importante explorar y considerar alternativas más modernas y avanzadas según las necesidades específicas del proyecto y las preferencias del equipo de desarrollo.
En última instancia, la elección del framework adecuado dependerá de una variedad de factores, incluyendo los requisitos del proyecto, la familiaridad del equipo con la tecnología y las consideraciones de mantenibilidad y escalabilidad a largo plazo. Con la combinación correcta de herramientas y enfoques, los desarrolladores pueden construir aplicaciones web poderosas y eficientes que satisfagan las necesidades de sus usuarios y clientes.