过滤器
过滤器实际上就是对web资源进行的拦截,filter是Servlet的规范它是处于客户端与服务器资源文件之间的一道过滤网 。通俗的来讲,就是你想要访问我的服务器,就需要首先通过过滤器的层层检查,然后你的请求才会被servlet处理。
过滤器是配置在web.xml文件中的
<!--在web.xml里面设置拦截器-->
<filter>
<filter-name>XxxFilter</filter-name>
<filter-class>XxxFilter类的全限定名</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GB2312</param-value>
</init-param>
</filter>
<filter>
<filter-name>XxxFilter1</filter-name>
<filter-class>XxxFilter1类的全限定名</filter-class>
</filter>
<filter-mapping>
<filter-name>XxxFilter</filter-name>
<!--表示:当前Filter只对哪些资源做过滤/拦截操作,只对hello.jsp做拦截 -->
<url-pattern>/hello.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>XxxFilter1</filter-name>
<!--表示:当前Filter只对哪些资源做过滤/拦截操作,只对hello1.jsp做拦截 -->
<url-pattern>/hello1.jsp</url-pattern>
</filter-mapping>
多个拦截器的执行顺序与web.xml文件中的filter-mapping的顺序有关。
详解
Filter三个生命周期方法
@Override
// Filter的初始化方法,在Servlet启动时调用
//FilterConfig为Filter的配置和运行环境
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
// Filter进行拦截请求时,Servlet将调用doFilter方法
//request 和response 分别对应本次访问请求的请求体和响应体,chain则表示Filter链的对象
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
}
@Override
// 在Servlet对象被销毁时调用,只能执行一次,释放资源
public void destroy() {
}
Filter链
在一个web应用中,可以定义很多歌Filter拦截器对象,这些Filter组成一个Filter链(过滤器链)。
多个Filter(过滤器)的拦截顺序与他们在Web.xml中映射(filter-mapping)顺序一致。一个Filter执行完之后,会调用FilterChain.doFilter激活下一个Filter的doFilter方法。最后一个Filter.foFilter方法调用之后将会激活目标Servlet的service方法
FilterConfig接口
Filterconfig里面封装了Filter的配置参数信息。
FilterConfig接口定义的各个方法:
public interface FilterConfig {
//返回<filter-name>元素设置的值
String getFilterName();
//返回FilterConfig对象中所包装的ServletContext对象的引用
ServletContext getServletContext();
//返回在web.xml文件中Filter所设置的某个名称的初始化的参数值
String getInitParameter(String var1);
//返回一个Enumeration集合对象
Enumeration<String> getInitParameterNames();
}