2019-05-21
Filter简介
Filter中文译名为过滤器。过滤器在request到达Servlet之前,拦截request,根据需要检查或修改request。并且在response到达客户端之前,拦截response,检查或修改response
Filter可以构成过滤器链(FilterChain),一个FilterChain包括多个Filter,形成客户端与服务器端之间的一层滤网。
创建Filter
所有Servlet过滤器类必须实现javax.servlet.Filter接口。该接口有3个必须实现的方法:
init(FilterConfig):过滤器初始化方法,服务器启动时创建过滤器实例时自动调用该方法,并且只执行一次。方法可以读取web.xml文件中过滤器的初始化参数。
doFilter(ServletRequest,ServletResponse,FilterChain):完成实际的过滤操作,每次有客户端请求时都会被调用。如果该请求不合法则阻塞该请求;如果该请求合法则可通过FilterChain参数将request递交给FilterChain中下一个Filter,如果所有的Filter都走完了则交给Servlet处理。
destroy():服务器停止时在销毁过滤器实例前调用,释放过滤器占用的资源。
public class FirstFilter implements Filter{
public void init(FilterConfig filterConfig) throws ServletException{
}
public void doFilter(ServletRequest request,ServletResponse response,
FilterChain chain) throws IOException, ServletException {
}
public void destroy() {
}
}
在web.xml文件中配置Filter
<filter>
<filter-name>FirstFilter</filter-name>
<filter-class>com.filter.FirstFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>FirstFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- <filter-name>指定过滤器名字,<filter-class>指定过滤器的全限定名。
- <filter-mapping>用于将过滤器和URL关联 ,当客户请求的URL和<url-pattern>指定的URL相匹配时,就会触发过滤器。如果希望过滤器能过滤所有的客户请求,可以将<url-pattern>的值设置为
/*
,如果只过滤JSP文件,则可设置为*.jsp
- 可以配置多个Filter,按照web.xml的配置顺序依次执行。<filter-mapping>配置在前的Filter先执行,形成一个串联效果。
使用注解
@WebFilter(filterName="名字",urlPatterns="url")
@WebFilter("url")
注解配置的多个Filter可以通过文件名的字典顺序执行
Filter应用
字符编码过滤EncodingFilter
使用post请求发送中文时会出现乱码,可以使用过滤器拦截所有请求,统一修改编码
@WebFilter("/*") //拦截所有请求
public class EncodingFilter implements Filter {
......
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
request.setCharacterEncoding("utf-8"); //修改编码
chain.doFilter(request, response);
}
......
}
网友评论