Filter入门学习

Filter

Filter的定义

Filter也叫过滤器也可以叫拦截器,使用Filter技术可以对web服务器管理的所有web资源,比如:Jsp,Servlet,静态图片文件或静态html文件进行拦截,从而实现一些特殊的功能。比如:实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等。

Filter的使用

  1. 编写Java类实现Filter接口
  2. 重写doFilter方法
  3. 设置拦截的url

Filter的配置

使用xml配置

在web.xml配置文件里配置:

<filter>
        <filter-name>first_filter</filter-name>
        <filter-class>cn.cube.Filter.FirstFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>first_filter</filter-name>
<!--        这个是通过资源路径来拦截-->
        <url-pattern>/filterServlet</url-pattern>
<!--        可以过滤所有 以及部分资源-->
        <url-pattern>/*</url-pattern>
<!--        这个是对ServletName进行拦截-->
<!--        <servlet-name>FilterServlet</servlet-name>-->
    </filter-mapping>

filter-name是你自己设置filter的name,filter-class是你创建的实现了FIlter接口Java类,url-pattern是通过资源路径来获取要拦截的Servlet,servlet-name是通过Servlet类的name来获取要拦截的Servlet。Servlet的name以及资源路径可以通过@WebServlet注解来进行配置。

使用注解配置

在你创建的实现Filter接口的Java类上添加@WebFliter("..."),括号里面有几种情况:

  • 注解为@WebFilter(servletName = "...")与servlet-name配置效果一致
  • 注解为@WebFliter("..."),全部省略不写,表示资源路径即value值,与url-pattern配置效果一致
  • 注解为@WebFilter(servletNames = {"...","..."})表示拦截多个servlet-name的资源

Filter的优先级

使用xml配置高于使用注解进行配置。

使用注解配置,优先级看类名字符串字母顺序。如果不同包同名,则按照包名排序

使用xml配置,按照 filter-mapping顺序,从上往下。

过滤器链

通常客户端对服务器请求之后,服务器调用Servlet之前会执行一组过滤器,这组过滤器就被称为一条过滤器链。
每个过滤器实现某个特定的功能,一个过滤器检测多个Servlet(匹配几个,检测几个)。
当第一个Filter的doFliter方法被调用时,web服务器会创建一个代表Filter链的FilterChain对象传递给该方法。在doFilter方法中,如果调用了FilterChain对象的doFilter方法,则web服务器会检查FilterChain对象中是否还有filter,如果有则继续调用。

Filter的初始化参数

在web.xml文件里配置

<filter>
    <init-param>
    <param-name>charset</param-name>
    <param-value>UTF-8</param-value>
</init-param>
</filter>

param-name是指配置参数名,param-value是指配置参数值

使用注解进行配置

@WebFilter(servletNames = "/filterServlet",initParams = {@WebInitParam(name = "charset",value = "UTF-8")})

初始化参数的获取

在init方法中使用FilterConfig对象来获取:

@Override
    public void init(FilterConfig filterConfig) throws ServletException {
        String charset = filterConfig.getInitParameter("charset");
    }

也可以自己在外部定义一个FilterConfig对象,就可以在不同方法中获取初始化参数。

使用Filter设置编码

通常我们在获取请求参数或者要在页面输出文字前,要先设置编码,现在有了过滤器之后,就可以直接在一个过滤器里设置编码,注解的value值设为"/*",就可以实现所有的Servlet在使用时都不用设置编码。

posted @ 2020-04-06 10:29  _赵成  阅读(231)  评论(0)    收藏  举报