Filter. Cette inferface définit trois méthodes :
init(FilterCongif) : méthode callback, appelée lors de la construction de cet objet par le serveur d'applications.
destroy() : méthode callback, appelée lors de la destruction de cet objet par le serveur d'applications.
doFilter(ServletRequest, ServletResponse, FilterChain) : cette méthode est appelée sur requête HTTP, au lieu de l'appel d'une servlet sur lequel ce filtre est déclaré. La propagation de la requête au filtre suivant, ou à la servlet est faite en invoquant
filterChain.doFilter(request, response).
Exemple 30. Construction d'un filtre
public class TransparentFilter implements Filter {
public void init(FilterConfig filterConfig) {
// l'objet filterConfig encapsule les paramètres
// d'initialisation de ce filtre
}
public void destroy() {
// callback de destruction de ce filtre
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain)
throws IOException, ServletException {
// propagation de la requête le long de la chaîne
filterChain.doFilter(request, response) ;
}
}
web.xml de l'application. De même qu'une servlet, un filtre est déclaré en deux temps : d'une part par sa classe d'implémentation, d'autre part par l'URL qu'il filtre. Voyons ceci sur un exemple.
Exemple 31. Déclaration d'un filtre
<web-app>
<!-- déclaration de la classe d'implémentation du filtre -->
<filter>
<filter-name>SimpleFilter</filter-name>
<filter-class>org.paumard.cours.servlet.SimpleFilter</filter-class>
</filter>
<!-- déclaration des URL interceptées par ce filtre -->
<filter-mapping>
<filter-name>SimpleFilter</filter-name>
<!-- on aurait pu aussi définir une servlet filtrée, par un élément servlet-name -->
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- suivent les déclarations des servlets -->
<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>org.paumard.cours.servlet.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
</web-app>