Listener和Filter

Filter

概念

过滤器——Filter,它是JavaWeb三大组件之一。另外两个是Servlet和Listener。
它是在2000年发布的Servlet2.3规范中加入的一个接口。是Servlet规范中非常实用的技术。
它可以对web应用中的所有资源进行拦截,并且在拦截之后进行一些特殊的操作。
常见应用场景:URL级别的权限控制;过滤敏感词汇;中文乱码问题等等。

可以说是对一个servlet的增强
步骤:

1.定义一个类,实现接口Filter(实现的是servlet包下的filter)
2.复写方法(dofilter方法)
3.配置拦截路径(两种方式	1.web.xml配置  2.注解配置)
//注解配置
@WebFilter("/*")
//实现的是servlet包下的filter(别导错包)
public class EncodingFilter implements Filter {

    }

xml配置方式:

<!--配置过滤器-->
<filter>
    <filter-name>FilterDemo1</filter-name>
    <filter-class>com.itheima.web.filter.FilterDemo1</filter-class>
</filter>
<filter-mapping>
    <filter-name>FilterDemo1</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
//放行
filterChain.doFilter(servletRequest,servletResponse);

过滤器初始化参数配置

<filter>
    <filter-name>FilterDemo2</filter-name>
    <filter-class>com.itheima.web.filter.FilterDemo2</filter-class>
    <!--配置过滤器的初始化参数-->
    <init-param>
        <param-name>filterInitParamName</param-name>
        <param-value>filterInitParamValue</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>FilterDemo2</filter-name>
    <url-pattern>/ServletDemo1</url-pattern>
</filter-mapping>

生命周期

出生:当应用加载的时候执行实例化和初始化方法。
活着:只要应用一直提供服务,对象就一直存在。
死亡:当应用卸载时,或者服务器宕机时,对象消亡。

过滤器的五种拦截行为

<!--配置过滤器-->
<filter>
    <filter-name>FilterDemo1</filter-name>
    <filter-class>com.itheima.web.filter.FilterDemo1</filter-class>
    <!--配置开启异步支持,当dispatcher配置ASYNC时,需要配置此行-->
    <async-supported>true</async-supported>
</filter>
<filter-mapping>
    <filter-name>FilterDemo1</filter-name>
    <url-pattern>/ServletDemo1</url-pattern>
    <!--过滤请求:默认值。-->
    <dispatcher>REQUEST</dispatcher>
    <!--过滤全局错误页面:当由服务器调用全局错误页面时,过滤器工作-->
    <dispatcher>ERROR</dispatcher>
    <!--过滤请求转发:当请求转发时,过滤器工作。-->
    <dispatcher>FORWARD</dispatcher>
    <!--过滤请求包含:当请求包含时,过滤器工作。它只能过滤动态包含,jsp的include指令是静态包含-->
    <dispatcher>INCLUDE</dispatcher>
    <!--过滤异步类型,它要求我们在filter标签中配置开启异步支持-->
    <dispatcher>ASYNC</dispatcher>
</filter-mapping>

过滤器细节
过滤器执行流程

1.执行过滤器
2.执行放行后的资源
3.回来执行过滤器放行代码下边的代码

过滤器配置详解

拦截路径配置:

1.具体资源路径: /index.jsp   只有访问index.jsp资源时,过滤器才会被执行
2.拦截目录: /user/*    访问/user下的所有资源时,过滤器都会被执行
3.后缀名拦截: *.jsp     访问所有后缀名为jsp资源时,过滤器都会被执行
4. 拦截所有资源:/*	访问所有资源时,过滤器都会被执行
拦截方式配置:资源被访问的方式  注解配置:
设置dispatcherTypes属性
1.REQUEST:默认值。浏览器直接请求资源
2.FORWARD:转发访问资源
3.INCLUDE:包含访问资源
4.ERROR:错误跳转资源
5.ASYNC:异步访问资源
*web.xml配置
* 设置<dispatcher></dispatcher>标签即可

过滤器链(配置多个过滤器)

* 执行顺序:如果有两个过滤器:过滤器1和过滤器2	
1.过滤器1
2.过滤器2
3.资源执行
4.过滤器2
过滤器1 * 过滤器先后顺序问题:
1.注解配置:按照类名的字符串比较规则比较,值小的先执行
* 如: AFilter 和 BFilter,AFilter就先执行了。
2.web.xml配置: <filter-mapping>谁定义在上边,谁先执行
3.又有注解配置又有xml文件配置,先执行xml文件配置的

Listener:监听器

概念:
web的三大组件之一。
事件监听机制:

* 事件:一件事情

* 事件源 :事件发生的地方

* 监听器 :一个对象

*注册监听:

将事件、事件源、监听器绑定在一起。 当事件源上发生某个事件后,执行监听器代码

Servlet规范中的8个监听器简介

监听对象创建的

  • ServletContextListener

      用于监听ServletContext对象创建和销毁的监听器
    
  • HttpSessionListener

      用于监听HttpSession对象创建和销毁的监听器
    
  • ServletRequestListener

      用于监听ServletRequest对象创建和销毁的监听器
    

监听域中属性发生变化的

  • ServletContextAttributeListener

    用于监听ServletContext域(应用域)中属性发生变化的监听器
    
  • HttpSessionAttributeListener

    用于监听HttpSession域(会话域)中属性发生变化的监听器
    
  • ServletRequestAttributeListener

    用于监听ServletRequest域(请求域)中属性发生变化的监听器
    

和会话相关的两个感知型监听器

和会话域相关的两个感知型监听器是无需配置的,直接编写代码即可。
  • HttpSessionBinderListener

    用于感知对象和和会话域绑定的监听器
    当有数据加入会话域或从会话域中移除,此监听器的两个方法会执行。
    加入会话域即和会话域绑定
    从会话域移除即从会话域解绑
    
  • HttpSessionActivationListener

    用于感知会话域中对象钝化和活化的监听器
    

监听器的使用

  • 第一步:创建工程
  • 第二步:编写监听器
  • 第三步:在web.xml中配置监听器
<!--配置监听器-->
<listener>
    <listener-class>com.entor.listener.Servlet</listener-class>
</listener>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值