过滤器是一个能够过滤掉不合理请求的过滤网,它能够获取用户对于资源的请求,并进行判断,根据用户的请求对其作出相应的处理。
创建过滤器类
过滤器要实现 javax.servlet.Filter
接口,其中会有三个方法,分别是init()
,doFilter()
,destroy()
。
public class firstFileter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("filter init。。。。");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("doFilter ...........");
//放行,通过了当前过滤器,递交给下一个filter进行过滤
chain.doFilter(request, response);
}
@Override
public void destroy() {
System.out.println("filter destroy。。。。。。");
}
}
注册过滤器
在web.xml中注册过滤器
<filter>
<!--过滤器的名字-->
<filter-name>firstFilter</filter-name>
<!--过滤器对应的类全名-->
<filter-class>firstFileter</filter-class>
</filter>
<filter-mapping>
<!--要配置的过滤器的名字-->
<filter-name>firstFilter</filter-name>
<!--过滤器过滤的请求路径-->
<url-pattern>/*</url-pattern>
</filter-mapping>
过滤器的分类
在servlet2.5中有四种:
- request过滤器:用户直接访问页面的时候,会调用该过滤器。
- forward过滤器:目标资源使用forward方式访问的时候进行过滤。
- include过滤器:目标资源使用include方式访问时,进行过滤。
- error过滤器:目标资源使用声明式异常处理机制访问时,进行过滤。
servlet3.0有新增了对异步的支持:
- async过滤器:支持异步处理。
使用注解的方式配置过滤器@WebFilter
属性名 | 类型 | 作用 |
---|---|---|
filterName | String | 指定过滤器名称,等价于<filter-name> |
value | String[] | 等价于<url-parrern> ,指定URL匹配模式,但不应该与urlPatterns同时使用 |
urlPatterns | String[] | 等价于<url-parrern> ,指定URL匹配模式 |
servletNames | String[] | 指定过滤器将用于哪些servlet,取值是@WebServlet中的值,或者<servlet-name> 的值 |
dispatcherTypes | DispatcherType | 指定过滤器的转发模式,包括ASYNC、ERROR、FORWARD、INCLUDE、REQUEST。 |
initParams | 指定一组过滤器初始化参数,等价于<init-param> 标签 | |
asyncSupported | boolean | 声明过滤器是否支持异步操作模式 |
description | String | 说明该过滤器的描述信息 |
displayName | String | 该过滤器的显示名,等价于<display-name> |
@WebFilter(filterName = "second",value = {"*.do","/log*"},servletNames = {"huanJing"})
public class secondfilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
}
@Override
public void destroy() {
}
}