过滤器是什么
对客户端发出来的请求进行过滤。
过滤器有什么用
主要是起到的是拦截作用 , 用于在客户端 请求服务器资源的时候,执行过滤(拦截) 。 如果过滤器放行,那么这个请求才能到达服务器 ,如果过滤器拒绝放行,那么服务器就不会收到这个请求。
过滤器应用场景
- 对一些敏感词汇进行过滤
- 统一设置编码
- 自动登录等
过滤器如何使用
1.定义一个类, 实现Filter
public class FilterDemo implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("来到过虑器了。。。");
}
public void init(FilterConfig fConfig) throws ServletException {
}
}
2.注册过滤器
<filter>
<display-name>FilterDemo</display-name>
<filter-name>FilterDemo</filter-name>
<filter-class>com.rosinante.filter.FilterDemo</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterDemo</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Filter的生命周期
创建 :在服务器启动的时候就创建。
销毁 :服务器停止的时候。
Filter执行顺序
-
客户端发出请求,先经过过滤器, 如果过滤器放行,那么才能到servlet
-
如果有多个过滤器, 那么他们会按照注册的映射顺序来排队。 只要有一个过滤器不放行,那么后面排队的过滤器以及servlet都不会收到请求。
Filter的配置说明
1.init方法的参数 FilterConfig , 可以用于获取 filter 在注册的名字以及初始化参数。 其实这里的设计的初衷与ServletConfig是一样的。
2.如果想放行,那么在 doFilter 方法里面操作,使用参数 chain
chain.doFilter(request, response); 放行, 让请求到达下一个目标。
3.过滤器拦截的是谁, 具体还是看 url-patter的设置。 此处的设置与servlet的设置是一样。
-
全路径匹配 以 / 开始
/LoginServlet
-
以目录匹配 以 / 开始 以 * 结束
/demo01/*
-
以后缀名匹配 以 * 开始 以后缀名结束
*.jsp *.html *.do
4.除了以上的配置。还可以使用dispatch来对当前的请求类型进行过滤:
- REQUEST :默认值,默认过滤器只会拦截请求
- FORWARD :过滤器拦截转发
- INCLUDE :过滤器拦截包含
- ERROR :过滤器拦截全局错误页面的跳转。