Programmation JEE/Servlets
Un servlet est une classe JAVA côté serveur qui reçoit des données HTTP et qui opère un ou des traitements et devant respecter les contraintes de ce protocole HTTP.
Les servlets.
Exemple de servlet.
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 * Servlet implementation class Hello
@WebServlet("/Hello")
public class Hello extends HttpServlet {
 private static final long serialVersionUID = 1L;
 * @see HttpServlet#HttpServlet()
 public Hello() {
 super();
 // TODO Auto-generated constructor stub
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 protected void doGet(HttpServletRequest request, HttpServletResponse response) 
 throws ServletException, IOException {
 // TODO Auto-generated method stub
 response.setContentType("text/html;charset=UTF-8");
 PrintWriter out = response.getWriter();
 try {
 out.println("Hello World");
 } finally {
 out.close();
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 // TODO Auto-generated method stub
 doGet(request,response);
Description.
On remarque deux méthodes dans cette classe : doGet et doPost, la première répond par HTTP à l’envoi d'une requête GET, la seconde à l'envoi d'une requête POST. Comme l'on veut que dans les deux cas la servlet réponde, doPost renvoie à doGet.
Déployement sous TomCat.
<web-app 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"
 version="3.0"
 metadata-complete="true"> 
 <!-- Début ici -->
 <servlet>
 <servlet-name>Hello</servlet-name><!-- Nom de la classe -->
 <servlet-class>servlet.Hello</servlet-class><!-- Arborescence de la classe : avec le package -->
 </servlet>
 <servlet-mapping>
 <servlet-name>Hello</servlet-name><!-- Nom de la classe -->
 <url-pattern>/Hello</url-pattern><!-- Pattern de la classe dans l'url -->
 </servlet-mapping>
 <!-- Fin ici -->
<web-app>
Le WEB-INF comprend donc :
Appel de la servlet.
http://localhost:999/webTest/Hello
Résultat dans le navigateur :
Anatomie de l'url.
[Protocol://][DNS]:[PORT]/[RootEntryDirectory]/[ServletName]
Méthodes d'informations sur l'URL.
 // Retourne le nom du serveur
 request.getServerName();
 // Retourne le port du serveur
 request.getServerPort();
 // Retourne le nom de l'application hébergeant la servlet
 request.getContextPath();
 // Retourne le chemin de la servlet
 request.getServletPath();
 // Retourne type de la requete http utillisee
 request.getMethod();
 // Retourne parametres passes dans URL
 request.getQueryString();
 // Retourne URL utilisee pour contacter la servlet
 request.getRequestURL();
 // Retourne l'adresse locale
 request.getLocalAddr();
 request.getLocalName();
 request.getLocalPort();
 request.getRemoteAddr();
 request.getRemoteHost();
Exemple dans la servlet :
package servlet;
import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 * Servlet implementation class Hello
@WebServlet("/Hello")
public class Hello extends HttpServlet {
private static final long serialVersionUID = 1L;
 /**
 * @see HttpServlet#HttpServlet()
 public Hello() {
 super();
 // TODO Auto-generated constructor stub
 protected void processRequest(HttpServletRequest request, HttpServletResponse response)
 throws ServletException, IOException {
 response.setContentType("text/html;charset=UTF-8");
 PrintWriter out = response.getWriter();
 try {
 out.println(request.getServerName());
 out.println("<br/>");
 out.println(request.getServerPort());
 out.println("<br/>");
 out.println(request.getContextPath());
 out.println("<br/>");
 out.println(request.getServletPath());
 out.println("<br/>");
 out.println(request.getMethod());
 out.println("<br/>");
 out.println(request.getQueryString());
 out.println("<br/>");
 out.println(request.getRequestURL());
 out.println("<br/>");
 out.println(request.getLocalAddr());
 out.println("<br/>");
 out.println(request.getLocalName());
 out.println("<br/>");
 out.println(request.getLocalPort());
 out.println("<br/>");
 out.println(request.getRemoteAddr());
 out.println("<br/>");
 out.println(request.getRemoteHost());
 } finally {
 out.close();
 /**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 // TODO Auto-generated method stub
 processRequest(request, response);
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 protected void doPost(HttpServletRequest request, HttpServletResponse response)
 throws ServletException, IOException {
 // TODO Auto-generated method stub
 processRequest(request, response);
Cet appel : http://localhost:999/webTest/Hello
Méthodes de lecture des paramètres.
 // Récuperation du paramètre par le nomParametre
 request.getParameter(nomParametre);
 // Retourne une énumeration de tous les paramètres d'une requête
request.getParameterNames();
 // Retourne toutes les valeurs du paramètre de nomParametre
 request.getParameterValues(nomParametre);
 // Retourne une itération de nom de paramètres
 request.getParameterMap();
Méthodes de lecture des En-Têtes.
 // Retourne les noms du header
 request.getHeaderNames();
 // Retourne les headers
request.getHeaders();
 // Retourne le nombre d'octets dans la requête
 request.getContentLength();
 // Retourne le type de contenu de la requête
 request.getContentType();
 // Retourne la langue privilégiée
 request.getLocale();
 // Retourne la liste des langues
 request.getLocales();
 // Retourne la date du header
 request.getDateHeader(String name);
 // Retourne le header spécifié par le "name"
 request.getHeader(String name);
 // Retourne les headers spécifiés par le "name"
 request.getHeaders(String name);
Méthodes d'ajout d'informations à la requête.
 // Assure le stockage d'un objet dans l'objet HttpServletRequest
 request.setAttribute(String name, Object o);
 // Retourne l'objet stocké "name"
 request.getAttribute(String name);
 // Returne une enumeration des noms d'attributs
 request.getAttributeNames();
 // Supprime l'attribut "name" des attributs de la requête
 request.removeAttribute(String name);
Méthodes d'ajout des en-têtes.
Les en-têtes HTTP sont utilisés pour ajouter à la réponse des informations supplémentaires.
 // Cette méthode permet d'indiquer la nature des informations présentes dans la réponse
 response.setContentType(String type);
 // Cette méthode indique la langue locale
 response.setLocale(Locale loc);
 // Cette méthode ajoute le header "name" avec sa valeur "value"
 response.addHeader(String name, String value);
Élaboration du corps de la réponse.
Ne jamais utiliser ces deux objets simultanément sous peine d'une exception IllegalStateException
Voici un exemple d'envoi binaire:
package servlet;
import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 * Servlet implementation class ReponseHttp2
@WebServlet("/ReponseHttp2")
public class ReponseHttp2 extends HttpServlet {
private static final long serialVersionUID = 1L;
 /**
 * @see HttpServlet#HttpServlet()
 public ReponseHttp2() {
 super();
 // TODO Auto-generated constructor stub