过滤器

1、概念

  • 过滤器是可能对web申请和web响应的头属性和内容体进行操作的一种非凡web组件
  • 过滤器的非凡之处在于自身并不间接生成web响应,而是拦挡web申请和响应,以便查看、提取或以某种形式操作客户机和服务器之间替换的数据

2、过滤器的性能

  • 剖析web申请,对输出数据进行预处理
  • 阻止web申请和响应的进行
  • 依据性能改变申请的头信息和数据体
  • 与其余web资源合作

3、过滤器的基本原理

4、用法

  • 配置web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0">    <!--配置过滤器-->    <filter>        <filter-name>filter</filter-name>        <filter-class>com.syf.filter.MyFilter</filter-class>    </filter>    <filter-mapping>        <filter-name>filter</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>    <servlet>        <servlet-name>FilterServlet</servlet-name>        <servlet-class>com.syf.FilterServlet</servlet-class>    </servlet>    <servlet-mapping>        <servlet-name>FilterServlet</servlet-name>        <url-pattern>/filter</url-pattern>    </servlet-mapping></web-app>
  • 定义过滤器
package com.syf.filter;import javax.servlet.*;import java.io.IOException;/** * 自定义过滤器,实现申请拦挡及资源对立治理性能 * 实现形式及生命周期: * 定义java类实现Filter接口 * 重写接口办法 *      init:初始化 tomcat启动的时候执行一次 *      doFilter:进行拦挡解决        每次申请都会执行 *      destroy:销毁 Tomcat敞开的时候执行 */public class MyFilter implements Filter {    @Override public void init(FilterConfig filterConfig) throws ServletException {        System.out.println("第一个过滤器初始化");    }    @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {        System.out.println("第一个过滤器执行开始");        //调用对应的Servlet        filterChain.doFilter(servletRequest,servletResponse);        System.out.println("第一个过滤器执行完结");    }    @Override public void destroy() {        System.out.println("第一个过滤器销毁");    }}
  • 过滤器链

FilterChain接口用于调用过滤器链中的一系列过滤器

减少一个过滤器MyFilter2

public class MyFilter2 implements Filter {    @Override public void init(FilterConfig filterConfig) throws ServletException {        System.out.println("第二个过滤器初始化");    }    @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {        System.out.println("第二个过滤器执行开始");        //调用对应的Servlet        filterChain.doFilter(servletRequest, servletResponse);        System.out.println("第二个过滤器执行完结");    }    @Override public void destroy() {        System.out.println("第二个过滤器销毁");    }}

配置web.xml

<filter>    <filter-name>filter2</filter-name>    <filter-class>com.syf.filter.MyFilter2</filter-class></filter><filter-mapping>    <filter-name>filter2</filter-name>    <url-pattern>/*</url-pattern></filter-mapping>
  • 在我的项目中能够定义多个过滤器,开始执行的时候,依据用户的申请,把合乎规定的过滤器挨个执行。
  • 最好每个过滤器齐全独立的过滤性能,不要将多个逻辑解决搁置到同一个过滤器中,耦合度高,不利于保护
  • 在web.xml配置文件中,能够配置过滤器过滤哪些申请

/*:匹配所有申请
/*.xx:匹配后缀为xx的申请
/xx.xx:匹配申请为xx.xx的申请

监听器

1、作用
监听作用域对象的创立与销毁及属性的相干配置,能够增加一些公共的属性配置,做逻辑判断等
次要监听三种作用域:ServletContext、session、request