Introducción al desarrollo web con Java
Introducción
El desarrollo web con Java representa una de las aplicaciones más importantes y extendidas de este lenguaje de programación. Java no solo es un lenguaje versátil para aplicaciones de escritorio, sino que cuenta con un robusto ecosistema de tecnologías, frameworks y herramientas específicamente diseñadas para crear aplicaciones web empresariales escalables y seguras. En este artículo exploraremos cómo Java se ha posicionado como una opción de referencia en el desarrollo web, qué tecnologías componen su ecosistema web y cómo se estructura una aplicación web típica en Java.
Al finalizar esta lectura, tendrás una visión clara de las posibilidades que ofrece Java para el desarrollo web, conocerás la arquitectura básica de las aplicaciones web Java y estarás preparado para adentrarte en los componentes específicos como Servlets, JSP y frameworks más avanzados que veremos en los próximos artículos.
El ecosistema Java para desarrollo web
Java EE/Jakarta EE: La base empresarial
Java Enterprise Edition (Java EE), ahora conocido como Jakarta EE tras su transferencia a la Fundación Eclipse, es un conjunto de especificaciones que extienden Java SE para el desarrollo de aplicaciones empresariales, con especial énfasis en aplicaciones web.
Entre sus componentes fundamentales encontramos:
- Servlets: La tecnología base para procesar peticiones HTTP
- JSP (JavaServer Pages): Para crear vistas dinámicas
- EJB (Enterprise JavaBeans): Para la lógica de negocio
- JPA (Java Persistence API): Para el acceso a bases de datos
- JAX-RS: Para el desarrollo de servicios REST
// Ejemplo básico de un Servlet
package com.miweb.servlets;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/saludo")
public class SaludoServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (var out = response.getWriter()) {
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Mi primera aplicación web Java</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>¡Hola desde Java Web!</h1>");
out.println("</body>");
out.println("</html>");
}
}
}
Servidores de aplicaciones y contenedores web
Para ejecutar aplicaciones web Java necesitamos un servidor que implemente las especificaciones de Jakarta EE. Existen dos categorías principales:
-
Servidores de aplicaciones completos: Implementan todas las especificaciones de Jakarta EE
- GlassFish
- WildFly (anteriormente JBoss)
- WebSphere Liberty
- Payara
-
Contenedores web ligeros: Implementan solo las especificaciones web básicas
- Tomcat
- Jetty
- Undertow
La elección dependerá de las necesidades del proyecto. Los contenedores ligeros son más sencillos de configurar y suficientes para muchas aplicaciones, mientras que los servidores completos ofrecen más funcionalidades para aplicaciones empresariales complejas.
Frameworks web modernos
Aunque las tecnologías estándar de Jakarta EE son potentes, los frameworks modernos simplifican enormemente el desarrollo:
- Spring Framework: El más popular, con Spring MVC y Spring Boot
- JSF (JavaServer Faces): Estándar de Jakarta EE para aplicaciones web basadas en componentes
- Struts: Uno de los primeros frameworks MVC para Java
- Play Framework: Enfocado en aplicaciones web reactivas
- Vaadin: Para crear interfaces de usuario web sin escribir HTML/JavaScript
// Ejemplo de un controlador REST con Spring Boot
package com.miapp.controladores;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class SaludoController {
@GetMapping("/api/saludo")
public String saludo() {
return "¡Hola desde Spring Boot!";
}
}
Arquitectura de una aplicación web Java
El patrón MVC
La mayoría de las aplicaciones web Java siguen el patrón de diseño Modelo-Vista-Controlador (MVC), que separa:
- Modelo: Representa los datos y la lógica de negocio
- Vista: La interfaz de usuario (páginas JSP, plantillas Thymeleaf, etc.)
- Controlador: Procesa las peticiones y coordina modelo y vista (Servlets, controladores de Spring MVC)
Esta separación facilita el mantenimiento y la evolución de la aplicación.
Capas típicas
Una aplicación web Java bien estructurada suele dividirse en capas:
- Capa de presentación: Interfaz de usuario (HTML, CSS, JavaScript, JSP)
- Capa de controladores: Procesa peticiones HTTP
- Capa de servicios: Lógica de negocio
- Capa de acceso a datos: Interacción con la base de datos
- Capa de entidades/modelos: Objetos que representan datos del dominio
// Ejemplo simplificado de estructura en capas
// 1. Entidad
package com.miapp.entidades;
public class Usuario {
private Long id;
private String nombre;
private String email;
// Getters y setters
}
// 2. Repositorio (acceso a datos)
package com.miapp.repositorios;
import com.miapp.entidades.Usuario;
import java.util.List;
public interface UsuarioRepositorio {
Usuario buscarPorId(Long id);
List<Usuario> listarTodos();
void guardar(Usuario usuario);
}
// 3. Servicio (lógica de negocio)
package com.miapp.servicios;
import com.miapp.entidades.Usuario;
import com.miapp.repositorios.UsuarioRepositorio;
public class UsuarioServicio {
private UsuarioRepositorio repositorio;
public Usuario obtenerUsuario(Long id) {
// Posible lógica adicional
return repositorio.buscarPorId(id);
}
}
// 4. Controlador (manejo de peticiones)
package com.miapp.controladores;
import com.miapp.entidades.Usuario;
import com.miapp.servicios.UsuarioServicio;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
@WebServlet("/usuarios/*")
public class UsuarioServlet extends HttpServlet {
private UsuarioServicio servicio;
// Implementación de métodos doGet, doPost, etc.
}
Despliegue de aplicaciones web Java
Las aplicaciones web Java se empaquetan tradicionalmente en archivos WAR (Web Application Archive) o EAR (Enterprise Application Archive) que contienen todos los recursos necesarios:
- Clases Java compiladas (.class)
- Librerías dependientes (JAR)
- Recursos web (HTML, CSS, JavaScript)
- Archivos de configuración (web.xml, persistence.xml)
Este paquete se despliega en un servidor de aplicaciones. Con Spring Boot, también es posible crear aplicaciones "fat JAR" autocontenidas con un servidor embebido.
El ciclo de vida de una petición web en Java
Comprender cómo se procesa una petición HTTP nos ayuda a entender mejor el desarrollo web con Java:
Este flujo es la base de toda aplicación web Java, aunque frameworks como Spring añaden capas adicionales para facilitar el desarrollo.
Preparando el entorno de desarrollo
Para comenzar con el desarrollo web en Java, necesitarás:
- JDK 21 o superior
- Un IDE: Eclipse, IntelliJ IDEA o NetBeans (todos tienen buen soporte para desarrollo web)
- Un servidor: Tomcat, Jetty o un servidor de aplicaciones completo
- Herramienta de construcción: Maven o Gradle
La mayoría de IDEs modernos permiten integrar servidores para facilitar el desarrollo y depuración.
Creando un proyecto web básico
Con Maven, puedes crear un proyecto web usando el arquetipo webapp:
mvn archetype:generate \
-DgroupId=com.miproyecto \
-DartifactId=miwebapp \
-DarchetypeArtifactId=maven-archetype-webapp \
-DinteractiveMode=false
Esto genera una estructura básica que puedes ampliar. Con Spring Boot es aún más sencillo, usando Spring Initializr (https://start.spring.io).
Tendencias actuales en el desarrollo web con Java
El ecosistema Java continúa evolucionando para adaptarse a las tendencias modernas:
- Microservicios: Spring Boot y Jakarta EE MicroProfile
- APIs RESTful: JAX-RS, Spring WebFlux
- Aplicaciones reactivas: WebFlux, Project Reactor
- Cloud-native: Soporte para despliegue en contenedores y Kubernetes
- Serverless: Frameworks como Quarkus y Micronaut optimizados para este entorno
// Ejemplo de endpoint REST reactivo con Spring WebFlux
import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Flux;
@RestController
public class ProductoController {
@GetMapping("/productos")
public Flux<Producto> listarProductos() {
return servicioProducto.obtenerTodos();
}
}
Resumen
El desarrollo web con Java ofrece un ecosistema maduro y robusto de tecnologías que permite crear desde simples aplicaciones web hasta complejos sistemas empresariales. La base de este ecosistema es Jakarta EE (anteriormente Java EE), que proporciona especificaciones estándar como Servlets y JSP, mientras que frameworks como Spring simplifican enormemente el desarrollo. La arquitectura típica sigue el patrón MVC con una clara separación en capas, lo que facilita el mantenimiento y la escalabilidad.
En los próximos artículos profundizaremos en los componentes específicos como Servlets, JSP y frameworks modernos que te permitirán construir aplicaciones web robustas y profesionales con Java. La combinación de la robustez de Java con las herramientas específicas para la web te abrirá un amplio abanico de posibilidades en el desarrollo de aplicaciones empresariales.