Nota: Traducido de la versión original en Inglés.
¿Quieres iniciar un servidor HTTP básico para servir los archivos de un directorio en tu máquina usando Java? Si es así, aquí te explico cómo hacerlo.
Disponible desde Java 18#
Un servidor web simple está disponible desde Java 18. Instala tu distribución favorita de JDK 18 o posterior. Si no tienes una favorita, te recomiendo Eclipse Temurin (18 estará disponible poco después de la fecha de publicación de este artículo). También recomiendo usar SDKMAN! si estás en sistemas operativos similares a Linux. Este software hace mucho más fácil manejar múltiples versiones de JDK en la misma máquina. Por ejemplo, para probar Java 18 el mismo día en que se lanzó la implementación de referencia, solo ejecuté lo siguiente:
$ sdk install java 18-open
También puedes instalar otras distribuciones. Consulta las opciones disponibles ejecutando:
$ sdk list java
Verifica que la versión correcta de JDK esté instalada y en uso:
$ java --version
Deberías ver algo como lo siguiente:
openjdk 18 2022-03-22
OpenJDK Runtime Environment (build 18+36-2087)
OpenJDK 64-Bit Server VM (build 18+36-2087, mixed mode, sharing)
Crea un ejemplo de archivo HTML#
Crea un nuevo directorio para alojar los archivos que deseas servir. Aquí está cómo hacerlo usando Linux/macOS:
$ mkdir web-content
Dentro de este directorio, crea un nuevo archivo index.html con el siguiente contenido:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="utf-8">
<title>Servidor HTTP de Java</title>
</head>
<body>
<h1>¡Hola! 👋</h1>
<p>
Este contenido fue servido por el
servidor básico HTTP de Java.
</p>
</body>
</html>
Consejo: Si estás en macOS, puedes copiar el fragmento de código anterior y crear el archivo con el texto copiado usando el siguiente comando: pbpaste > index.html
.
Inicia el servidor#
Inicia el servidor web HTTP:
$ jwebserver
Dirige tu navegador a http://localhost:8000 y mira el archivo HTML renderizado:
Por defecto, el servidor sirve los archivos en el directorio actual usando el puerto 8000. Puedes sobrescribir los valores predeterminados de la siguiente manera:
$ jwebserver -d /ruta/a/algún/directorio/ -p 9999
Esto servirá los archivos en /ruta/a/algún/directorio/ en http://localhost:9999. Asegúrate de usar una ruta absoluta, de lo contrario, aparecerá un error.
Alternativamente, puedes ejecutar el servidor usando el comando java
:
$ java -m jdk.httpserver
Para detener el servidor, presiona CTRL+C en la terminal.
Limitaciones#
Al momento de escribir esto, el servidor web HTTP básico de Java tiene algunas limitaciones:
- No se admite HTTPS
- No se admite HTTP2 (solo HTTP 1.1)
- Solo se admiten los métodos de solicitud HTTP GET y HEAD
Consulta JEP 408: Simple Web Server para más información.
¿Te gustó este artículo? Puedo ayudar a tu equipo a implementar soluciones similares. Contáctame para saber más.