一、过滤器简介
Servlet过滤器与Servlet十分相似,但它具有拦截客户端(浏览器)请求的功能,Servlet过滤器可以改变请求中的内容,来满足实际开发的需要。
对于程序开发人员而言,过滤器实质就是在Web应用服务器上的一个Web应用组件,用于拦截客户端(浏览器)与目标资源的请求,并对这些请求进行一定过滤处理再发送给目标资源。即对请求和响应进行拦截或者增强的对象,就是过滤器。
二、过滤器作用
- 统一的认证处理
- 详细的日志
- 对用户数据的安全性处理改变图象文件格式
- 对响应数据进行编码·对响应做压缩处理
- 对XML输出做XSLT转换
三、过滤器工作方式
四、过滤器-API
过滤器对象放置在javax.servlet包中,其名称为Filter,它是一个接口。Filter接口是过滤器类必须实现的接口,该接口中有三个方法Filter、FilterChain、FilterConfig。过滤器执行的顺序是按照,web.xml中filter-mapping标签的书写顺序执行(从上往下执行)
- Filter
Filter接口过滤器类必须实现的接口,该接口中有三个方法
- init(FilterConfig filterConfig):
该方法是对filter对象进行初始化的方法,仅在容器初始化filter对象结束后被 调用一次。参数 FilterConfig可以获得filter的初始化参数。 - doFilter(ServietRequest request,ServletResponse response, FilterChain chain):
该方法是filter进行过滤操作的方法,是最重要的方法。过滤器实现类必须实现该方法。方法体中可以对request和response进行预处理。其中FilterChain可以将处理后的request和response对象传递到过滤链上的下一个资源。 - destroy():该方法在容器销毁过滤器对象前被调用。
- init(FilterConfig filterConfig):
- FilterChain
FilterChain接口作为Filter接口中doFilter方法的参数使用,可调用过滤器链中的一系列过滤器。
- doFilter(ServletRequest request,ServletResponse response)
该方法可以将当前的请求和响应传递到过滤链上的下一个资源,可能是下一个过滤器,也可能是目 标资源。——请求放行全靠它
- doFilter(ServletRequest request,ServletResponse response)
- FilterConfig
FilterConfig接口作为Filter接口中的init方法的参数使用,FilterConfig接口中有一个常用方法
方法声明 说明 public String getFilterName() 用于获取过滤器的名字 public ServletContext getServletContext() 获取Servlet上下文。 public Enumeration getInitParameterNames() 获取过滤器的所有初始化参数。 public String getInitParameter(String name) 获取过滤器的初始化参数值。
五、过滤器-创建步骤
- 定义一个实现了Filter接口的类,实现init、doFilter、destroy方法
public class MyFilter implements Filter {
@Override
public void destroy() {
/*销毁时调用*/
}
@Override
public void doFilter(ServletRequest serequest, ServletResponse seresponse, FilterChain chain)
throws IOException, ServletException {
/*过滤方法 主要是对request和response进行一些处理,然后交给下一个过滤器或Servlet处理*/
//将处理后的request和response对象传递到过滤链上的下一个资源
chain.doFilter(serequest,seresponse);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
/*初始化方法 接收一个FilterConfig类型的参数 该参数是对Filter的一些配置*/
}
}
- 在web.xml文件中进行配置
<filter>
<filter-name>test</filter-name>
<filter-class>com.test.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>test</filter-name>
<url-pattern>user</url-pattern>
</filter-mapping>
- 配置参数说明
- filter
- filter-name:自定义的名字
- filter-class:Filter类的完整名字
- filter-mapping
- filter-name:与filter中的filter-name相同
- url-pattern:
该过滤器要过滤的资源的URL,例如/admin/* ;/ * :全部匹配,*.html:扩展名匹配
- filter