Introducción al servidor web simple de Java

Blog

HogarHogar / Blog / Introducción al servidor web simple de Java

Sep 02, 2023

Introducción al servidor web simple de Java

Por Matthew Tyson Arquitecto de software, InfoWorld | Una de las funciones nuevas más útiles incluidas en la versión Java 18 (marzo de 2022) fue el nuevo servidor web simple, que facilita la puesta en marcha y

Por Matthew Tyson

Arquitecto de software, InfoWorld |

Una de las nuevas funciones más útiles incluidas en la versión Java 18 (marzo de 2022) fue el nuevo servidor web simple, que facilita la puesta en marcha y la configuración de un servidor de archivos HTTP. También expone una API que amplía el paquete httpserver existente para crear casos de uso simples. El nuevo Simple Web Server es una herramienta útil que todo desarrollador de Java debería tener en su bolsa de trucos. ¡Vamos a ver!

El nuevo comando jwebserver de Java simplifica la ejecución de un servidor web básico. Es análoga a la popular herramienta SimpleHTTPServer en el mundo Python.

El primer paso es asegurarse de estar ejecutando Java 18 o una versión posterior. Escriba java --version para saber qué versión está ejecutando actualmente. Recomiendo usar SDKMan para administrar las instalaciones de JDK. Es especialmente útil para hacer malabarismos con múltiples versiones.

Lo más básico que puede hacer con Java Simple Web Server es servir el directorio actual en el puerto 8000. Simplemente ingrese el comando que se muestra en el Listado 1.

Desde allí, si va a su navegador y visita localhost:8000, verá una lista del sistema de archivos, como se muestra en la Figura 1.

Hay varias cosas comunes que quizás deba hacer para ajustar Simple Web Server en la línea de comandos. Por ejemplo, puede cambiar el puerto, la dirección a la que vincularse (la interfaz de red para escuchar) y el directorio a servir.

En el Listado 2, puede ver cómo escuchar en el puerto 8080, en todas las interfaces y en el directorio /foo/bar.

Como puede ver, la herramienta de línea de comandos jwebserver permite servir archivos estáticos utilizando la sintaxis más simple posible. A continuación, veremos la API del servidor web simple.

El Javadoc de servidor web simple es un buen punto de partida para aprender sobre la API. La clase SimpleFileServer existe en el paquete com.sun.net.httpserver. (Este paquete también alberga las API más antiguas y de bajo nivel para crear servidores web. El paquete httpserver extiende esa funcionalidad para requisitos más simples). La herramienta CLI jwebserver usa SimpleFileServer para hacer su trabajo, y también podemos usarlo mediante programación.

La clase SimpleFileServer solo maneja GET y HTTP/1.1. Aunque podemos hacer algunas cosas interesantes con él. Por ejemplo, esta introducción al trabajo con Simple Web Server sugiere una forma de utilizar el proyecto de sistema de archivos en memoria de Google Java para falsificar un sistema de archivos para el controlador.

Usaremos la idea de un sistema de archivos en memoria para modificar FileHandler en SimpleFileServer para que en realidad sirva un sistema de archivos virtual desde la memoria. Luego, usaremos el paquete httpserver para manejar una POST y agregar un archivo falso al sistema de archivos falso.

Para comenzar, creemos un proyecto Maven rápido usando el siguiente comando:

Ahora, ingrese al nuevo directorio /jsws.

Establezca las versiones del compilador y del código fuente en 18 en pom.xml, como se describe aquí.

A continuación, agregue Google jimfs a las dependencias, como se muestra en el Listado 3.

Ahora, podemos modificar el archivo src/main/java/App.java para servir un sistema de archivos falso. Puede ver el código para hacer esto en el Listado 4.

La idea en el Listado 4 es simular la API del sistema de archivos local estándar utilizando la biblioteca jimfs de código abierto de Google, que implementa la API java.nio.file pero hace todo en memoria, como un sistema de archivos virtual. Con la biblioteca, puede definir sus propias rutas de directorio y archivos mediante programación. Entonces, creamos nuestra propia estructura de directorio virtual y se la entregamos a SimpleFileServer como controlador de archivos.

Configuramos la clase SimpleFileServer mediante programación:

Esto acepta la dirección de Internet a la que vincularse, tal como vimos en la línea de comando. En este caso, pasamos la interfaz no especificada y el puerto 8080. Después de eso viene la raíz del sistema de archivos. Para este ejemplo, le daremos el objeto Path creado por nuestro método createDirectoryHierarchy().

El método createDirectoryHierarchy() usa jimfs para construir un objeto Path: FileSystem fs = Jimfs.newFileSystem(Configuration.unix());. Luego completa la ruta con archivos y directorios. La API de jimfs para crear rutas y archivos con contenido no es difícil de entender; por ejemplo, creamos uno con Path hello = foo.resolve("hello.txt");. Puede utilizar la mayoría de los objetos como si fueran rutas normales de Java NIO.

Ahora, si ejecutamos este código y visitamos localhost:8080, verá la lista del directorio y podrá explorarlo y ver el contenido del archivo, tal como lo haría con un servidor de archivos normal.

Llevemos esta idea un paso más allá y agreguemos la posibilidad de cargar un archivo nuevo. Podemos usar el paquete com.sun.net.httpserver para aceptar una solicitud POST que cargará un nuevo archivo en nuestro sistema de archivos en memoria. Puedes ver esto en el Listado 5.

En el Listado 5, mantenemos la mayor parte de la clase igual, pero en una instancia de HttpServer escuchando en el puerto 8081. Esto se configura con nuestro uploadHandler personalizado, que toma los datos cargados y los usa para escribir un nuevo archivo en la ruta raíz que creado en createDirectoryHierarchy.

Para probar esto, podemos ejecutar todo el clúster de servidores con:

Puede enviar un archivo nuevo al servidor con una solicitud CURL como la del Listado 6.

Cuando vuelva a cargar los listados de archivos localhost:8080/, verá el nuevo archivo.txt y podrá hacer clic en él y ver su contenido.

Simple Web Server es una adición bienvenida al conjunto de herramientas de Java. No sólo simplifica mucho el alojamiento de archivos con la CLI, sino que también introduce algunas posibilidades interesantes con su API, especialmente cuando se utiliza junto con la API HttpServer de nivel inferior.

Para obtener más información, consulte estos recursos adicionales:

A continuación lee esto:

Matthew Tyson es fundador de Dark Horse Group, Inc. Cree en la tecnología que da prioridad a las personas. Cuando no toca la guitarra, Matt explora el interior del país y el interior filosófico. Ha escrito para JavaWorld e InfoWorld desde 2007.

Copyright © 2023 IDG Communications, Inc.

A continuación lee esto: