Mostrando entradas con la etiqueta spring framework. Mostrar todas las entradas
Mostrando entradas con la etiqueta spring framework. Mostrar todas las entradas

viernes, 7 de noviembre de 2025

ASP .NET Core vs Spring Boot: ¿Cuál elegir?

En este post hablaremos de dos de las herramientas más populares y utilizadas para el desarrollo web. Por un lado, ASP (Active Server Pages) .Net Core y por el otro, Spring Boot. Ambas con sus seguidores, ambas con sus detractores. Ambas con sus pros y contras.

Empecemos con ASP .Net Core. Un framework desarrollado por la malévola empresa Microsoft (¿broma?) enfocada en la construcción de aplicaciones web. Unifica a ASP.NET MVC y ASP.NET Web API. Además de ser Open Source y multiplataforma. Además incluye Blazor, útil para desarrolladores que no quieren aprender Javascript (broma).

La documentación oficial nos dice:

".NET es una plataforma para desarrolladores formada por herramientas, lenguajes de programación y bibliotecas para crear una gran variedad de aplicaciones. ASP.NET Core amplía la plataforma para desarrolladores de .NET con herramientas y bibliotecas específicas para compilar aplicaciones web".

Si quieres instalar paquetes adicionales es necesario usar Nuget.

Actualmente existe infinidad de documentación oficial y no oficial, vídeos en Youtube, TikTok, etc. sobre esta herramienta. Además de no olvidar de libros, blogs y tutoriales en la red de redes.

Continuando con Spring Boot (no confundir con Spring Framework), la cual es una herramienta que ha facilitado el desarrollo web para los programadores Java (sic). Nos permite crear microservicios y aplicaciones web de una manera más sencilla a como se hacía antes con miles de configuraciones XML que ahogaban al pobre programador.

Spring Boot es una extensión de la plataforma Spring Framework que prioriza la configuración sobre la convención, con el objetivo de minimizar las preocupaciones de configuración al crear aplicaciones basadas en Spring. Dejando al programador ocupado con cosas más importantes (y menos tediosas).

Es importante notar que Spring Boot es un módulo basado en Spring Framework.


Principales características

ASP .Net Core:

  • Experiencia de desarrollo sin compilación (es decir, la compilación es continua, de modo que el desarrollador no tiene que invocar el comando de compilación). 
  • Framework modular distribuido como paquetes NuGet Entorno de ejecución optimizado para la nube (optimizado para Internet).
  • Compatibilidad con diversos sistemas operativos mediante la interfaz web abierta para .NET (OWIN). 
  • Un sistema de configuración basado en entornos y preparado para la nube.
  • Una canalización de solicitudes HTTP ligera y modular.
  • Crea y ejecuta aplicaciones ASP .Net Core multiplataforma en Windows, Mac y Linux. De código abierto y centrado en la comunidad. 
  • Control de versiones de aplicaciones en paralelo al usar .NET como destino. 
  • Soporte integrado para inyección de dependencias. 
  • Seguridad mejorada en comparación con Asp.Net.

Spring Boot

  • Desarrollo simplificado. 
  • Convención sobre configuración. 
  • Evitar escribir código reutilizable o configurar XML. 
  • Preparación para la producción. 
  • Arquitectura de microservicios. 
  • Flexibilidad. 
  • Programación reactiva. 

Pros y contras

ASP.NET Core

Pros:

  • Alto rendimiento gracias a Kestrel y compilación nativa. 
  •  Integración fluida con Azure y servicios Microsoft. Seguridad robusta con Identity y autenticación integrada. 
  •  Multiplataforma (Windows, Linux, macOS).

Contras:

  • Comunidad más pequeña fuera del ecosistema Microsoft. 
  • Curva de aprendizaje si vienes de otros stacks (como Java). 
  • Menos flexibilidad en comparación con Spring Boot en algunos patrones arquitectónicos.

Spring Boot

Pros:

  • Rápido desarrollo con configuración automática y amplia comunidad. 
  • Gran ecosistema: Spring Cloud, Spring Security, etc. 
  • Flexibilidad para arquitecturas complejas (microservicios, reactive, etc.). 
  • Amplio soporte en el mundo empresarial y open source.

Contras:

  • Puede volverse pesado si no se gestiona bien la configuración. 
  • Arranque más lento en comparación con ASP .Net Core
  • Requiere atención a versiones y dependencias para evitar conflictos.

