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
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.