- Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。
- 它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理。使用Filter的完整流程:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。
过滤器的使用
- 过滤器类实现Filter接口,则为过滤器类
-
-
-
- 进入Servlet前用户是否登录
- 对请求和响应进行编码设置
-
-
- 可继续指定请求的链式处理,可进入下一个filter或直接进入Servlet
-
-
-
- Filter可能会有多个,因此执行链式处理时,如果后续还有Filter,则会先执行Filter,待所有的Filter处理完成后,再去执行Servlet
- 在Tomcat中注册
-
-
-
- value为该Filter可以处理的所有请求资源路径
-
-
-
-
- /*为通配符
- 多个参数WebFilter({"/servlet","/servlet2"})
<web-app>
<filter>
<filter-name>filter1</filter-name>
<filter-class>com.wry.javaweb.filter.Filter1</filter-class>
</filter>
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
//@WebFilter("")配置Filter可以处理的所有请求资源路径 /*为通配符
@WebFilter({"/servlet"})
public class Filter1 implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//这里可以进行通用的逻辑处理代码,如设置编码格式,检测是否登录
System.out.println("进入Filter");
//设置响应类型和编码
servletRequest.setCharacterEncoding("UTF-8");
servletResponse.setContentType("text/html;charset=UTF-8");
//设置统一的响应编码
servletResponse.setCharacterEncoding("UTF-8");
//继续执行请求的链式处理,可能进入下一个Filter或直接进入Servlet
/*
*Filter可能会有多个,因此执行链式处理时,如果后续还有Filter,
*则会先执行Filter,待所有的Filter处理完成后,再去执行Servlet
* */
filterChain.doFilter(servletRequest,servletResponse);
}
}
过滤器的生命周期
- 初始化方法 init(FilterConfig filterConfig)
-
- 开发人员通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象。
-
- 这个方法完成实际的过滤操作。当客户请求访问与过滤器关联的URL的时候,Servlet过滤器将先执行doFilter方法。FilterChain参数用于访问后续过滤器。
-
- Filter对象创建后会驻留在内存,当web应用移除或服务器停止时才销毁。在Web容器卸载 Filter 对象之前被调用。该方法在Filter的生命周期中仅执行一次。在这个方法中,可以释放过滤器使用的资源。