Filter基础

2019-05-21  本文已影响0人  Mr_J316

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> 

使用注解

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

    ......
}
上一篇 下一篇

猜你喜欢

热点阅读