Your browser doesn't support the features required by impress.js, so you are presented with a simplified version of this presentation.

For the best experience please use the latest Chrome, Safari or Firefox browser.

Introduction

  • Les servlets avec Java EE
  • Les servlets avec Spring

Les servlets avec Java EE

La classe HttpServlet

  • GET
  • POST
  • PUT
  • PATCH
  • DELETE
  • HEAD, OPTIONS, CONNECT, TRACE...
public abstract class HttpSerlet extends GenericServlet {

  protected void doGet(...) { ... }

  protected void doPost(...) { ... }

  protected void doPut(...) { ... }

  /*Pas de doPatch() ! Mais vous pouvez l'ajouter vous-même...*/

  protected void doDelete(...) { ... }

  protected void doHead(...) { ... }
  protected void doOptions(...) { ... }
  protected void doTrace(...) { ... }
  //Analyse la requête d'entrée et appelle la bonne méthode doX()
  public void service(...) {...}
}

Servlet avec doGet()

public class HelloServlet extends HttpServlet {
  @Override
  protected void doGet(HttpServletRequest req, 
    HttpServletResponse resp) 
  throws ServletException, IOException {
    resp.setContentType("text/html");
    PrintWriter printWriter = resp.getWriter();
    printWriter.println("<html><head>");
    printWriter.println("<title>Hello Servet</title>");
    printWriter.println("</head><body>");
    printWriter.println("<h1>Hello !</h1>");
    printWriter.println("</body></html>");
    printWriter.close();
  }
}
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app version="3.0"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    
    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>HelloServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/sayhello</url-pattern>
    </servlet-mapping>
</web-app>

Le Deployment descriptor web.xml

<servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>HelloServlet</servlet-class>
    <init-param>
        <param-name>nom</param-name>
        <param-value>Bob</param-value>
    </init-param>

     <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello/*</url-pattern>
    </servlet-mapping>
</servlet>

Servlet avec doGet() et des paramètres

public class HelloServlet extends HttpServlet {
  @Override
  protected void doGet(HttpServletRequest req, 
    HttpServletResponse resp) 
  throws ServletException, IOException {
    resp.setContentType("text/html");
    String nom = req.getParameter("nom");
    PrintWriter printWriter = resp.getWriter();
    printWriter.println("<html><head>");
    printWriter.println("<title>Hello Servet</title>");
    printWriter.println("</head><body>");
    printWriter.println("<h1>Hello " + nom + "!</h1>");
    printWriter.println("</body></html>");
    printWriter.close();
  }
}
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app version="3.0"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    
    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>HelloServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/sayhello</url-pattern>
    </servlet-mapping>
</web-app>

Servlet avec doPost()

public class HelloServlet extends HttpServlet {
  @Override
  protected void doPost(HttpServletRequest req, 
    HttpServletResponse resp) 
  throws ServletException, IOException {
    //Même code que pour doGet
  }
}<!DOCTYPE html>
<html lang="en"><!--index.html-->
<head><meta charset="UTF-8"><title>Bonjour</title></head>
<body>
<form action="http://localhost:8080/sayhello" method="post">
  Votre nom : <input type="text" name="nom" value="">
  <input type="submit" value="OK">
</form>
</body></html>
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app version="3.0"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    
    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>HelloServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/sayhello</url-pattern>
    </servlet-mapping>
</web-app>

Cycle de vie d'une servlet

Les servlets avec Spring

Contrôleurs Spring

@RestController
@RequestMapping(value = "/sayhello")
public class HelloController {

  //...

}

Mapping de requête

@RequestMapping(
  method = RequestMethod.POST, //Méthode HTTP : GET/POST/PATCH/PUT/DELETE
  consumes = "application/json", //Type MIME des données passées avec la requête : JSON, XML, Texte...
  produces = "application/json", //Type MIME des données fournies dans la réponse
  value = "/vehicules" //Chemin du mapping (concaténé avec l'éventuel chemin présent au niveau du contrôleur)
)
public ...

            

Récupération des QueryParams

@RequestMapping(...)
public String exemple(
  @RequestParam("page") Integer page, 
  @RequestParam("size") Integer size)
{
    ...
}

Paramètres dans l'URL

@RequestMapping(value = "/{name}", ...)
public String hello(
  @PathVariable (value = "name") String name)
{
    ...
}

Corps de la requête

@RequestMapping(...)
public String createVehicule (
  @RequestBody Vehicule vehicule)
{
    ...
}