新建一个Filter
创建一个Filter02类实现 Filte接口
public class Filter02 implements Filter { public void destroy() { } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { System.out.println("Filter02 doFilter"); chain.doFilter(req, resp); } public void init(FilterConfig config) throws ServletException { System.out.println("Filter02 init"); } }
在web.xml中配置Filter
<filter> <filter-name>Filter02</filter-name> <filter-class>com.zjl.main.filter.Filter02</filter-class> </filter> <filter-mapping> <filter-name>Filter02</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
- 部署至Tomcat,启动运行,会在控制台中打印
Filter02 init
Filter02 doFilter
注: 如果在web.xml中有多个Filter,他们的执行顺序会根据
<filter-mapping></filter-mapping>
的配置顺序调用不同的Filter.
Filter的生命周期
- 服务器启动时,由服务器创建Filter对象,执行init()方法。
- 当访问的资源被拦截时,执行doFilter() 方法。
- 放行:filterChain.doFilter(servletRequest, servletResponse);
- 服务器关闭时,执行destory() 方法。
FilterConfig
// 获取Filter的filter-name
String filterName = config.getFilterName();
System.out.println(filterName);
// 获取在web.xml中<filter></filter>里配置的初始化参数
/*
<filter>
<filter-name>Filter02</filter-name>
<filter-class>com.zjl.main.filter.Filter02</filter-class>
<init-param>
<param-name>username</param-name>
<param-value>admin</param-value>
</init-param>
</filter>
*/
String username = config.getInitParameter("username");
System.out.println("username is " + username);
// 获取ServletContext对象
ServletContext servletContext = config.getServletContext();
String contextPath = servletContext.getContextPath();
System.out.println(contextPath);
Filter的配置
- url-pattern配置
- 完全路径匹配 :/*
- 目录匹配 : /a/*
- 扩展名匹配 : 不能以 / 开始,*.jsp
- 指定过滤某一确定的Servlet
<servlet-name>Test01</servlet-name>
- 指定过滤以哪一种方式过来的请求
<dispatcher>REQUEST</dispatcher>
(可以配置多个)
- REQUEST : 默认值
- FORWAD: 拦截转发
- ERROR: 拦截跳转到错误页面
- INCLUDE: 拦截在某一页面包含另一页面