¿Qué herramienta elegir?

Debes considerar que ASP .Net Core usa C#, ideal si vienes del ecosistema Microsoft o te interesa trabajar con Windows, Azure, o videojuegos (Unity).

Spring Boot usa Java como lenguaje base (aunque puedes optar por Kotlin o Groovy), excelente si te atrae el desarrollo empresarial, Android, o sistemas robustos multiplataforma.

Spring Boot tiene una comunidad más grande globalmente, con muchos tutoriales, cursos y proyectos open source.

ASP .Net Core tiene fuerte soporte en empresas que usan Microsoft stack, especialmente en América Latina y EE.UU.

Java/Spring Boot suele tener más demanda en bancos, aseguradoras y grandes corporativos.

ASP .Net Core es común en consultoras, software a medida, y empresas que usan Azure.

ASP .Net Core tiene una curva más suave si usas Visual Studio y te gusta trabajar con herramientas integradas.

HolaController.cs

using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("[controller]")]
public class HolaController : ControllerBase
{
    [HttpGet]
    [Route("hola")]
    public string HolaMundo()
    {
        return "Hola, mundo";
    }
}

Spring Boot puede ser más complejo al principio, pero te da más control y flexibilidad a largo plazo.

HolaController.java

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HolaController {

    @GetMapping("/hola")
    public String holaMundo() {
        return "Hola, mundo";
    }
}

Veredicto final

.Net es una tecnología que cuenta con el respaldo de Microsoft y posee una compatibilidad con Azure de manera natural. Sin embargo, Java es el lenguaje más usado en entornos empresariales y eso otorga a Spring Boot cierta ventaja en el mercado laboral.

Si fueses un programador que necesita consolidarse y "agarrar un puesto" en el mundo de la tecnología web. Spring Boot sería el ideal.

Aunque ASP .Net Core ha ido robando terreno y le pisa los talones a otras herramientas como Spring Boot y podría dar la sorpresa de ganarle algunas áreas como el ámbito gubernamental. En el mundo del IT nada está escrito.

Enlaces:

https://dotnet.microsoft.com/es-es/apps/aspnet
https://www.arquitecturajava.com/spring-boot-que-es/
https://azure.microsoft.com/es-mx/resources/cloud-computing-dictionary/what-is-java-spring-boot
https://codemonkeyjunior.blogspot.com/2025/08/programando-en-c-no-9-usando-nuget.html
https://codemonkeyjunior.blogspot.com/2019/06/instalar-paquetes-nuget-con-dotnet.html
https://codemonkeyjunior.blogspot.com/2019/05/crear-una-aplicacion-web-con-asp-net.html






lunes, 2 de junio de 2025

Un vistazo a Apache Struts Framework

Apache Struts es un framework MVC gratuito y de código abierto para crear aplicaciones web Java elegantes y modernas.

Prioriza las convenciones sobre la configuración, es extensible mediante una arquitectura de plugins e incluye plugins compatibles con REST, AJAX y JSON.

Es utilizado para desarrollar aplicaciones web basadas en la arquitectura MVC (Modelo-Vista-Controlador).

Struts fue muy popular antes de la llegada de Spring Framework y sobre todo de Spring Boot. Sin embargo, debido a su gran rendimiento aún es usado en muchas empresas.

Requerimientos:

  • JDK 8 o superior. 
  • Apache Maven 3.8.6 o superior. 
  • Tener nociones de Java y JSP.
  • Se puede usar un IDE como Eclipse, Visual Studio Code o cualquier otro.
  • Sirve de mucho conocer algo de Spring Boot.

Nosotros usaremos la terminal para crear y ejecutar el proyecto.

Creando nuestra primera aplicación con Apache Struts2

Vamos a crear una sencilla aplicación de "Hola, mundo".

Creamos el proyecto Apache Struts2 con Maven y nos ubicamos en el directorio creado:

$ mvn archetype:generate -B 
  -DgroupId=org.cursomaven 
  -DartifactId=auditor -DarchetypeGroupId=org.apache.struts  
  -DarchetypeArtifactId=struts2-archetype-blank 
  -DinteractiveMode=false
$ cd auditor 

Abrimos el proyecto. Tendrá más o menos está estructura de carpetas:

