Skip to main content

Servlet API

Les servlets

La Servlet API est une brique fondamentale de la spécification JavaEE. Elle permet de développer des composants gérant des requêtes HTTP. L'instanciation des servlets n'est pas gérées par le programmeur, mais par ce que l'ont appelle le conteneur de servlets. Il s'agit d'une partie du serveur d'application qui orchestre le cycle de vie des servlets ainsi que les threads nécessaires à la gestion des requêtes.

Pour créer une servlet, il suffit de créer une classe qui étend la classe HttpServlet et de lui affecter l'annotation @WebServlet avec en paramètre la route qui est être gérée par la servlet.

@WebServlet("/helloworld")
public class HelloWorldServlet extends HttpServlet {
    
}

Dans une servlet vous pouvez redéfinir certaines méthodes, notamment doGet et doPost. Ces méthodes sont appelées par le conteneur lorsqu'une requête HTTP est faite sur la route de la servlet. doGet gère les requête avec la méthode HTTP GET et doPost gère les requêtes avec la méthode HTTP POST.

@WebServlet("/helloworld")
public class HelloWorldServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

Les paramètres de cetes méthodes, représentent respectivement la requête HTTP et la réponse HTTP.

Objet requête

Paramètres

L'objet requête permet de récupérer des paramètres soit passés dans l'URL de la requête dans le cas d'une requête HTTP GET, ou paramètres d'un formulaire (passés dans le Body de la requête au format FormData) :

String monParam = request.getParameter("nomDuParam");

Session

L'objet requête permet également de récupérer la session du client. Dans la session, il est possible de stocker des variables et de les récupérer. La session est propre à un client.

// Récupérer la session
HttpSession session = request.getSession();	

// Ecrire une variable dans la session
session.setAttribute("profil", profil);

// Récupérer une variable de session
ProfilUtilisateur profil = (ProfilUtilisateur) session.getAttribute("profil");

Objet réponse

L'objet réponse permet d'écrire du texte dans le Body de la réponse HTTP :

response.getOutputStream().println("Hello world");

Créer un projet Servlet API sur IntelliJ

Créer le projet

Créez un nouveau projet en utilisant le template "Java Entreprise" : Capture d’écran 2020-11-24 194027.png

Faites "suivant". Sur l'écran suivante, dans les dépencances, choisissez la spécifications "Servlets" :

servlet.png

Vous pouvez ensuite nommer votre projet :

Capture d’écran 2020-11-24 194411.png

Vous pouvez désormais cliquer sur "Finish" pour générer votre projet.

Créer une configuration de déploiement du projet

Ajoutez une configuration à partir du template "Tomcat > Local". Puis cliquez sur configure pour ajouter votre serveur d'application :

Capture d’écran 2020-11-25 131925.png

Cliquez ensuite sur "+" et reseignez le répertoire de votre Apache Tomcat téléchargé plus tôt :

Capture d’écran 2020-11-25 132129.png

Confirmez le serveur sur la Configuration, dans la rubrique "Before Launch" click "+" and then "Build Artifact" :

artifact.png

Et ensuite sur l'artefact "WAR Exploded" :

Capture d’écran 2020-11-25 132543.png

Et enfin dans l'onglet "Deployement" de votre Configuration, cliquez sur "+" et ajoutez également l'artefact "WAR Exploded" de la même façon :

Capture d’écran 2020-11-25 132844.png

Première Servlet

Vous pouvez désormais créer une servlet "Hello world" :

@WebServlet("/helloworld")
public class HelloWorldServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getOutputStream().println("Hello world");
    }
}

Ensuite lancez le projet, une page web dans votre navigateur devrait apparaître. Ajoutez /hellowrld à la fin de l'URL et vous devriez voir le message hello world :

Capture d’écran 2020-11-25 134614.png