Librería: HTTP Server

Esta es una pequeña librería que he implementado para Java, la cual permite desplegar un servidor HTTP en cualquier dispositivo que ejecute JVM, permitiendo a sistemas embebidos con recursos limitados o dispositivos móviles que precisen de servicios web, aumentar las posibilidades de comunicación e integración entre sistemas.

Pero dejémonos de palabras y vamos a ver como funciona 🙂

IDE Eclipse – Servidor Web para aplicación de escritorio

  • Primero que nada vamos a crear un nuevo proyecto y añadiremos la librería ‘http-server’ al build path:
Añadir librería al proyecto

En la imagen se muestra la creación del directorio lib y como se ha añadido el jar http-server.1.1.0.jar en el mismo. Finalmente haciendo click derecho sobre el jar se ha seleccionado Build Path > Add To Build Path y así ya está disponible para usarse en nuestro proyecto.

  • A continuación añadimos el contenido de la página que queremos publicar.

De forma homologa como se hace en un «Dynamic web project», reservamos el directorio WebContent para el contenido del sitio web.

Este directorio será la raíz desde la que se atenderán las solitudes de ficheros. Por ejemplo, para atender una petición GET de un navegador en la que se solicita el fichero index.html, el path deberá de ser /miContexto/index.html

Nota: Más adelante se muestra un ejemplo de como registrar los contextos y los ficheros de inicio (i.e. index.html).

  • Por último solo queda escribir el código fuente del programa. 🤓
String host = "127.0.0.1";
int port = 8080;

HttpServer httpServer = new HttpServerImpl(host, port);
WebHandler webHandler = new WebHandler() {
    @Override
    public HttpResponse handleQuery(HttpRequest httpRequest) {
        // Método donde recibiremos las peticiones GET y POST
        // que contengan parámetros, por ejemplo de un formulario
        return HttpResponse.build(Status.NOT_FOUND);
    }

    @Override
    public InputStream toStream(File file) throws Exception {
        return new FileInputStream(file); // Fichero a Stream
    }
};
// Establece el directorio donde están los recursos web
webHandler.setContentFolder("WebContent");
// Registro de contexto de inicio
webHandler.getIndexMap().put("/", "/index.html");
// Establece el HTTP listener, en este caso webHandler
httpServer.setHttpListener(webHandler);
// Conectamos el servidor
httpServer.connect();

try (Scanner scanner = new Scanner(System.in)) {
    System.out.println("Press Enter to exit...");
    scanner.nextLine();
}

Tras la ejecución del código podremos acceder a la página introduciendo en el navegador la URL:

http://localhost:8080

Android Studio – Servidor Web para aplicación móvil

Los pasos a seguir para utilizar la librería en Android son los mismos a excepción de los siguientes puntos:

  • Carga de recursos:

Primero deberemos de almacenar la carpeta WebContent como recurso en nuestro proyecto de Android Studio y modificamos la implementación del método toStream:

@Override
public InputStream toStream(File file) throws Exception {
  ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
  String path = file.getPath();
  return classLoader.getResourceAsStream(path);
}
  • Permisos

Por último recordar que para realizar operaciones de red hay que añadir los siguientes permisos en el archivo AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

Página del proyecto: https://github.com/sergiss/http-server

Como se puede apreciar en el código fuente, la librería no tiene dependencias con otros proyectos y está implementada usando Java puro, permitiendo la compatibilidad con todas las plataformas existentes.

Espero que esta herramienta sirva de ayuda 😉