什么是Filter
- 可以使用户改变一个Request和修改一个Response
- 能够在Request到达Servlet之前预处理Request,也可以在离开Request时处理Response,Filter是一个Servlet链
- 一个Filter必须使用java.servlet,两者的数量对应关系任意
- Filter接口定义有三个方法:destory方法,,doFilter方法,init方法
简单来说Filter拦截其请求,完成一些通用操作(比如验证是否为登陆之后的请求,屏蔽掉提交表单中的敏感字符)。
实现步骤
- 定义一个类实现Filter接口
- 复写方法
- 配置拦截路径(xml与注解两种,与Servlet类似)
生命周期
init():启动服务器时加载过滤器的实例,并调用init()方法实现初始化
doFilter():放行,每一次请求时都只调用方法,可被执行多次
destory():服务器停止(正常关闭)时调用destory方法销毁实例
过滤器配置详解
拦截路径配置:
即访问哪些资源需要经过过滤器
- 具体资源路径:@WebFilter("/test.jsp"),则只有在访问test.jsp时过滤器才会被执行
- 拦截目录:@WebFilter("/xiaobin/*"),则访问xiaobin目录下的所有资源都会执行过滤器
- 后缀名拦截:@WebFilter("*.jsp"),则访问所有jsp资源时都会执行过滤器,注意前面没有“/”
- 拦截所有资源:@WebFilter("/*"),则访问所有资源时都会执行过滤器
拦截方式配置
即资源被访问的方式
注解配置:比如@WebFilter(value="/*" ,dispatcherTypes={DispatcherType.REQUEST, DispatcherType.ASYNC})
需要设置dispatcherTypes属性,属性值如下:
- REQUEST(默认):浏览器直接访问资源
- FORWARD:转发访问资源
- INCLUDE:包含访问
- ERROR:错误跳转
- SYNC:异步访问
xml配置:略
过滤器链:
执行顺序:过滤器1---->过滤器2----->资源执行------>过滤器2------>过滤器1
过滤器先后顺序:也是注解配置和xml配置
- 注解配置是根据类名的字符顺序,比如AFilter要比BFilter先执行
- web.xml是filter-mapping在上面的先执行
三大组件(Servlet、Filter、Listener)
Listener
监听器,从字面上可以看出Listener主要用来监听应用。通过listener可以监听web服务器中某一个执行动作,并根据其要求作出相应的响应。通俗的语言说就是在application,session,request三个对象创建消亡或者往其中添加修改删除属性时自动执行代码的功能组件。比如spring 的总监听器会在服务器启动的时候实例化我们配置的bean对象 、hibernate 的 session 的监听器会监听session的活动和生命周期,负责创建、关闭session等活动。
Servlet的监听器Listener,它是实现了javax.servlet.ServletContextListener 接口的服务器端程序,它也是随web应用的启动而启动,只初始化一次,随web应用的停止而销毁。主要作用是: 做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等。