过滤器和监听器
过滤器
概念:过滤器时servlet的一个组件,可以插入或者移除,可以拦截servlet的请求request和响应response,针对用户需要访问的数据或者资源做一些预处理的干预。
拦截请求的方式:
1. /login.jsp --表示拦截login.jsp的请求
2. /test/* --表示拦截当前目录下/test子目录的所有资源
3. *.jsp --表示拦截所有以jsp后缀的文件请求
4. / * --表示当前目录下面的所有资源
监听器的概念
监听器也是servlet规范中定义一种组件,用来监听容器http请求-响应中的一些对象的生成和销毁操作。
生命周期的对象和绑定数据监听
HttpServletRequest:(周期)一次请求和响应的对象数据传递
监听接口:ServletResquestListener
--request的初始化
--request的销毁
绑定数据的接口:ServletReqestAttributeListener
--request绑定数据
--request移除数据
--request更新或者替换数据
HttpSession:一次会话(可能会有多次请求和响应,除非会话被销毁或过期)--session.invalidate();
监听接口:HttpSessionListener
--session的创建-->id
--session的销毁
ServletContext:容器关闭或者实例被移除
监听接口:ServletContextListener
--sc的创建
--sc的销毁
下面是通过session绑定获取上下文
import javax.servlet.ServletContext;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
@WebListener
public class MySessionListener implements HttpSessionListener {
//判定当前人数
private Integer count=0;
@Override
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
//如果监听到了有新的session创建,说明有登录了
count++;
ServletContext sc=httpSessionEvent.getSession().getServletContext();
sc.setAttribute("count",count);
}
@Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
//如果监听到了用户的session销毁,说明用户下线了,将在线用户数量--
count--;
ServletContext sc=httpSessionEvent.getSession().getServletContext();
sc.setAttribute("count",count);
}
}