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!