Filter 过滤器
对web资源进行过滤,通常拦截request进行处理,也可以对response处理,然后交给下一个filter或者servlet
实现filter接口,并实现其中的抽象方法
public class Item implements Filter {
public void destroy() {
/*销毁时调用*/
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
/*过滤方法 主要是对request和response进行一些处理,然后交给下一个过滤器或Servlet处理*/
chain.doFilter(req, resp);//交给下一个过滤器或servlet处理
}
public void init(FilterConfig config) throws ServletException {
/*初始化方法 接收一个FilterConfig类型的参数 该参数是对Filter的一些配置*/
}
}
容器启动时根据web.xml创建filter对象,只产生一个实例,容器关闭时销毁filter对象,初始化时传入FilterConfig对象,FilterConfig对象中保存了web.xml中当前filter的初始化参数
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<!-- Filter 映射 -->
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
容器提供了一个FilterChain对象(过滤链),调用过滤的下一个过滤器或者servlet
执行顺序:根据web.xml中<filter-mapping>的先后顺序,当存在同名的filter时,调用最前面的
容器启动时:ServletContext > Listener > Filter > Servlet
在web.xml中Servlet配置了<load-on-startup>时该Servlet会随着容器启动而启动,没有配置时什么时候用到什么时候初始化