Créer un serveur HTTP avec Java

Quand on parle de serveur Java, tout le monde se met à penser Apache Tomcat, WildFly, JBoss, GlassFish, Servlet... Tous ces framewroks et outils sont très lourds et demandent beaucoup de configurations.

En fait, nous ne sommes pas obligés de passer par ces outils pour construire un petit serveur.

Dans cet article, je vais vous montrer comment programmer un serveur avec Java sans outils supplémentaires. Simple et rapide.

Création d'un serveur et de son contexte

Pour créer un serveur, nous allons utiliser la classe HttpServer. Je vous invite à consulter la documentation de la classe HttpServer

Il faut créer le serveur, créer un contexte et enfin démarrer le serveur.

Le contexte, c'est simplement le chemin que vous voulez après le nom de d'hôte. Par exemple : 127.0.0.1:8000/test

Remarque : J'utilise le port 8000 ici

HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
server.createContext("/test", new CustomHandler());
server.start();

Création d'un Handler

Un Handler permet de gérer l'action lorsqu'un utilisateur se connectera à l'adresse.

Il faut créer une classe qui implémente HttpHandler et écrire la fonction handle.

La fonction handle prend en paramètre l'objet HttpExchange. Cet objet est la représentation de la requête et de la réponse du protocole HTTP.

Vous pouvez visiter la page de documentation de la classe HttpExchange

class CustomHandler implements HttpHandler {

  @Override
  public void handle(HttpExchange exchange) throws IOException {
    String requestMethod = exchange.getRequestMethod();

    String query = exchange.getRequestURI().getQuery();

    String response = "<b>Bonjour !</b></br>Méthode : " + requestMethod + "</br>" + "Requête : " + query;
    exchange.sendResponseHeaders(200, response.length());
    OutputStream os = exchange.getResponseBody();
    os.write(response.getBytes());
    os.close();
  }

}

J'obtiens la méthode (POST ou GET... etc) et la requête grâce à l'objet HttpExchange.

J'utilise le code 200 pour confirmer que tout s'est bien passé. et j'écris la réponse dans la page grâce à OutputStream.

Code complet

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;

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

public class Main {

 public static void main(String[] args) throws IOException {
  HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
  server.createContext("/test", new CustomHandler());
  server.start();
 }
}

class CustomHandler implements HttpHandler {

 @Override
 public void handle(HttpExchange exchange) throws IOException {
  String requestMethod = exchange.getRequestMethod();

  String query = exchange.getRequestURI().getQuery();

  String response = "<b>Bonjour !</b></br>Méthode : " + requestMethod + "</br>" + "Requête : " + query;
  exchange.sendResponseHeaders(200, response.length());
  OutputStream os = exchange.getResponseBody();
  os.write(response.getBytes());
  os.close();
 }

}

Conclusion

Le paquet httpserver permet de programmer un serveur sans outils externes. En évitant les configurations et l'installation de ces outils, on gagne du temps.

Sur un projet où on a besoin d'un serveur HTTP simple, cette solution est efficace.

Cependant, cette solution à ses limites. Si le projet est conséquent, l'utilisation des outils évoqués en introduction est nécessaire pour progresser plus rapidement et éviter de réinventer la roue.

Commentaires