过滤器 & 监听器
第1章 过滤器****Filter
1.1 Filter****简介
fifilter是对客户端访问资源的过滤,符合条件放行,不符合条件不放行
1.2 快速入门
通过API描述可知:
1. 我们创建一个过滤器的话需要实现Filter这个接口
使用步骤
\1. 编写一个过滤器的类实现Filter接口
\2. 实现接口中尚未实现的方法(着重实现doFilter方法)
\3. 在web.xml中(注解)进行配置(主要是配置要对哪些资源进行过滤)
\4. 在doFilter方法中书写过滤任务
\5. FilterChain.doFilter方法放行
注意事项
过滤器doFilter方法默认拦截请求,如果需要经过过滤器之后,可以继续访问资源,要使用fifilterChain放行。
代码实现
public class MyFilter1 implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
FilterChain filterChain) throws IOException, ServletException {
System.out.println("执行MyFilter1的filter......");
//放行,执行后面的Filter或目标资源
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void destroy() {
}
}
web.xml配置
<filter>
<filter‐name>MyFilter1</filter‐name>
<filter‐class>com.soft.filter.MyFilter1</filter‐class>
</filter>
<filter‐mapping>
<filter‐name>MyFilter1</filter‐name>
<url‐pattern>/*</url‐pattern>
</filter‐mapping>
注解方式,不在web.xml中进行配置,使用@webFilter进行配置,如下:
@WebFilter(urlPatterns = "/*")
public class MyFilter1 implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
FilterChain filterChain) throws IOException, ServletException {
System.out.println("执行MyFilter1的filter......");
//放行,执行后面的Filter或目标资源
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void destroy() {
}
}
1.3 过滤器的执行流程
生活案例类比过滤器流程
花花从广州开车到长沙,中途途径韶关收费站。如果这座收费站业务通过了,韶关收费站放行,花花方可到达长
沙。但是如果没有通过韶关收费站的业务,就不能到达长沙目的地。而花花中途经过的收费站,就相当于我们java
中的过滤器。
图解过滤器的执行流程
1.4 Filter的API详解1.4.1 fifilter****生命周期及其与生命周期相关的方法
Filter接口有三个方法,并且这个三个都是与Filter的生命相关的方法
init(Filterconfig) :代表fifilter对象初始化方法 fifilter对象创建时执行
doFilter(ServletRequest,ServletResponse,FilterCha) :代表fifilter执行过滤的核心方法,如果某资源在已
经被配置到这个fifilter进行过滤的话,那么每次访问这个资源都会执行doFilter方法
destory() :代表是fifilter销毁方法 当fifilter对象销毁时执行该方法
Filter对象的生命周期:
Filter何时创建:服务器启动时就创建该fifilter对象
Filter何时执行过滤:每当一个请求的路