JAVA积累——Filter过滤器

简介: JAVA积累——Filter过滤器

过滤器的介绍


在servlet2.3中就有了过滤器的概念,他能对servlet容器的请求和响应对象进行检查和修改。但是serv过滤本身不会生成请求和响应对象,只是提供过滤功能。


filter起作用的分为两个阶段,在这两个阶段对servlet请求和响应对象进行修改,就是在servlet被调用之前检查request对象,并且修改request header和request内容。在servlet被调用之后检查response对象并修改response header和response内容。filter可以过滤的web组件包括servlet、JSP、HTML等,filter中的接口


我们在创建一个过滤器的时候必须实现javax.servlet.filter接口中的三个方法:

       public void init(FilterConfig filterConfig) throws ServletException {
  }

Servlet过滤器的初始化方法,Servlet容器创建Servlet过滤器实例后将调用该方法。该方法将读取web.xml文件中Servlet过滤器的初始化参数


@Override
  public void doFilter(ServletRequest request, ServletResponse response,
      FilterChain chain) throws IOException, ServletException {
    request.setCharacterEncoding(encoding);
    //此方法是继续向下执行,调用jsp
    chain.doFilter(request, response);
  }


该方法完成实际的过滤操作,当客户端请求方法与过滤器设置匹配的URL时,Servlet容器将先调用过滤器的doFilter方法。FilterChain用户访问后续过滤器。


这里的ServletRequest和ServletResponse一般需要转换成具体的Servlet实现对于的对象,如:HttpServletRequest和HttpServletResponse。


 

      @Override
  public void destroy() {
  }

Servlet容器在销毁过滤器实例前调用该方法,在该方法中释放Servlet过滤器占用的资源。


Filter中配置文件的使用

         <filter>
    <filter-name>CharsetEncodingFilter</filter-name>
    <filter-class>com.bjpowernode.drp.util.filter.CharsetEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>GB18030</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>CharsetEncodingFilter</filter-name>
    <url-pattern>*.jsp</url-pattern>
  </filter-mapping>

在上面的init()方法中我们会看到一个FilterConfig对象,这对象就可以获取到配置文件中配置的相关参数,获取方法如下:

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


下面介绍4种扩展匹配模式:


1、精确匹配,不需要任何的修饰符


        <filter-mapping>
    <filter-name>CharsetEncodingFilter</filter-name>
    <url-pattern>servlet/TestServlet</url-pattern>
  </filter-mapping>


2、扩展匹配,有“*”和扩展名组成


         <filter-mapping>
    <filter-name>CharsetEncodingFilter</filter-name>
    <url-pattern>*.jsp</url-pattern>
  </filter-mapping>

3、路径前缀匹配,包含一个目录和一个/*

         <filter-mapping>
    <filter-name>CharsetEncodingFilter</filter-name>
    <url-pattern>/sysmgr/*</url-pattern>
  </filter-mapping>

4、全部匹配,一般使用/*

        <filter-mapping>
    <filter-name>CharsetEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>


以上就是我根据一个通过Filter设置字符集编码的小例子讲解的filter,filter这种横切的思想在编程是非常重要的,我们需要思考这种思想的精髓,才能在项目中更好的运用它。

目录
相关文章
|
2月前
|
Java API 容器
Java 8 的流库:Filter、Map、FlatMap 及 Optional 的概念与用法
【6月更文挑战第9天】Java 8 引入了许多强大的新特性,其中流库(Stream API)和 Optional 类极大地简化了集合操作和空值处理。本文将深入探讨 filter、map、flatMap 以及 Optional 的概念和用法,并提供示例代码来展示其实际应用。
30 4
|
2月前
|
Java
Java web Filter过滤器
一、什么是Filter过滤器 它是java web的三大组件之一,三大组件分别为:servlet、filter、listener; 它的作用主要是用于拦截请求,过滤响应;拦截请求常见的应用场景有日记记录,权限校验。。。
30 3
|
2月前
|
前端开发 JavaScript 算法
javaweb(四)——过滤器与监听器
javaweb(四)——过滤器与监听器
|
2月前
|
安全 Java 容器
Java 1.8新特性使用记录:Filter、数据容器的转换、排序Sorted
Java 1.8新特性使用记录 有些方法一段时间不使用会忘记,这里要记录一下,方便以后使用 一、过滤Filter 二、数据容器的转换 三、List 排序
28 0
|
2月前
|
Java
java中Stream流中的forEach、filter、map、count、limit、skip、concat
java中Stream流中的forEach、filter、map、count、limit、skip、concat
40 0
|
2月前
|
Java
使用java文件过滤器输出制定格式文件路径
使用java文件过滤器输出制定格式文件路径
16 0
|
2月前
分享JavaWeb中filter过滤器的案例妙用 - 脏话过滤/编码过滤/代码过滤
分享JavaWeb中filter过滤器的案例妙用 - 脏话过滤/编码过滤/代码过滤
18 0
|
2月前
|
安全 前端开发 Java
代码审计-Java项目&Filter过滤器&CNVD分析&XSS跨站&框架安全
代码审计-Java项目&Filter过滤器&CNVD分析&XSS跨站&框架安全
|
2月前
|
Linux
elasticsearch启动报错:unable to install syscall filter: java.lang.UnsupportedOperationException: seccomp
elasticsearch启动报错:unable to install syscall filter: java.lang.UnsupportedOperationException: seccomp
16 0
|
3月前
|
Java 程序员 应用服务中间件
JavaWeb之过滤器(Filter)与监听器(Listener)
本文介绍了JavaWeb中的过滤器(Filter)和监听器(Listener)概念及其使用。过滤器主要用于拦截和处理Web资源请求,如进行编码设置、权限验证等,它在Servlet之前和之后执行。监听器则监听域对象(如ServletRequest、HttpSession、ServletContext)状态变化,分为创建/销毁监听和属性变化监听。监听器在Web.xml中注册后会在相应事件发生时自动执行,例如用于统计网站访问人数或初始化配置。