1.web项目加载时,过滤器会实例化及调用init方法,且容器只会维护一个实例
2.当请求经过过滤器时,调用doFilter方法
3.当容器正常关闭或项目卸载时,调用destory方法
初始化参数的配置
@WebFilter(servletNames = { "s" }, initParams = { @WebInitParam(name = "n1", value = "v1") })
还有一种web.xml
<filter>
<filter-name>filter1</filter-name>
<filter-class>com.tanlan.javaees1.Filter1</filter-class>
<init-param>
<param-name>n1</param-name>
<param-value>v1</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern>/servlet1</url-pattern>
</filter-mapping>
初始化参数的读取
@Override
public void init(FilterConfig config) throws ServletException {
System.out.println("init");
Enumeration<String> names = config.getInitParameterNames();
while(names.hasMoreElements()){
String name=names.nextElement();
System.out.println(name+"="+config.getInitParameter(name));
}
}
doFilter方法的实现:
获取http请求,做相关处理
根据处理请求结果决定是否使其访问下一个资源
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
System.out.println("start doFilter");
req.setCharacterEncoding("UTF-8");
chain.doFilter(req, res);//允许请求访问下一个资源
System.out.println("end doFilte");
}