Filter概述
-
概述
A filter is an object that performs filtering tasks on either the request to a resource (a servlet or static content), or on the response from a resource, or both.
- Filter是用于过滤web资源的一个组件;在资源执行之前执行,在资源执行之后执行。
-
使用场景
- 登录状态认证;
- 解决请求参数中文乱码。
Filter入门案例
- 开发步骤
- ①定义Filter类实现Filter接口
- 重写doFilter方法
- ②编写web.xml
- 配置定义Filter类
- ①定义Filter类实现Filter接口
- ①定义Filter类实现Filter接口
public class Demo01Filter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("Demo01Filter过滤");
//放行请求
chain.doFilter(request, response);
System.out.println("Demo01Filter放行");
}
}
②编写web.xm
<filter>
<filter-name>Demo01Filter</filter-name>
<filter-class>com.atguigu.filter.Demo01Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>Demo01Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
F ilter执行流程
- 执行流程
- 浏览器发起请求"http://localhost:8080/web12/demo01"
- 服务器处理请求,创建request和response对象,将这两个对象给Demo01Filter
- Demo01Filter通过doFilter方法处理请求,将请求放行,将request和response对象给Demo01Servlet
- Demo01Servlet通过doGet/doPost方法处理请求,做出响应
- Demo01Filter进行收尾。
Filter生命周期
生命周期
- 初始化:随着服务器的启动而初始化
- 销毁:随着服务器的关闭而销毁
Filter相关配置
初始化参数
<!--初始化参数-->
<filter>
<filter-name>Demo03Filter</filter-name>
<filter-class>com.atguigu.filter.Demo03Filter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Demo03Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
public class Demo03Filter implements Filter {
private String encoding;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
encoding = filterConfig.getInitParameter("encoding");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("encoding = " + encoding);
//放行请求
chain.doFilter(request, response);
}
}
过滤路径
<!--过滤路径-->
<filter>
<filter-name>Demo04Filter</filter-name>
<filter-class>com.atguigu.filter.Demo04Filter</filter-class>
</filter>
<!--针对Servlet进行过滤-->
<!--
<filter-mapping>
<filter-name>Demo04Filter</filter-name>
<servlet-name>Demo01Servlet</servlet-name>
</filter-mapping>
-->
<!--完全匹配 : 以"/"开头-->
<!--
<filter-mapping>
<filter-name>Demo04Filter</filter-name>
<url-pattern>/demo01</url-pattern>
</filter-mapping>
-->
<!--目录匹配 : 以"/"开头,以"*"结尾--&g