Crear un servidor de archivos estáticos en Java usando sockets es una excelente manera de entender los fundamentos de HTTP y la gestión de E/S en red. La idea central consiste en escuchar conexiones entrantes, leer la petición HTTP para identificar el archivo solicitado y devolver su contenido como respuesta HTTP. Si el archivo no existe, se devuelve un 404 Not Found.

Estructura del proyecto: crea un proyecto Java con clases separadas para mantener el código limpio: Main, Server, FileUtil, RequestUtil, ResponseUtil y SystemUtil. Añade una carpeta de recursos normalmente en src/main/resources y dentro de ella una carpeta static que será la raíz para archivos HTML, CSS, imágenes y otros recursos estáticos.

Clase Main: su único propósito es arrancar el servidor. Llama al método run de la clase Server con el puerto deseado, por ejemplo 9090.

Clase Server: es el núcleo. Crea un ServerSocket para escuchar en el puerto, localiza la carpeta static en los recursos y genera un mapa concurrente que asocia rutas relativas solicitadas por el cliente con los Path absolutos en disco. En un bucle infinito acepta conexiones, extrae la URL solicitada con RequestUtil y responde mediante ResponseUtil. Esta separación permite búsquedas rápidas de archivos y un manejo claro de entrada y salida.

FileUtil: recorre recursivamente la carpeta static usando Files.walk y construye un ConcurrentHashMap donde las claves son rutas relativas amigables para URL como index.html o css/style.css y los valores son los Path absolutos. Para construir la clave se normaliza el separador de archivos y se genera una ruta con barras hacia delante.

RequestUtil: lee la primera línea de la petición HTTP entrante y extrae la parte correspondiente a la ruta solicitada. Es suficiente con analizar el primer renglón del encabezado que contiene el método, la ruta y la versión del protocolo.

ResponseUtil: envía la respuesta HTTP al cliente. Primero escribe la línea de estado y los encabezados necesarios, por ejemplo status 200, control de cache y luego una línea en blanco seguida por el contenido del archivo. Implementa sobrecargas para enviar un array de bytes o un Path leído directamente a bytes. Es recomendable añadir encabezado Content Type y Content Length para que el navegador interprete correctamente el recurso.

SystemUtil: simple utilitario que devuelve el nombre del sistema operativo para manejar diferencias en el separador de rutas entre Windows y sistemas Unix like.

Mejoras y consideraciones prácticas: añade detección de tipo MIME para Content Type, maneja streaming de archivos grandes en lugar de leer todo en memoria, incorpora un thread pool para atender múltiples conexiones simultáneas y protege contra path traversal validando y normalizando rutas. También puedes implementar cacheo inteligente y soporte para conexiones persistentes si lo deseas.

Seguridad: valida las rutas solicitadas para evitar accesos fuera de la carpeta static, limita permisos de archivos, y registra solicitudes sospechosas. Para una solución empresarial cuenta con prácticas de ciberseguridad y pruebas de pentesting para endurecer el servidor y sus dependencias.

Ejecutar y probar: lanza la clase Main, verás un mensaje indicando el puerto en consola. Coloca un archivo index.html en la carpeta static y navega a http://localhost:9090/index.html para verificar que el servidor devuelve y renderiza el contenido. Si el recurso no existe, se devolverá un 404 Not Found.

En Q2BSTUDIO transformamos este tipo de soluciones técnicas en proyectos productivos y seguros. Somos una empresa de desarrollo de software que ofrece aplicaciones a medida y software a medida para empresas que necesitan soluciones escalables. Si necesitas desarrollar una aplicación personalizada podemos ayudarte con experiencia en múltiples plataformas y arquitecturas, mira nuestro servicio de desarrollo de aplicaciones y software a medida en desarrollo de aplicaciones multicanal.

Ofrecemos además servicios de inteligencia artificial e integración de agentes IA para automatizar tareas y extraer valor de los datos. Si te interesa aplicar modelos de IA a tus procesos consulta nuestra oferta de inteligencia artificial en soluciones de inteligencia artificial para empresas. También cubrimos ciberseguridad, pentesting y protección de infraestructuras, servicios cloud aws y azure, servicios inteligencia de negocio y visualización con power bi.

Palabras clave y servicios: aplicaciones a medida, software a medida, inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA y power bi son áreas en las que Q2BSTUDIO aporta experiencia y soluciones a la medida de tus necesidades. Si tu proyecto requiere integración con AWS o Azure, o necesitas automatizar procesos y optimizar despliegues cloud, podemos asesorarte y ejecutar la solución.

Resumen final: un servidor estático con sockets en Java es educativo y útil para casos simples. Para producción considera usar un servidor HTTP completo o mejorar la implementación con MIME, streaming, concurrencia y medidas de seguridad. Cuando necesites llevar tu idea a un producto robusto y seguro, Q2BSTUDIO puede acompañarte desde la arquitectura hasta la puesta en marcha y la operación continua.