
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!
