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!
Hola una consulta implemente tu codigo pero no entiendo como debe funcionar tengo que pasarle una URL donde dice contexto ?