auditor/ 
   pom.xml
   src/
     main/
       webapp/
          index.html
          WEB-INF/
           example/
           web.xml 
       resources/
          example.xml
          log4j2.xml
          struts.xml
       java/

Debemos eliminar los archivos innecesarios como: Login.java, HelloWorld.java, ExampleSupport.java. Esto para que solo quede una nueva clase llamada HolaMundo.java. Esto en la carpeta de java/org/cursomaven/example:

package org.cursomaven.example;


import com.opensymphony.xwork2.ActionSupport;


public class HolaMundo extends ActionSupport{

    public String execute() throws Exception {
        setMessage(getText(MESSAGE));
        return SUCCESS;
    }

    public static final String MESSAGE = "HolaMundo.message";
    
   
    private String message;

   
    public String getMessage() {
        return message;
    }

  
    public void setMessage(String message) {
        this.message = message;
    }
}

Tambien eliminaremos las páginas JSP del directorio webapp/WEB-INF/example. Esto para que solo quede una página JSP llamada HolaMundo.jsp

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
    <title><s:text name="HolaMundo.message"/></title>
</head>

<body>
<h2><s:property value="message"/></h2>

</body>
</html>

Editamos los archivos: package.properties y example.xml. Los cuales se encuentran en los directorios src/main/resources y src/main/resources/org/cursomaven/example

package.properties

server.port= 8081
HolaMundo.message =Bienvenido a ApacheStruts2.

example.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
<!-- 
  - This file is included by the struts.xml file as an example
  - of how to break up the configuration file into multiple files.
-->
<struts>
    <package name="example" namespace="/example" extends="struts-default">

        <default-action-ref name="HolaMundo" />

        <action name="HolaMundo" class="org.cursomaven.example.HolaMundo">
            <result>/WEB-INF/example/HolaMundo.jsp</result>
        </action>


        <!-- Add additional "example" package actions here. -->

    </package>
</struts>

Tambien editamos el archivo XML struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="false"/>
    <constant name="struts.devMode" value="true"/>

    <include file="example.xml"/>

    <package name="default" namespace="/" extends="struts-default">

        <default-action-ref name="index"/>

        <action name="index">
            <result type="redirectAction">
                <param name="actionName">HolaMundo</param>
                <param name="namespace">/example</param>
            </result>
        </action>

    </package>

    <!-- Add addition packages and configuration here. -->
</struts>

Construimos con Maven:

$ mvn clean install -X

Ejecutamos con el servidor emembido Jetty:

$ mvn jetty:run -Djetty.port=8081

Abrimos el navegador en la dirección:

http://localhost:8081/auditor/example/HolaMundo

¡Hemos creado nuestra primera aplicación con Apache Struts2!

Continuaremos con esta serie sobre Frameworks web en próximas entregas.

Enlaces:

https://struts.apache.org/index.html

viernes, 26 de abril de 2019

What is AngularJS ? ... What do you eat this with?

AngularJS es un framework pensado para crear aplicaciones SPA (aplicaciones de una sola página).  Se puede combinar con NodeJS, MongoDB y Express JS. Formando así el MEAN (MongoDB + Express JS + Angular + Node JS).

 ¿Por qué usarlo?
  • Es bueno usarlo en desarrollos web dinámicos pues ofrece herramientas para el acceso a los datos y no sólo de manipulación del DOM de la página.
  • Emplea el Modelo Vista Vista-Modelo.
  • Mejora el rendimiento y las pruebas.
  • ¿Necesito saber DOM, Javascript, jQuery? Mejor enfócate  en el rendimiento de la aplicación.
  • Etc.



¿En serio no necesito saber Javascript y/o jQuery?
Sí, debes tener bases de Javascript y no, no es necesario saber jQuery. AngularJS se enfoca más en el rendimiento y las pruebas y no se preocupa mucho por la manipulación del DOM.

¿Cómo trabaja AngularJS?
AngularJS permite ampliar el vocabulario HTML, pues el HTML puro es insuficiente para ofrecer contenido dinámico.

Modelo + Plantilla   ------- { AngularJS } -----  HTML


Algunos conceptos de AngularJS

