BorrowBits - ciencia y tecnología
Servidor HTTP

¿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!

Rafa M.

Ingeniero de Telecomunicación, apasionado de la Seguridad Informática.

Un comentario

Suscríbete

¡Sácale el máximo partido a BBits!

Introduce tu dirección de correo electrónico para seguir este Blog y recibir por email las nuevas publicaciones, si has leído y aceptas las Políticas de Privacidad, Cookies y Aviso Legal.

Recíbelo gratis al suscribirte

Webs amigas

  • Frikilogia.- Blog Multi-Tematico orientado a todos los campos del frikismo.
  • Meridiem90.tv.- Mira la TV gratis en HD. Canal Plus y Gol TV, todo el futbol desde tu navegador.
  • JITKey.- Startup enfocada en la gestión de alojamientos turísticos.

Bits del pasado

Síguenos en FB