Vous êtes sur la page 1sur 20

JEE : paramètres d’initialisation de servlet et Filtres

Achref El Mouelhi

Docteur de l’université d’Aix-Marseille


Chercheur en programmation par contrainte (IA)
Ingénieur en génie logiciel

elmouelhi.achref@gmail.com

H & H: Research and Training 1 / 19


Plan

1 Les paramètres de contexte et les paramètres de configuration

2 Les filtres

H & H: Research and Training 2 / 19


Les paramètres de contexte et les paramètres de configuration

ServletContext et ServletConfig

Les paramètres de contexte

Ce sont des paramètres partagés par toutes les servlets


Chaque paramètre a un nom et une valeur et peut avoir une
H I ©
description
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 3 / 19


Les paramètres de contexte et les paramètres de configuration

ServletContext et ServletConfig

Les paramètres de contexte

Ce sont des paramètres partagés par toutes les servlets


Chaque paramètre a un nom et une valeur et peut avoir une
H I ©
description
UEL
O
f E LM
h r e
de c
Les paramètres A configuration
©
Ce sont des paramètres relatifs à une servlet
Chaque paramètre a aussi un nom et une valeur et peut avoir une
description

H & H: Research and Training 3 / 19


Les paramètres de contexte et les paramètres de configuration

ServletContext et ServletConfig

Pour mieux comprendre


H I ©
Créer un projet JEE
UEL
O
Créer deux servlets FirstServlet et SecondServlet
f E LM
ch r e
Mettre en commentaire l’annotation @WebServlet dans les deux
fichiers
©A

H & H: Research and Training 4 / 19


Les paramètres de contexte et les paramètres de configuration

ServletContext et ServletConfig
Le contenu de web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp
.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<servlet>
H I ©
<servlet-name>FirstServlet</servlet-name>
UEL
<servlet-class>org.eclipse.controller.FirstServlet</servlet-class>
O
LM
</servlet>
<servlet-mapping>

e f
<servlet-name>FirstServlet</servlet-name>
r E
ch
<url-pattern>/FirstServlet</url-pattern>

©A
</servlet-mapping>
<servlet>
<servlet-name>SecondServlet</servlet-name>
<servlet-class>org.eclipse.controller.SecondServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SecondServlet</servlet-name>
<url-pattern>/SecondServlet</url-pattern>
</servlet-mapping>
</web-app>
H & H: Research and Training 5 / 19
Les paramètres de contexte et les paramètres de configuration

ServletContext et ServletConfig

Pour déclarer des paramètres partagés par toutes les servlets

<?xml version="1.0" encoding="UTF-8"?>


<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
H I ©
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
UEL
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp
O
LM
.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<!-- declaration de toutes les servlets -->
<context-param>
r e f E
<param-name>nom</param-name>
ch
©A
<param-value>wick</param-value>
</context-param>
</web-app>

H & H: Research and Training 6 / 19


Les paramètres de contexte et les paramètres de configuration

ServletContext et ServletConfig

Pour déclarer un paramètre propre à une servlet

<!-- le contenu precedent -->


<servlet>
<servlet-name>FirstServlet</servlet-name>
H I ©
EL
<servlet-class>org.eclipse.controller.FirstServlet</servlet-class>
<init-param>
O U
LM
<param-name>nom</param-name>
<param-value>travolta</param-value>
</init-param>
r e f E
ch
</servlet>

©A
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/FirstServlet</url-pattern>
</servlet-mapping>
<!-- + la declaration de la seconde servlet -->

H & H: Research and Training 7 / 19


Les paramètres de contexte et les paramètres de configuration

ServletContext et ServletConfig

Pour tester : contenu de la méthode doGet() de FirstServlet et


SecondServlet
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
H I ©
IOException {
UEL
// TODO Auto-generated method stub O
ServletContext context = getServletContext();
f E LM
r e
String nom = context.getInitParameter("nom");
ch
©A
PrintWriter out = response.getWriter();
out.print(nom + " from ServletContext");
nom = getServletConfig().getInitParameter("nom");
out.println(nom + " from ServletConfig");
}

H & H: Research and Training 8 / 19


Les paramètres de contexte et les paramètres de configuration

ServletContext et ServletConfig

Remarques
H I ©
Il est possible aussi d’utiliser l’annotation
UEL
@WebInitParam(name="nom", value="travolta") pour O
initialiser les paramètres d’une servlet
f E LM
ch r e
Pour les paramètres du contexte, il n’existe pas d’annotation pour
©A
remplacer le web.xml

H & H: Research and Training 9 / 19


Les filtres

Filters

Les filtres
un composant d’une application web
une classe Java très similaire à une servlet, il faut
H I ©
soit le déclarer dans web.xml U EL
O
f E LM
soit l’annoter par @WebFilter(’/chemin’)

ch r e
ayant comme rôle d’intercepter des requêtes sur une servlet

©A
Si un filtre est déclaré sur la route /FirstServlet
Avant que le doGet() ou le doPost de la servlet soit exécuté,
c’est le doFilter() du filtre qui sera exécuté

le chaı̂nage de filtres est possible