Directiva: son atributos que se agregan a los elementos HTML, por lo regular comienzan con ng-.
Módulo: podemos verlo como un paquete en java.
Controlador: es el nombre de una función que se ejecuta cuando se carga el código html que tiene la directiva ng-controller.
$scope: es la variable de AngularJS donde se guarda toda la información de Javascript de la página.
Angular sólo muestra en el HTML mediante {{ }} el valor de las variables definidas en $scope, no de todas las variables.
$rootScope: es el scope del que heredan los demás scopes, una variable o función agregada a él es accesible por todos los controladores.

Directivas. 
ng-model: asocia el valor de una variable con el elemento HTML.
ng-show: permite que un elemento de la página se haga visible.
ng-repeat: hace un ciclo sobre un objeto.
ng-bind: enlaza un valor del scope con un elemento html sin necesidad de {{ }}

Módulos. 
Un módulo como un paquete en Java, aquí se agregarán artefactos que podemos usar en otros lados.

Los Artefactos que pueden ir dentro de un módulo son:
  • Controladores. 
  • Directivas. 
  • Filtros. 
  • Constantes. 
  • Config. 
  • Run. 
  • Etc. 
Un módulo puede depender de otros, para eso se usan los corchetes [].

Servicio $http.
Un servicio no tiene relación directa con la página, más bien, es un objeto Javascript que nos permite obtener información. El servicio $http nos permite hacer peticiones AJAX a un servidor. Ejemplo, ocuparlo para hacer peticiones Webservices enviándole algunos parámetros y obteniendo los datos solicitados. Un Webservice podría hacer la función de controlador (hablando en términos de Java).

Servicio $routeProvider.
El servicio tiene dos métodos:
  1. when: Asocia una ruta con una página HTML. 
  2. otherwise: Indica a qué ruta debemos redirigirnos cuando hay una ruta desconocida. 

El código de la página se agregará dónde coloquemos el siguiente elemento. El servicio $location ayuda a definir el path al que queremos ir. Para que funcione, se debe agregar a nuestro módulo el módulo ng-route con su respectivo archivo js.

sábado, 28 de enero de 2012

Frameworks… Spring Framework

Es un framework para desarrollo en Java. Su misión es  hacer de la programación Java algo más sencillo de realizar. Es un "contenedor de objetos" (beans) como alternativa a EJB; normalmente usa archivos xml para definir los beans.

Tipos de inyección de dependencias:


  1. en las propiedades usando set
  2. o directamente usando un constructor
  3. en interfaces (no usado)


Además nos permite integrar otras tecnologías (GWT, Hibernate,JSF, etc.). Permite el testeo de las clases (pruebas unitarias, TDD,etc.) y otras cosas más.

1. Este es un ejercicio sencillo: el famoso Hola mundo !!


ServicioHola.java
package org.springpruebas.prueba01;

/**
 *
 * @author yo
 */
public interface ServicioHola {
   public abstract void decirHola();
}

ServicioHolaImpl.java
package org.springpruebas.prueba01;

/**
 *
 * @author yo
 */
public class ServicioHolaImpl implements ServicioHola {

  private String greeting;

  public  ServicioHolaImpl  () {}
  
  public  ServicioHolaImpl  (String saludo) {
    this.saludo = saludo;
  }
  public void decirHola() {
    System.out.println(saludo);
  }
  public void setSaludo(String saludo) {
    this.saludo = saludo;
  }

}

context.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
    "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>

  <!-- para el ejemplo de HolaApp.java -->
  <bean id="holaServicio"
      class="org.springpruebas.prueba01.ServicioHolaImpl">
    <property name="saludo">
      <value>Hola mundo!!</value>
    </property>
  </bean>
  <!-- para el ejemplo de HolaApp.java -->

</beans>


HolaApp.java
package org.springpruebas.prueba01;



import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
 *
 * @author yo
 */
public class HolaApp {
   public static void main(String[] args) throws Exception {

 ApplicationContext  application= new ClassPathXmlApplicationContext("context.xml");

 ServicioHola holaServicio =(ServicioHola) application.getBean("holaServicio");
    holaServicio.decirHola();
  }
}

Salida (en Netbeans):

Hola mundo!!
BUILD SUCCESSFUL (total time: 0 seconds)

Jai un lenguaje de programación inspirado en C++

Hoy hablaremos de un nuevo lenguaje de programación llamado Jai . Se trata de un lenguaje de programación que está desarrolland...

Etiquetas

Archivo del blog