Filter&Listener

Filter(过滤器)

javaweb中的过滤器
当用户访问服务器资源时,过滤器将请求拦截下来,完成一些特殊的功能.还可以对响应信息进行拦截过来(一般是用来做数据压缩的)
作用:一般用于完成通用的操作。如:登录验证、统一编码处理、敏感字符过滤

执行流程

1.客户端向服务器发起访问资源的请求
2.Filter将请求拦截住,开始处理访问资源之前的逻辑
3.Filter决定是否要放行访问请求,如果放行,请求继续向后运行
4.请求访问到相关资源,然后服务器给出响应
5.Filter将响应拦截住,开始处理访问资源之后的逻辑
6.服务器将响应返回给浏览器

生命周期

 init:过滤器的初始化方法,服务器启动的时候执行一次。
 doFilter:当请求满足拦截路径条件时执行,可执行多次。
 destory:过滤器的销毁方法,服务器停止或者将项目从服务器中移除的时候执行一次。

配置

一个路径只能有一个servlet执行,但是一个路径可以有多个filter执行.且filter中不存在路径优先级问题
- xml中,根据filter-mapping标签在web.xml中顺序决定的(自上而下的顺序)
- 注解中,根据FiIter的类名的字典(自然)顺序决定

- 精确路径匹配   例如:/demo1   /1.html   /a/b/demo23
- 模糊路径匹配  例如:/a/b/*   /a/*   /*   注意:(/*在servlet中最好不要使用)
- 后缀名匹配  例如: *.jsp   *.do  *.action
在filter中一般使用的模糊路径匹配和后缀名匹配

默认情况下,过滤器只会拦截直接访问和重定向访问,其它的类型都不拦截,但是可以通过配置
dispatcher属性来改变这一行为。
        REQUEST:默认值,用于拦截直接访问或者重定向请求
        FORWARD:用于拦截转发请求

注解配置
使用注解可以简化xml的配置, 常用注解选项如下:
         urlPatterns指定拦截的路径,等同于 
         initParams  配置参数
         dispatcherTypes  配置拦截类型
<filter>
    <filter-name>TargetFilter</filter-name><!--别名-->
    <filter-class>com.eponine.Filter.TargetFilter</filter-class><!--全路径-->
</filter>
<filter-mapping><!--映射配置-->
    <filter-name>TargetFilter</filter-name>
    <url-pattern>/target.jsp</url-pattern><!--拦截路径-->
    <!--
    FORWARD拦截请求转发
    REQUEST拦截直接访问,默认
    如果设置成FORWARD,则只能拦截请求转发,直接访问无法拦截!一般不用!
	-->
	<dispatcher>FORWARD</dispatcher>
</filter-mapping>

listener(监听器)

web中的监听器主要用于监听web三大域对象:Request、Session、ServletContext.
主要监听这三个域对象的创建和销毁以及域对象中存储对象的增加和减少.
public class MyListener implements ServletContextListener , HttpSessionAttributeListener{
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        System.out.println("context初始化");
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println("context摧毁");
    }

    @Override
    public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("session添加");
    }

    @Override
    public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("session删除");
    }

    @Override
    public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("session修改");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值