Filter基础

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); 
    }

    ......
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容