H & H: Research and Training 10 / 19


Les filtres

Filters
Contenu de FirstServlet

@WebServlet("/FirstServlet")
public class FirstServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request,


H I ©
EL
HttpServletResponse response) throws ServletException,
IOException {

O U
f E LM
this.getServletContext().getRequestDispatcher("/WEB-INF
/vueFirst.jsp").forward(request, response);
}
ch r e
©A
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException {
// TODO Auto-generated method stub
doGet(request, response);
}

H & H: Research and Training 11 / 19


Les filtres

Filters

Contenu de vueFirst.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"


pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
H I ©
EL
<head>

<title>Add Person Form</title>


O U
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

</head>
<body>
f E LM
ch
<form action="SecondServlet">
r e
©A
Nom : <input type=text name=nom> <br/>
Prenom : <input type=text name=prenom> <br/>
Age : <input type=text name=age min=0 max=150> <br/>
<button type=submit> Add </button>
</form>
</body>
</html>

H & H: Research and Training 12 / 19


Les filtres

Filters
Contenu de SecondServlet

@WebServlet("/SecondServlet")
public class SecondServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request,


H I ©
EL
HttpServletResponse response) throws ServletException,
IOException {

O U
f E LM
this.getServletContext().getRequestDispatcher("/WEB-INF
/vueSecond.jsp").forward(request, response);
}
ch r e
©A
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException {
// TODO Auto-generated method stub
doGet(request, response);
}

H & H: Research and Training 13 / 19


Les filtres

Filters

Contenu de vueSecond.jsp
<%@ page language="java" contentType="text/html;
charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
H I ©
EL
<html>
<head>
O U
f E LM
<meta http-equiv="Content-Type" content="text/
html; charset=UTF-8">
ch
<title>Confirmation</title> r e
</head>
<body>
©A
Bonjour ${ prenom } ${ nom }.
</body>
</html>

H & H: Research and Training 14 / 19


Les filtres

Filters

Hypothèse
supposant qu’on veut filtrer l’ajout de personne avec une valeur
pour l’attribut age négative ou supérieure à 150
H I ©
EL
Solution : créer un filtre
M OU
f
Faire un clic droit sur srcEetL
aller à New > Filter
ch r e
© A
Saisir org.eclipse.filter comme Package name
Saisir PersonneFilter comme Class name
Cliquer sur Next et remplacer l’URL Pattern par
/SecondServlet (la route de la deuxième servlet) puis valider

H & H: Research and Training 15 / 19


Les filtres

Filters
Contenu de PersonneFilter
@WebFilter("/SecondServlet")
public class PersonneFilter implements Filter {

public void destroy() {

}
// TODO Auto-generated method stub

H I ©
U EL
public void doFilter(ServletRequest request, ServletResponse response
O
LM
, FilterChain chain) throws IOException, ServletException {

e f E
chain.doFilter(request, response);
r
}
ch
©A
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}

Remarque
chain.doFilter(request, response); appelle le filtre suivant (s’il en existe), sinon la
servlet ayant la route /SecondServlet sera exécutée.

H & H: Research and Training 16 / 19


Les filtres

Filters

Pour s’assurer que le filtre est exécuté avant la servlet, on modifie le contenu de
PersonneFilter

@WebFilter("/SecondServlet")
public class PersonneFilter implements Filter {

H I ©
EL
public void destroy() {

}
// TODO Auto-generated method stub
O U
f E LM
public void doFilter(ServletRequest request, ServletResponse response

ch r e
, FilterChain chain) throws IOException, ServletException {

©A
System.out.println("In filter");
chain.doFilter(request, response);
}
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}

H & H: Research and Training 17 / 19


Les filtres

Filters
On modifie aussi le doGet() de SecondServlet
@WebServlet("/SecondServlet")
public class SecondServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

response) throws ServletException, IOException {


H I ©
protected void doGet(HttpServletRequest request, HttpServletResponse

System.out.println("In SecondServlet");
U EL
this.getServletContext().getRequestDispatcher("/WEB-INF/vueSecond.
O
LM
jsp").forward(request, response);
}

r e f E
ch
protected void doPost(HttpServletRequest request, HttpServletResponse

©A
response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}

Remarque
On lance l’application, on remplit les trois champs et on clique sur le bouton ⇒ dans la console,
In filter est affiché en premier ensuite In SecondServlet.
H & H: Research and Training 18 / 19
Les filtres

Filters
Filtrons maintenant les valeurs de l’attribut age

@WebFilter("/SecondServlet")
public class PersonneFilter implements Filter {

public void destroy() {


// TODO Auto-generated method stub
H I ©
EL
}

O U
public void doFilter(ServletRequest request, ServletResponse response

f E LM
, FilterChain chain) throws IOException, ServletException {
int age = Integer.parseInt(request.getParameter("age"));

r e
System.out.println("age------" + age);
ch
©A
if (age >= 0 && age <150)
chain.doFilter(request, response);
else
response.getWriter().println("corriger l’age");
}
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}

H & H: Research and Training 19 / 19

Vous aimerez peut-être aussi