【Filter】过滤器知识点汇总

Filter过滤器

概念:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能(响应同样又会被拦截)

用途:登录验证、统一编码处理、敏感词过滤等

在这里插入图片描述
 
 

Filter快速入门

>>> 配置拦截路径有两种方式:web.xml / 注解  (这里使用注解,比较方便)

@WebFilter("/*")
public class DemoFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
		System.out.println("服务器启动后,创建Filter对象————init方法用于加载资源,执行一次");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("我去了!———— 对request请求消息增强");					
        filterChain.doFilter(servletRequest, servletResponse);		// (★)放行
        System.out.println("我又回来了!———— 对response响应消息增强");							
    }

    @Override
    public void destroy() {
		System.out.println("服务器正常关闭,销毁Filter对象————destroy方法用于释放资源,执行一次");
    }
}
<!-- 补充一下xml配置方式 (和Servlet一样,熟悉的两层映射,自定义名称作为过渡) -->

<filter>
    <filter-name>myFilter</filter-name>
    <filter-class>DemoFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>myFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

 

 

Filter细节

 
过滤器执行流程

  1. 放行前的代码
  2. 放行,执行资源
  3. 放行后的代码

过滤器生命周期

  和Servlet一样,方法对应着其生命周期:init → doFilter → destroy
 
过滤器配置详解(拦截路径)

拦截具体资源/index.jsp
拦截所有资源/*
目录拦截/loli/*
后缀名拦截*.jsp (开头不加斜杠)

 
过滤器配置详解(拦截方式)

设置dispatcherTypes[ ]属性值
REQUEST(默认值)浏览器直接请求资源
FORWARD转发访问资源
INCLUDE包含访问资源
ERROR错误跳转资源
ASYNC异步访问资源

 
过滤器链

代码执行顺序:过滤器1 → 过滤器2 → 执行资源 → 过滤器2 → 过滤器1

过滤器顺序:

  1. 注解配置:类名按照字符串比较规则进行比较。比如AFilter先于BFilter。
  2. web.xml配置: <filter-mapping>谁定义在上边,谁先执行

 
 

Filter经典案例

  1. 登录验证
  2. 敏感词过滤

 
 

 
 

补充知识点:Listener监听器

概述:web三大组件(Servlet,Filter,Listener)

概念

  1. 和JS类似的:事件源,事件,监听器(btn.addEventListener("click", function(){})
  2. 注册监听:事件源发生指定事件后,触发监听器,执行相应代码(如上)

▶ Servlet三大域分别被三个监听器监听:ServletContextListener, HttpSessionListener, ServletRequestListener

▶ 下面着重介绍ServletContextListener监听器

1.定义一个类实现ServletContextListener接口
2.复写方法
3.配置(xml / 注解)

// 这里是空的,因为监听的事件源就是接口对应的三大域之一
@WebListener()			
public class DemoListener implements ServletContextListener {

    public void contextInitialized(ServletContextEvent sce) {
    	System.out.println("ServletContext对象创建之后自动调用该方法");
    }

    public void contextDestroyed(ServletContextEvent sce) {
		System.out.println("ServletContext对象销毁之前自动调用该方法");
    }

}

 

 

 
 
 
 
 
 

 
 

 
 
 
 

 
 

End ♬

by a Lolicon ✪

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值