Semana Anterior Semana Siguiente

Semana 9

Desarrollo Web Backend - Stack: Java-SPRING

Temas Aprendidos

Backend Java JSP Jakarta Spring

Esta semana aprendí sobre el desarrollo de aplicaciones web backend utilizando Java, JSP y los frameworks Jakarta EE y Spring. Exploré la arquitectura de los servidores web y el funcionamiento del backend en Java, comprendiendo cómo crear aplicaciones dinámicas que interactúan con bases de datos. También aprendí a desplegar estas aplicaciones en diferentes entornos de servidor, configurando servidores como Apache Tomcat para asegurar el correcto funcionamiento de las aplicaciones web construidas con estas tecnologías.

Ejercicios y Resultados

Aplicación Web JSP - Calculadora de Factorial

Sistema JSP que calcula el factorial de un número utilizando sesiones

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Cálculo del factorial</title> </head> <body> <h1>Cálculo del factorial</h1> <form action="factorial.jsp" method="get"> <p>Número: <input type="text" name="numero"> <input type="submit" value="Calcular"></p> </form> <% String numeroGet = request.getParameter("numero"); if(numeroGet != null) { int numero = 0; double factorial = 1; boolean error = false; try { numero = Integer.valueOf(numeroGet); if(numero < 1) { error = true; } else { for(int i = numero; i > 1; i--) { factorial *= i; } } } catch(NumberFormatException e) { error = true; } if(error) { out.println("<p style='color:red;'>Debe indicar un número entero mayor que 0</p>"); } else { out.println("<p style='color:green;'>Resultado: " + numero + "! = " + factorial + "</p>"); } } // Contador de sesión Integer contador = (Integer)session.getAttribute("contadorVisitas"); if(contador == null) { contador = 0; } if(contador > 0) { out.println("<p>Ejecuciones en esta sesión: " + contador + "</p>"); } contador++; session.setAttribute("contadorVisitas", contador); %> </body> </html>

Simulador de Factorial JSP

Resultado del factorial:
Ingrese un número para calcular
Ejecuciones en esta sesión: 0

API REST con Java Spring - Gestión de Estudiantes

API REST que valida ID y notas de estudiantes con Spring Boot

package com.example.student.controller; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.Map; @RestController @RequestMapping("/api") public class StudentController { @GetMapping("/student/{id}/{nota}") public ResponseEntity<Map<String, Object>> validateStudent( @PathVariable String id, @PathVariable String nota) { Map<String, Object> response = new HashMap<>(); try { int studentId = Integer.parseInt(id); double studentNota = Double.parseDouble(nota); if (studentId > 0 && studentNota >= 0 && studentNota <= 20) { response.put("id", studentId); response.put("nota", studentNota); response.put("mensaje", "Ruta válida - Datos correctos"); response.put("estado", 202); return new ResponseEntity<>(response, HttpStatus.ACCEPTED); } else { response.put("error", "ID debe ser mayor a 0 y nota entre 0-20"); return new ResponseEntity<>(response, HttpStatus.BAD_REQUEST); } } catch (NumberFormatException e) { response.put("error", "ID y nota deben ser números válidos"); return new ResponseEntity<>(response, HttpStatus.BAD_REQUEST); } } @GetMapping("/student/{id}") public ResponseEntity<Map<String, Object>> calculateAverage( @PathVariable String id, @RequestParam("nota1") String nota1, @RequestParam("nota2") String nota2, @RequestParam("nota3") String nota3) { Map<String, Object> response = new HashMap<>(); try { int studentId = Integer.parseInt(id); double n1 = Double.parseDouble(nota1); double n2 = Double.parseDouble(nota2); double n3 = Double.parseDouble(nota3); double promedio = (n1 + n2 + n3) / 3; response.put("id", studentId); response.put("nota1", n1); response.put("nota2", n2); response.put("nota3", n3); response.put("promedio", Math.round(promedio * 100.0) / 100.0); response.put("mensaje", "Ruta válida - Promedio calculado"); response.put("estado", 202); return new ResponseEntity<>(response, HttpStatus.ACCEPTED); } catch (NumberFormatException e) { response.put("error", "Todos los valores deben ser números válidos"); return new ResponseEntity<>(response, HttpStatus.BAD_REQUEST); } } }

Simulador API REST Spring

Endpoint 1: /student/{id}/{nota}
Endpoint 2: /student/{id}?nota1=x¬a2=x¬a3=x
Respuesta de la API:
Pruebe los endpoints para ver la respuesta JSON

Reflexión Final

Durante esta semana, al explorar el desarrollo backend con Java, JSP, Jakarta EE y Spring, fui consciente de cómo ha evolucionado mi comprensión del desarrollo web completo. Al inicio me resultaba complejo entender cuándo y cómo aplicar cada herramienta o framework, pero con la práctica y la comparación de casos reales, desarrollé una mejor intuición sobre su uso adecuado en distintas situaciones. Esta experiencia me hizo reflexionar sobre la importancia de escribir código limpio, mantenible y escalable en el lado del servidor.

¿Qué aprendí?

Aprendí a desarrollar aplicaciones web backend utilizando Java, JSP, Jakarta EE y Spring, comprendiendo la arquitectura del lado del servidor, el flujo de las peticiones HTTP y cómo gestionar bases de datos de forma eficiente en entornos empresariales.

¿Cómo aprendí?

Aprendí practicando con ejemplos reales, configurando servidores como Tomcat, y analizando cómo se integran estas tecnologías en distintos escenarios de desarrollo, desde aplicaciones web sencillas hasta soluciones más complejas orientadas a servicios.