Icono del sitio BorrowBits

¿Cómo hacer un Servidor HTTP sencillo?

Servidor HTTPSi estás desarrollando una aplicación destinada a la gestión de contenidos o al intercambio de información entre usuarios, puede que hayas tenido la necesidad de tener uno o varios servidores atendiendo las peticiones de los usuarios como parte de tu aplicación. Si no necesitas mucha complejidad en la parte del servidor y quieres integrarlo en tu propia aplicación te propongo una posible solución gracias a Java. Consiste en la librería com.sun.net.httpserver, con la que podrás configurar casi a tu antojo un servidor HTTP totalmente funcional.

El primer paso es descargarte la librería de aquí.

¿Cómo implementarlo? Iremos desglosando el código poco a poco.

En el ejemplo vamos a utilizar las siguientes librerías:

import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;

Para el servidor tenemos que crear un objeto de la clase HttpServer, en nuestro caso se llamará server.

public class HttpServidor {
      private static HttpServer server;
      static int puerto;
      InetSocketAddress addr;

El servidor estará escuchando en el puerto que le indiquemos (comprobad que no vais a utilizar un puerto que ya esté siendo usado, como por ejemplo el 80).

Este podría ser un ejemplo de un constructor sencillo de la clase:

public HttpServidor(int port) {
      puerto = port;
try {
      server = HttpServer.create(new InetSocketAddress(puerto), 0);
} catch (IOException e) {
     e.printStackTrace();
}

El siguiente paso será crear un «contexto», es decir, la ruta a la que va asociada la petición HTTP. Pongamos un ejemplo con este blog: nuestro servidor web no te mostrará lo mismo si la petición (lo que pones en la barra de direcciones del navegador) es https://borrowbits.com/ o si le pones https://borrowbits.com/consultor-virtual/. El contexto en este último caso sería «/consultor-virtual», accediendo a un contenido diferente al que hay en la página principal. Podremos crear tantos contextos como queramos.

Para cada contexto habrá que crear un «manejador» o handler que atenderá las peticiones de los clientes que accedan a ese contexto para enviarles su solicitud.

server.createContext("/contexto", new contextoHandler());
server.setExecutor(null);
server.start();
}

Con esto ya tendríamos nuestro servidor funcionando y listo para atender las peticiones de los posibles clientes.

Ahora nos queda implementar nuestros contextos. Un ejemplo de un contexto al que nuestros clientes accederían podría ser: http://localhost:puerto/contexto.

static class contextoHandler implements HttpHandler {
        @SuppressWarnings("unused")
        public void handle(HttpExchange t) throws IOException {
           InputStream is = null;
           OutputStream os = null;
           //Leemos request
           is=t.getRequestBody();
           String response=”Esta es la respuesta que envía el Servidor”;
           //Enviamos response
           t.sendResponseHeaders(200,response.length());
           os = t.getResponseBody();
           os.flush();
           os.write(response.getBytes("UTF-8"));
           os.close();
           t.close();
}
}

Básicamente lo que hace es escuchar la petición (request) y procesarla (con un InputStream) y luego envía una respuesta (response), con una cabecera válida HTTP, al cliente que realizó la petición (con un OutputStream).

Para entrar en detalle y ver como configurar la cabecera, añadir autenticación y personalizarlo en base a vuestras necesidades lo mejor es consultar la documentación de Java.

Espero que os haya sido útil. Cualquier duda, ¡No dudéis en preguntarla!

Salir de la versión móvil