xxxxxxxxxx
requête http doFilter doFilter doFilter
+--------+ ==============> +------------+ ==========> +------------+ ==========> +------------+ ==========> +-------------+
| Client | | Filtre (1) | | Filtre (2) | | Filtre (3) | | Servlet (1) |
+--------+ <============== +------------+ <========== +------------+ <========== +------------+ <========== +-------------+
réponse http
static String myVar1 = "";
)static { /* doSomeThing */ }
).init()
doFilter()
FilterChain
permet de passer le contrôle au prochain Filtre si présent, sinon le contrôle passera à la ressource ciblée par la requête http (servlet, jsp, ...).doFilter
de la classe FilterChain
n'est pas appelée par le filtre, alors le traitement de la requête http s'arrêtera et la réponse sera retournée au client.destroy()
xxxxxxxxxx
package com.mtitek.filters.test1;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class MyFilter1 implements Filter {
FilterConfig filterConfig;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
System.out.println("com.mtitek.filters.test1.MyFilter1 - " + this.filterConfig.getFilterName() + " : init(FilterConfig)");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("com.mtitek.filters.test1.MyFilter1 - " + this.filterConfig.getFilterName() + " : doFilter(ServletRequest, ServletResponse, FilterChain) : Start");
filterChain.doFilter(servletRequest, servletResponse);
System.out.println("com.mtitek.filters.test1.MyFilter1 - " + this.filterConfig.getFilterName() + " : doFilter(ServletRequest, ServletResponse, FilterChain) : End");
}
@Override
public void destroy() {
System.out.println("com.mtitek.filters.test1.MyFilter1 - " + this.filterConfig.getFilterName() + " : destroy()");
}
}
String getFilterName()
: retourne le nom du filtre tel que définit dans le fichier du déploiement.ServletContext getServletContext()
: retourne une référence vers le scope APPLICATION.String getInitParameter(String)
: retourne la valeur du paramètre d'initialisation du filtre.Enumeration<String> getInitParameterNames()
: retourne une Enumération de tous les paramètres d'initialisation du filtre.xxxxxxxxxx
<filter-mapping>
<filter-name> <!-- toujours 1 -->
<url-pattern> OR <servlet-name> <!-- toujours 1 -->
<dispatcher> <!-- [0 à 4] {REQUEST, FORWARD, INCLUDE, ERROR} -->
forward
de la classe RequestDispatcher
).include
de la classe RequestDispatcher
).xxxxxxxxxx
<filter>
<description> <!-- 0 ou plusieurs -->
<display-name> <!-- 0 ou plusieurs -->
<icon> <!-- 0 ou plusieurs -->
<small-icon> <!-- 0 ou 1 -->
<large-icon> <!-- 0 ou 1 -->
<filter-name> <!-- toujours 1 -->
<filter-class> <!-- toujours 1 -->
<init-param> <!-- 0 ou plusieurs -->
<description> <!-- 0 ou 1 -->
<param-name> <!-- toujours 1 -->
<param-value> <!-- toujours 1 -->
xxxxxxxxxx
<filter-mapping>
<filter-name>MyFilter1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>MyFilter3</filter-name>
<servlet-name>MyServlet1</servlet-name>
</filter-mapping>
<filter-mapping>
<filter-name>MyFilter2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
xxxxxxxxxx
. String getInitParameter(String)
. Enumeration<String> getInitParameterNames()
xxxxxxxxxx
<init-param>
<param-name>PARAM_NAME</param-name>
<param-value>PARAM_VALUE</param-value>
</init-param>
xxxxxxxxxx
<filter>
<filter-name>MyFilter1</filter-name>
<filter-class>com.mtitek.filters.test1.MyFilter1</filter-class>
<init-param>
<param-name>filter1_paramname_1</param-name>
<param-value>filter1_paramvalue_1</param-value>
</init-param>
<init-param>
<param-name>filter1_paramname_2</param-name>
<param-value>filter1_paramvalue_2</param-value>
</init-param>
</filter>
xxxxxxxxxx
package com.mtitek.filters.test1;
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class MyFilter1 implements Filter {
FilterConfig filterConfig;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
Enumeration<String> initParameterNames = this.filterConfig.getInitParameterNames();
while (initParameterNames.hasMoreElements()) {
String initParameterName = (String) initParameterNames.nextElement();
String initParameterValue = this.filterConfig.getInitParameter(initParameterName);
System.out.println(initParameterName + " : " + initParameterValue);
}
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() {
}
}
xxxxxxxxxx
filter1_paramname_1 : filter1_paramvalue_1
filter1_paramname_2 : filter1_paramvalue_2