过滤器和监听器
过滤器
过滤器的作用
Filter过滤器,开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截。简单说,就是可以实现web容器对某资源的访问前截获进行相关的处理,还可以在某资源向web容器返回响应前进行截获进行处理;
编写步骤
写一个类去实现Filter接口,并实现接口中的所有方法;
在web.xml中配置或者使用注解配置【@WebFilter(“过滤器路径”)不推荐】
执行流程
1.会先去匹配过滤器,再是Servlet
2.会先去匹配过滤器(web.xml)
生命周期
服务和销毁跟Servlet一样
出生(实例化和初始化):
默认是在项目部署的时候进行实例化和初始化,好处是可以提高效率,Fiter是单例的
过滤器链
就是多个过滤器
注意:在Servlet中请求不能重复,但是在过滤器里面可以重复,过滤器执行的顺序根据xml配置顺序有关
过滤器的其他配置
过滤器针对一个请求,一个请求执行一次过滤
重定向:多次请求,多次执行
转发:一次请求,执行一次
FilterConfig
ServletConfig – 获取Servlet的初始化参数
FilterConfig – 获取Filter的初始化参数
实现登录拦截
实现只能登录才能访问后面的页面功能,使用过滤器的demo
1 | package com.ifueen.filter; |
web.xml配置
1 | <!-- 权限过滤 --> |
实现字符编码解码过滤
在使用get请求的时候我们的tomcat会自动进行编码和解码,但是在使用post的时候就不会,所以我们用过滤器来进行一个编码解码
1 | package com.ifueen.filter; |
web.xml配置
1 | <!-- 编码问题过滤 --> |
监听器
监听器对象的创建和销毁
监听ServletContext对象的创建和销毁
ServletContext对象的创建和销毁:
创建:服务器启动的时候,服务器为每个WEB应用创建一个属于该web项目的对象ServletContext
销毁:服务器关闭或者项目从服务器中移除的时候
1 | public class MyServletContextListener implements ServletContextListener{ |
监听器中的属性变更
ServletContextAttributeListener 对Context的监听
HttpSessionAttributeListener 对Session的监听
ServletRequestAttributeListener 对请求的监听
Demo
实现一个统计在线人数的监听器
1 | package com.ifueen.listener; |
jsp页面
1 | <%@ page pageEncoding="UTF-8"%> |
web.xml配置
1 | <!-- 监听器的配置 --> |