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>