Vous êtes sur la page 1sur 8

Samedi 23 Octobre 2021

Rappels sur les servlets


Questions :
1) C’est quoi une/un servlet ?
2) Qui instancie les servlets ?
3) Quand Tomcat va instancier une servlet ?
4) Quelle est la première méthode appelée (par Tomcat)
d’une servlet ? et combien de fois dans la vie de celle-
ci ?
5) Comment fait Tomcat pour déterminer si une requête
http (envoyée par un navigateur) est destinée à une
servlet donnée ? Que fait Tomcat dans ce cas ?
Réponses :
1) Une servlet est une classe qui étend la classe
javax.servlet.http.HttpServlet fournie par les jars de
Tomcat. Un objet/une instance de cette classe est
également appelé servlet.
On utilise le mot servlet à la fois pour la classe et pour un
objet quelconque de cette classe.
2) Les servlets sont déclarées à Tomcat (via l’annotation
@WebServlet) qui va les instancier: une servlet est créée par

Tomcat en utilisant son constructeur vide (sans


paramètres).
Tomcat crée une seule instance d’une servlet quel que
soit le nombre de requêtes adressées à celle-ci
1
package cours;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;

@WebServlet("/test")
public class TestServlet extends HttpServlet {

public TestServlet() {
System.out.println("une servlet est créée");
}
}

3) Tomcat instancie une servlet :


- Soit quand la servlet reçoit la première requête http
envoyée à partir d’un navigateur.
- Soit quand on démarre (run) une application/un
projet web dynamique.

4) Tomcat appelle la méthode init() de la servlet une seule


fois quel que soit le nombre de requêtes envoyées à
celle-ci
package cours
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;

@WebServlet("/test")
public class TestServlet extends HttpServlet {

//un constructeur vide


public TestServlet() {
System.out.println("une servlet est créée");
}

@Override
public void init() throws ServletException {
System.out.println("la methode int est appelée");
}
}

2
5) En utilisant l’URL mapping en tapant sur un navigateur
l’adresse suivante :
http://localhost:8083/<nom-projet>/<url_mapping>

package cours;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;

@WebServlet("/test")
public class TestServlet extends HttpServlet {

Voici les méthodes de HttpServlet qu’une servlet va hériter

3
package cours;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/test")
public class TestServlet extends HttpServlet {

// constructeur vide
public TestServlet() {
System.out.println("une servlet est créée");
}

@Override
public void init() throws ServletException {
System.out.println("la methode init est appelée");
}

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse
resp) throws ServletException, IOException {
System.out.println("la methode get est appelée");
}

une servlet est créée


la methode init est appelée
la methode get est appelée
la methode get est appelée
la methode get est appelée
la methode get est appelée
la methode get est appelée
la methode get est appelée
la methode get est appelée
la methode get est appelée

On voit que la méthode doGet(…) est appelée par Tomcat à chaque requête envoyée à partir d’un
navigateur quelconque.

4
Application web de gestion de produits
La classe Produit

package modele;

public class Produit {

private int id;


private String nom;
private double prix;
private int quantite;

public Produit() { }

public Produit(int id, String nom, double prix, int quantite) {


super();
this.id = id;
this.nom = nom;
this.prix = prix;
this.quantite = quantite;
}

public int getId() {


return id;
}

public void setId(int id) {


this.id = id;
}

public String getNom() {


return nom;
}

public void setNom(String nom) {


this.nom = nom;
}

public double getPrix() {


return prix;
}

public void setPrix(double prix) {


this.prix = prix;
}

public int getQuantite() {


return quantite;
}

public void setQuantite(int quantite) {


this.quantite = quantite;
}

@Override
public String toString() {
return "Produit [id=" + id + ", nom=" + nom + ", prix=" + prix + ",
quantite=" + quantite + "]";
}

5
}

Couche DAO : package dao


L’interface IProduitDao

package dao;

import java.util.Collection;

import modele.Produit;

public interface IProduitDao {

void add(Produit p);


Collection<Produit> findAll();
Produit findById(int id);
void deleteById(int id);
void update(Produit newP);

La classe ProduitDao

package dao;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

import modele.Produit;

public class ProduitDao implements IProduitDao{

Map<Integer, Produit> map= new HashMap<>();//une table de hachage


avec deux colonnes

@Override
public void add(Produit p) {
map.put(p.getId(), p);
}

@Override
public Collection<Produit> findAll() {

Collection<Produit> values = map.values();

return values;
}

@Override
public Produit findById(int id) {

6
Produit produit = map.get(id);
return produit;
}

@Override
public void deleteById(int id) {
map.remove(id);

@Override
public void update(Produit newP) {
map.put(newP.getId(), newP);
}
}

Couche web

Formulaire de saisie d’un nouveau produit

index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form action="add" method="post">

ID: <input type="text" name="id"/><br>


Nom: <input type="text" name="nom"/><br>
Prix: <input type="text" name="prix"/><br>
Quantite: <input type="text" name="quantite"/><br>
<input type="submit" value="ajouter"/><br>
</form>
</body>
</html>

La servlet AjoutProduit

package web;

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;

import dao.IProduitDao;
import dao.ProduitDao;
import modele.Produit;

7
@WebServlet("/add")
public class AjoutProduit extends HttpServlet {

private IProduitDao dao= new ProduitDao();

protected void doPost(HttpServletRequest request, HttpServletResponse


response) throws ServletException, IOException {

int id= Integer.parseInt(request.getParameter("id"));


String nom= request.getParameter("nom");
int quantite= Integer.parseInt(request.getParameter("quantite"));
double prix= Double.parseDouble(request.getParameter("prix"));

Produit p= new Produit(id, nom, prix, quantite);

dao.add(p);

PrintWriter out= response.getWriter();


out.println("Un nouveau produit est ajouté avec succes");

La structure de notre projet à ce stade est :

Vous aimerez peut-être aussi